作為系列文章的第十九篇,本篇將科普 Android 和 iOS 平臺的打包和提交稽核流程。
因為很多 Flutter 開發人員可能只有單端的開發經驗,對於另外一端的打包和提審流程不熟悉,或者是前端人員沒有提交稽核的經驗,所以本篇將科普這一流程,讓大家少走彎路。
文章彙總地址:
一、Android 打包和稽核流程
1、打包
事實上 Androd 的打包和稽核流程都相對簡單,打包 apk 只需要通過如下命令列就可以完成:
flutter build apk --target-platform android-arm64
flutter build apk --target-platform android-arm64 -t lib/main_prod.dart
複製程式碼
-
其中
--target-platform
是針對打包後的 so 檔案, 對需要支援的框架進行選擇,因為現在無論是 Goole Play 或者國內平臺,都多都有要求應用需要支援arm64-v8a
的 ABI 架構,所以一般打包也會選擇指定target-platform
來減小 apk 的體積。 -
-t
表示指定其他main.dart
打包,也可以不指定。 -
另外需要注意,Android 上需要在
android/app/src/build.gradle
下配置signingConfigs
來指定打包金鑰等資訊,具體生成金鑰這裡就不詳說,之後把signingConfigs
配置到buildTypes
就完成配置。
android {
····
signingConfigs {
config {
keyAlias "xxxx"
keyPassword "xxxx"
storeFile file("../keystores/xxxxx.jks")
storePassword "xxxx"
}
}
複製程式碼
最後需要注意,如果你的 Apk 存在其他型別架構的 so 目錄,比如 armeabi-v7a
等,那就需要在 android/app/src/build.gradle
的 android { buildTypes {
下加上 ndk abiFilters
進行過濾配置,因為 Android 下需要保證每個 ABI 目錄內的 so 檔案是完整齊全的,不然可能出現崩潰。
buildTypes {
release {
signingConfig signingConfigs.config
ndk {
//設定支援的SO庫架構
abiFilters 'arm64-v8a'
}
}
debug {
signingConfig signingConfigs.config
ndk {
//設定支援的SO庫架構
abiFilters 'arm64-v8a', 'x86', 'x86_64'
}
}
}
複製程式碼
最後打包完的 Apk 預設會在如下圖所示路徑
2、提交稽核
其實在 Android 上提交稽核是比較簡單的,因為 Android 只需要提供 Apk 下載連結就可以直接安裝,所以很多廠家都在有自己伺服器上直接放上 Apk 檔案,但是為了更好的體驗和分發,大多數情況下也會選上傳到各大應用平臺,比如華為上沒有上架的話,會出現如下圖所示問題。
甚至有些 Apk 因為沒有上架,會因為
app_name
等原因被當作病毒提醒。
事實上國內的應用市場稽核並不麻煩,只是因為平臺多且各家條件可能不一樣變得比較繁瑣,目前主流要求的有:
targetSdkVersion
28 (9.0);- ABI 需要支援
arm64-v8a
; - 應用需要針對 AndroidQ(10.0)進行適配,比如檔案讀取許可權變更;
- 教育類應用需要備案;
- 需要提供使用者隱私協議和許可權說明;
之後就是一些平臺的獨立稽核問題,比如 360 平臺稽核要求你的 Apk 需要經過它們的應用加固(加固後的作用就見仁見智),並且不少平臺如應用寶要求提供應用的版權說明等檔案,這些都是比較磨人的東西。
當然有些平臺你可以不上,但是比如不上應用寶,你就很難獲得微信掃一掃後跳轉開啟應用和下載的能力。
另外比如華為平臺會有:根據工信部關於開展 APP 侵害使用者權益專項整治工作的通知要求,應用內還需要提供帳號登出服務或銷戶功能能力。
可以看出 Android 的稽核和條件其實並不繁瑣,只是有些平臺需要的東西比較磨人,具體需要上架可以根據需求自行斟酌了。
二、iOS 打包和稽核流程
1、打包
iOS 的打包和稽核流程相對複雜點,打包 iOS 首先你需要有開發者賬號、給應用申請和設定有 Bundle Identifier
、配置檔案、證書等資訊,相信已經到打包階段了,這系列檔案你不會欠缺吧?
1.1 建立 App Store Connect
通過登入 developer.apple.com 網站,在 Account
的 Certificates,IDs & Profiles
可以找到你應用的資訊,同時在 App Store Connect
欄目可以前往 appstoreconnect.apple.com 。
接著在 我的 App
按照提示建立應用,填寫資訊根據業務要求填寫即可,這裡主要說幾個需要關注的點。
- 1、如下圖所示在 App Store 的 App 資訊裡有一個隱私政策網站輸入欄,這個是必填的,一般就是放一個 Html,具體可以參考類似的: guoshuyu.cn/home/index/…
- 2、需要上傳應用的截圖,一般需要準備 3-5 張預覽圖,但是這裡需要 6.5 寸和 5.5 寸兩種,如果還需要支援 iPad 版本那就還需要上傳 12.9 的 iPad 圖。這裡推薦下,如果沒有設計師出稿件,推薦使用模擬器進行截圖(注意不要截入 DEBUG 的 Label), 6.5 寸可以用 iPhone 11promax 模擬器,5.5 寸的用 8plus 模擬器,開啟具體頁面後,按下 command + s 可以儲存到桌面。
這裡需要注意,截圖的畫面不要太簡單,最好能替體現應用的具體內容,不然很容易被拒絕,這裡同時提供需要尺寸對應的裝置型號。
- 3、在版本的資訊裡還有技術支援網站的必填,這個具體可以參考 :guoshuyu.cn/home/index/… ,如果此處不符合條件也會出現稽核不通過的問題。
- 4、另外如果 App 需要登入,還需要提供使用者的測試賬號和密碼等。
1.2 打包上傳
打包 flutter iOS 首先需要執行 flutter build ios
命令,命令會生成 release 模式的下的 framework
檔案,之後就可以進入 Xcode 流程。
如下圖所示,首先確保?位置不要選中模擬器,之後在 Product > Archive 就會開始匯出打包。
打包成功後可以看到如下介面,找到你最新打包的那一項,選擇 Distribute App
就可以進入下一步;另外打包過的專案在 Window > Organizer 也可以重新找到。
之後如下所示,就選擇上傳 App Store Connect
進行提交準備。
如果是選擇匯出測試 ipa 可以選擇
Development
,前提是對應機器的UDID
等資訊已經在打包配置檔案內。
之後可以選擇 Upload 或者 Export,Export 就是匯出後再在本地上傳,可以使用 TransPorter
工具再單獨上傳;Upload 就是前面之後直接上傳。
接著出現的這個頁面建議是不要勾選(不要問,問就是百度),然後直接 next,然後選擇自動簽名,等簽名成功後最後點選上傳就可以了。
2、稽核
上傳成功後就,過一段時間可以在活動
和 TestFlight
看到你提交的構建版本,然後你可能會收到如下所示的一封郵件:
其中比如 ITMS-90683
說的是沒有在 plist
內配置 NSContactsUsageDescription
的 key-value,也就是向使用者解釋你為什麼需要用到讀取使用者聯絡人的許可權。
諸如此類的還有後幾個都是,如果你應用內用到了對應的許可權。就需要在 plist
配置上對應的 key-value
。
另外就是 Push Notification Entitlement
的警告,是說你的應用沒有配置推送相關的證書和設定,如果你的應用沒有用到對應的功能,比如在 Developer
後臺看如下圖所示的推送是否勾選了,如果勾選了就需要在應用內配置對應的推送服務,iOS 上 APNS 還需要設定對應的推送證書,一般推送證書還會分開發和生產兩種,如果沒有使用推送可以忽略警告。
還有就是 App 的啟動頁和 logo 尺寸記得配全,配置不全也會收到對應的警告,這個可能會影響稽核。
之後在版本資訊裡選擇需要提交的構建版本,之後提交稽核即可,一般稽核會從等到稽核 > 正在稽核 > 稽核結果,這個過程一般在 24 或者 48 小時之內,但是如果趕上了像聖誕節這樣的節日,蘋果會因為放假放慢稽核,另外被拒絕的太多次的話,也會影響稽核速度。
如下圖所示,最後提一些稽核建議,比如:
- 前面說過的應用截圖要儘量體現應用的主要內容;
- 不允許在應用內濫用應用更新提示,比如不允許應用自己跳轉下載更新,只能是簡單提示後跳轉 app store ,如果把握不好尺度乾脆在 iOS 上就不加;
- 不要在應用內帶有 fir.im ,蒲公英等資源、連結、文字和SDK,不然很容易被掃描然後拒絕。
以上這些都是屬於常犯的問題,更多的還請看 :developer.apple.com/cn/app-stor…
iOS 還有可以不用上架,只需要使用者在手機上信任證書的可以使用 ipa 的開發者賬號,但是這類開發者賬號現在很難申請得到,並且這類賬號的應用需要一年後重新打包一次更新。
資源推薦
- Github : github.com/CarGuo
- 開源 Flutter 完整專案:github.com/CarGuo/GSYG…
- 開源 Flutter 多案例學習型專案: github.com/CarGuo/GSYF…
- 開源 Fluttre 實戰電子書專案:github.com/CarGuo/GSYF…
- 開源 React Native 專案:github.com/CarGuo/GSYG…