Preface
一款 app 从开发者手里到最终交付到用户桌面的整个过程中,编写代码只是其中小小的一环,我们需要搭建相应的开发环境、分发完整产物进行测试、并最终将其配以合适的宣传文案以供用户享用。本文将叙述作为一名一线 iOS 开发者与 App Store「打交道」的纪实经历。
Date | Notes |
---|---|
2019.08.30 | 首次提交 |
分发渠道
App Icon
app 图标是用户触及 app 的第一扇门,而由于目前苹果设备分辨率众多,每个设备所需的尺寸都不大一致。另外 iOS/watchOS 会自动对 icon 进行圆角矩形化裁切,并根据某些动画进行拉伸,因此提供的 icon 不要进行手动裁切。
目前最新 Xcode(11.0)中一个项目所需 app icon 的全部尺寸如下表;单位为 pt
,可根据 Image Size 相乘换算为所需的 px
;划掉的尺寸意味着与其它已有所需尺寸重复,可无需再次提供。
- iOS:
Position | Image Size | iPhone | iPad | iPad Pro (12.9) |
---|---|---|---|---|
Notification | 1x | - | 20 * 20 | - |
Notification | 2x | 20 * 20 | - | |
Notification | 3x | 20 * 20 | - | - |
Settings | 1x | - | 29 * 29 | - |
Settings | 2x | 29 * 29 | - | |
Settings | 3x | 29 * 29 | - | - |
Spotlight | 1x | - | 40 * 40 | - |
Spotlight | 2x | 40 * 40 | - | |
Spotlight | 3x | 40 * 40 | - | - |
App | 1x | - | 76 * 76 | - |
App | 2x | 60 * 60 | 76 * 76 | 83.5 * 83.5 |
App | 3x | 60 * 60 | - | - |
App Store | 1x | 1024 * 1024 | - | - |
- watchOS:
Position | Image Size | Apple Watch 38mm |
Apple Watch 40mm/42mm |
Apple Watch 44mm |
---|---|---|---|---|
Notification Center | 1x | - | - | - |
Notification Center | 2x | 24 * 24 | 27.5 * 27.5 | 29 * 29 |
Notification Center | 3x | - | - | 29 * 29 |
Home Screen | 1x | - | - | - |
Home Screen | 2x | 40 * 40 | 44 * 44 | 50 * 50 |
Home Screen | 3x | - | - | - |
Short Look | 1x | - | - | - |
Short Look | 2x | 86 * 86 | 98 * 98 | 108 * 108 |
Short Look | 3x | - | - | - |
App Store | 1x | 1024 * 1024 | - | - |
开发
企业
TestFlight
App Store
分析
function active_count_lower_than(target_version) {
// Format target version
target_version = target_version
.split(".")
.map(e => {
if (e.length < 2) {
return "0" + e;
} else {
return e;
}
})
.join(".");
console.log("Formatted Target Version is ", target_version);
tr_elements = [].filter.call(
document.getElementsByTagName("tr"),
el => el.className == "ng-scope"
);
versions = [].map.call(tr_elements, el =>
el
.getElementsByClassName("title ng-binding")[0]
.innerHTML.replace(" (iOS)", "")
);
counts = [].map.call(tr_elements, el =>
Number(
el
.getElementsByClassName("ng-scope ng-binding")[0]
.innerHTML.replace(",", "")
)
);
var sum = 0;
versions.forEach(function(value, index, array) {
version = value
.split(".")
.map(e => {
if (e.length < 2) {
return "0" + e;
} else {
return e;
}
})
.join(".");
if (version < target_version) {
sum += counts[index];
console.log("Calculating version: ", version);
} else {
console.log("Skipping version: ", version);
}
});
return sum;
}