対象になりそうなプロジェクトの条件
- iOS 10以下のサポートを切るために
Deployment Target
を11.0にしようとしている - Projectのみで
Deployment Target
を指定し、各Targetでは参照(未指定)にしている - OSSをCarthageで利用している
-
Embedded Framework
をプロジェクト内で自作して利用している。 - OSSのframeworkもembedded frameworkもFrameworkフォルダに書き出している。
- Build PhasesのRun Script
*1
にてlipoコマンドを利用しFrameworkフォルダ内のframeworkをすべてSlicing
をしている(-extractなどを利用)
Archive Buildできなくなった原因
- arm64アーキテクチャのみでbuildされたembedded frameworkをslicingしようとしたから。
Deployment TargetのversionがbuildされるBinaryのarchitectureに影響する
Release build時のDeployment Targetが11.0
以上の場合はarm64
のnon fat file
としてbuildされる。(10.x
以下だとarmv7
,arm64
のfat file
)
そのため、embedded framework
もarm64
のnon fat file
でbuildされ、*1
のslicingのscriptでerrorとなる。(スクリプトの書き方にもよる)
(注)10.x以下の説明はdefaultのarchitectureとvalid architecturesの場合です。10.x以下でも設定次第でarm64のみのbuild可。
通常のアプリの最低動作保証バージョン変更方法
- Project(もしくはTarget)のDeployment targetを最低動作保証バージョンに設定する
iOS10.x以下からiOS11.xにする場合の変更方法
- 対応方法
- ProjectのDeployment targetを最低動作保証バージョンに設定する
- アプリのTargetのDeployment targetを最低動作保証バージョンに設定する
- 自作Embedded frameworkのtargetは11.0未満にする(指定されていなければtargetに設定しfat fileにする)
その他、Deployment targetを11以上に設定してビルドエラーのとき確認したいこと
- 32bitのArchitecture(
armv7
,armv7s
...)をProject
orTarget
->Architecture
とValid Architectures
に同時に設定していないか。(Architecture
が${ARCHS_STANDARD}
の場合確認不要) - Carthageでbuildされたbinaryを取得し、そのまま利用していないか。
- Embedded Frameworkのdeployment targetがarchitectureにbuild時の影響しないか
現時点で不要だった対応(2019/04/17)
- info.plistの
Required Device Capability
をarmv7
からarm64
への変更