JPMartha's Pancake

This blog is the way to brush up my poor English.

Carthage の copy-frameworks を忘れてみた 🙋

CarthageREADME によると iOS, tvOS, watchOS 向けにビルドする場合は Run Script で copy-frameworks の設定が必要です。

ところで 設定しなければどうなるのか気になる ので調べてみました。🙄

github.com

If you're building for iOS, tvOS, or watchOS

...

On your application targets’ “Build Phases” settings tab, click the “+” icon and choose “New Run Script Phase”. Create a Run Script with the following contents:

/usr/local/bin/carthage copy-frameworks

and add the paths to the frameworks you want to use under “Input Files”, e.g.:

$(SRCROOT)/Carthage/Build/iOS/Box.framework $(SRCROOT)/Carthage/Build/iOS/Result.framework $(SRCROOT)/Carthage/Build/iOS/ReactiveCocoa.framework

This script works around an App Store submission bug triggered by universal binaries and ensures that necessary bitcode-related files and dSYMs are copied when archiving.

Carthage/README.md at master · Carthage/Carthage · GitHub

そもそもなぜ必要か

Carthage のコミッターでもある ikesyo さんのこちらのスライド 19 ページあたりに説明があります。

www.slideshare.net

この記事の前提

  • Carthage の copy-frameworks を設定する場合としない場合の実行結果を確認します。copy-frameworks の処理内容には触れません。
  • 軽いノリで作って放置中のプロジェクトをサンプルとします。
  • ビルド、クリーン、アーカイブは個人の好みで xcodebuild コマンドで実行します。
  • 「審査へ提出」までは確認しません。
  • 上記のとおりビルド、アーカイブそして App Store へのアップロードを実行しましたが原因を突き止めていません。さらに追究したいところですがいったんここで締めます。🙍

確認内容

サンプルでは Carthage (0.14.0) で次のライブラリを組み込んでいます。

Configuration Release でビルド

copy-frameworks あり

f:id:JPMartha:20160225093434p:plain

Build Configuration を Release にしてビルドします。

xcodebuild コマンドで次のとおり実行します。

$ xcodebuild -project ConnpassAPIClient.xcodeproj -scheme ConnpassAPIClientDemo -configuration Release

👇

Products/Release-iphoneos に依存ライブラリの dSYM が格納されます。

  • APIKit.framework.dSYM
  • Himotoki.framework.dSYM
  • Result.framework.dSYM

f:id:JPMartha:20160225212419p:plain

ConnpassAPIClient.app/Frameworks に依存ライブラリの framework が格納されます。

  • APIKit.framework
  • Himotoki.framework
  • Result.framework

f:id:JPMartha:20160225212440p:plain

クリーン

xcodebuild コマンドで clean を付けて実行します。(何もなしは build

ただ ⇧⌘K ( shift + command + K )のほうが楽 です。

$ xcodebuild -project ConnpassAPIClient.xcodeproj -scheme ConnpassAPIClientDemo -configuration Release clean

👇

Products/Release-iphoneos に dSYMConnpassAPIClient.swiftmodule が残ります。

f:id:JPMartha:20160225213027p:plain

👇

違いをわかりやすくするため空にします。

f:id:JPMartha:20160225223659p:plain

copy-frameworks なし

Run script only when installing を ON にするとビルドで実行されません。

f:id:JPMartha:20160225100622p:plain

Build Configuration を Release にしてビルドします。

$ xcodebuild -project ConnpassAPIClient.xcodeproj -scheme ConnpassAPIClientDemo -configuration Release

👇

Products/Release-iphoneos に 依存ライブラリの dSYM が格納されません。

f:id:JPMartha:20160225213110p:plain

ConnpassAPIClient.app/Frameworks に 依存ライブラリの framework が格納されません。

f:id:JPMartha:20160225213133p:plain

クリーン(参考)

Products/Release-iphoneos に ConnpassAPIClient.swiftmodule が残ります。

f:id:JPMartha:20160225122906p:plain

アーカイブ

xcodebuild コマンドで archive を付けて実行します。

ただ Organizer にすぐに表示されない場合があるので Xcode でアーカイブしたほうが楽 です。

$ xcodebuild -project ConnpassAPIClient.xcodeproj -scheme ConnpassAPIClientDemo -configuration Release archive

👇

copy-frameworks あり

BCSymbolMaps に依存ライブラリの bcsymbolmap が格納されます。

  • APIKit の bcsymbolmap
    • 6AF830C8-...bcsymbolmap
    • CFC7CFE8-...bcsymbolmap
  • Result の bcsymbolmap
    • 6D3EDBEF-...bcsymbolmap
    • DC354F03-...bcsymbolmap
  • Himotoki の bcsymbolmap
    • 0EC756B3-...bcsymbolmap
    • 6B6EC100-...bcsymbolmap

f:id:JPMartha:20160225213353p:plain

bcsymbolmap についてはまたまた ikesyo さんのこちらのスライド 13 ページあたりに説明があります。

www.slideshare.net

dSYMs に依存ライブラリの dSYM が格納されます。

  • APIKit.framework.dSYM
  • Himotoki.framework.dSYM
  • Result.framework.dSYM

f:id:JPMartha:20160225213413p:plain

copy-frameworks なし

Run Script を削除 してアーカイブします。

Run script only when installing を ON にしてもアーカイブで実行されます。

👇

BCSymbolMaps に 依存ライブラリの bcsymbolmap が格納されません。

f:id:JPMartha:20160225213606p:plain

dSYMs に 依存ライブラリの dSYM が格納されません。

f:id:JPMartha:20160225213523p:plain

App Store へアップロード

copy-frameworks なしApp Store へアップロードします。

f:id:JPMartha:20160225202245p:plain

👇

realm-cocoa の issueCarthage の issue で挙げられているエラーは出ず警告のみでアップロードできました。

f:id:JPMartha:20160225202113p:plain

ここで終わるのは中途半端ですが余裕があれば追究します!

参考