實際要從無到有自己走一遍 iOS 的上架流程真的是會遇到各種小問題,我目前已經用 Expo + React Native 做了一個 Paaaack 的 iOS App,現在正在進行上架到 App Store 的動作,不得不說 Expo 真的把 build 跟 submit 封裝得超棒,透過 eas-cli 很簡單就能完成:
eas build --platform ios
eas submit -p ios
甚至還有漂亮的後台能看!
不過成功把 app submit 到 App Store Connect 後,會發現有個 Missing Compliance 的 warning,而且會沒辦法把 Tester 加進 TestFlight Build,不能在上架前先用 TestFlight 測試是不太行的。
查了一下問題原因,原來是 Expo 預設不會幫忙設定 Info.plist
的 ITSAppUsersNonExemptEncrption
,而在 App 只有使用 https request 沒有用其他特別的加密方式的情況下 ITSAppUsersNonExemptEncrption
是可以設定成 false 就好就不會有 Compliance 需要提出。
Solution
修改 app.json
,加上 expo.ios.config.usesNonExemptEncryption: false
// app.json
{
"expo": {
"ios": {
"config": {
// https://docs.expo.dev/versions/latest/config/app/#usesnonexemptencryption
// Type: boolean • Path: ios.config.usesNonExemptEncryption
// Sets ITSAppUsesNonExemptEncryption in the standalone ipa's Info.plist to the given boolean value.
"usesNonExemptEncryption": false
}
}
}
}
重跑一次 npx expo prebuild
讓 Expo 修改 ios 的 Info.plist
ITSAppUsersNonExemptEncrption to false
最後再跑一次 build 跟 submit 送上新版
eas build --platform ios
eas submit -p ios
就能得到可以透過 TestFlight 安裝的 Build 了!
Reference
- https://www.reddit.com/r/reactnative/comments/hb007s/apples_export_compliance_information_on_expo_app/
- https://medium.com/%E5%BD%BC%E5%BE%97%E6%BD%98%E7%9A%84-swift-ios-app-%E9%96%8B%E7%99%BC%E5%95%8F%E9%A1%8C%E8%A7%A3%E7%AD%94%E9%9B%86/%E8%A8%AD%E5%AE%9A-app-uses-non-exempt-encryption-70587f6d238d
- https://docs.expo.dev/tutorial/eas/ios-production-build/#release-an-internal-testing-version
- https://docs.expo.dev/versions/latest/sdk/securestore/#exempting-encryption-prompt
- https://docs.expo.dev/versions/latest/config/app/#usesnonexemptencryption