前言
最近公司有個小專案準備用Flutter編寫,第一次用Flutter,要踩很多坑,今天準備打iOS Release包就出現問題了。從Archive->Distribute App->Export ipa->install
一氣呵成,一開啟app閃退。真機debug一點也沒問題,為什麼打包就有問題,以前幾乎沒碰到過。
原因
必現閃退的問題一般比較好定位,首先檢視crash日誌。
EXC_BAD_ACCESS (SIGKILL - CODESIGNING)
平時不常見,大致意思是檢測到簽名問題,導致app被殺死了。
猜想1:證書問題?
新建了一個純iOS的專案,使用相同的Bundle ID
,證書,打包,安裝,完全沒有問題!
猜想2:Flutter的問題?
新建了一個Flutter專案,使用相同的Bundle ID
,證書,打包,安裝,完全沒有問題!
我開啟Flutter中文網上的iOS構建應用看了半天也沒找到問題,都是一些常規操作。我的應用內容也不多,跟新建專案比,多了一些第三方庫,猜想跟這個有關。
解決
在網上搜了很久,也沒有人解答,後來無意間瞄到,iOS打Release包前要
flutter build ios --release
複製程式碼
試了下,果然可以了。
zzz:$ flutter build ios --release
Building com.xxxx.xxxx.xxxx for device (ios-release)...
Automatically signing iOS for device deployment using specified development team in Xcode project: R4GXXXXXMC
Running pod install... 3.9s
Running Xcode build...
├─Building Dart code...
159.6s (!)
├─Generating dSYM file... 0.5s
├─Stripping debug symbols... 0.1s
├─Assembling Flutter resources... 5.0s
└─Compiling, linking and signing... 36.2s
Xcode build done. 234.5s
Built /Users/xxxx/xxxx/build/ios/iphoneos/Runner.app.
複製程式碼
再打包就正常了,回過頭來在看官方文件iOS構建應用,這麼重要的事情竟然不寫,事實證明是自己粗心大意沒看到,上面寫的好好的,漏掉了- -!
在開發過程中,您一直在構建、除錯、測試debug版本。當您準備將應用釋出到App Store或TestFlight上時,您需要準備release 版本:
在命令列上,在您的應用程式目錄中執行以下步驟:
執行flutter build ios以建立release版本(flutter build預設為--release)
為確保Xcode重新整理release模式配置,關閉並重新開啟Xcode workspace。對於Xcode 8.3和更高版本,這一步不是必需的
複製程式碼
總結
原生iOS開發,一般情況下,debug能在真機上跑,Release打包後也基本是正常的。Flutter為什麼需要這一步,暫時也不清楚,有時間在瞭解。記錄一下這個過程,多提供點關鍵字,給跟我一樣粗心大意的朋友能搜到這個文章看看,少走彎路,我自己是沒搜到。。。