[解決済み] ファットなCocoa Touchフレームワーク(シミュレータとデバイス用)をエクスポートする方法とは?
質問
とは
Xcode 6
では、独自のダイナミックな
Cocoa Frameworks
.
<イグ
なぜなら
-
シミュレータはまだ
32-bit
ライブラリ -
2015 年 6 月 1 日以降、App Store に提出されるアプリのアップデートは、64 ビット サポートを含み、iOS 8 SDK でビルドされなければなりません ( デベロッパー.apple.com )
デバイスやシミュレータ上でプロジェクトを実行するために、ファットライブラリを作成する必要があります。
しかし、私はどのようなマニュアルも見つけられませんでした。 エクスポート ユニバーサルファットフレームワークを他のプロジェクトと統合する(そして、このライブラリを誰かと共有する)ために。
以下は再現のための手順です。
-
設定
ONLY_ACTIVE_ARCH=NO
の中にBuild Settings
<イグ
-
サポートの追加
armv7 armv7s arm64 i386 x86_64
にArchitectures
(確かに)
- Frameworkをビルドし、Finderで開く。
- このフレームワークを別のプロジェクトに追加する
実際の結果です。
しかし、結局のところ、このフレームワークを使ったプロジェクトをデバイスとシミュレータで同時に実行することにはまだ問題があります。
-
からフレームワークを取ると
Debug-iphoneos
フォルダにあるフレームワークを使用すると、デバイス上では動作しますが で動作し、シミュレータではエラーになります。ld: symbol(s) not found for architecture i386
xcrun lipo -info CoreActionSheetPicker
ファットファイルのアーキテクチャ CoreActionSheetPickerは: armv7 armv7s arm64です。
-
からフレームワークを取ると
Debug-iphonesimulator
フォルダからフレームワークを取り出した場合、シミュレータでは動作しますが、デバイスではエラーが発生します。ld: symbol(s) not found for architecture arm64
xcrun lipo -info CoreActionSheetPicker
ファットファイルのアーキテクチャ CoreActionSheetPicker は次のとおりです: i386 x86_64
では、デバイスやシミュレータ上で動作する動的なフレームワークを作るにはどうすればよいのでしょうか。
この回答は Xcode 6 iOS Cocoa Touchのフレームワークを作成する - アーキテクチャの問題 とありますが、重複していません。
更新しました。
このケースに対するダーティハックを見つけました。私の の回答を参照してください。 . もし、もっと便利な方法を知っている人がいたら、ぜひ教えてください。
どのように解決するのですか?
この回答の実態は 2015年7月に 変更になる可能性が高いです。
TLDRです。
現在、Xcodeにはユニバーサルファットフレームワークを自動的にエクスポートするツールがないため、開発者は手動で
lipo
ツールを使用する必要があります。また
このレーダー
を AppStore に提出する前に、フレームワークの消費者であるデベロッパーも
lipo
を使ってフレームワークからシミュレータスライスを削除する必要があります。
長い回答が続きます
トピック(回答下部のリンク)でも同様の調査をしました。
の配布に関する公式のドキュメントを見つけられなかったので、私の研究は、Apple Developer Forums、Carthage、Realm プロジェクトの調査、および私自身の実験に基づいていました。
xcodebuild
,
lipo
,
codesign
のツールを使用します。
Apple Developer Forums のスレッドからの長い引用です (私が少しマークアップしています)。 フレームワークを組み込んだアプリをエクスポートする :
フレームワークプロジェクトからフレームワークをエクスポートする適切な方法は何ですか?
現在、唯一の方法は、あなたが行ったこととまったく同じです。
- シミュレータと iOS デバイスの両方に対してターゲットをビルドします。
そのプロジェクトの Xcode の DerivedData フォルダに移動し、2つのバイナリを1つのフレームワークにまとめてリポします。しかし、Xcode でフレームワーク ターゲットを構築するとき、ターゲット設定 'Build Active Architecture Only' を 'NO' に調整することを確認してください。これにより、Xcodeは複数のバイナリタイプ(arm64、armv7など)用にターゲットをビルドすることができます。 これは、Xcode からは動作するが、スタンドアロン バイナリとしては動作しない理由となります。
また、スキームがリリースビルドに設定されていることを確認し、フレームワークターゲットをリリースに対してビルドしたいと思うことでしょう。 それでもライブラリがロードされないというエラーが発生する場合は、フレームワークのコードスライスを確認してください。
- 使用方法
lipo -info MyFramworkBinary
を使って、その結果を調べてみてください。
lipo -info MyFrameworkBinary
結果は
i386 x86_64 armv7 arm64
- 最近のユニバーサル フレームワークは 4 つのスライスを含みますが、もっと多く含むことも可能です。
i386 x86_64 armv7 arm64
少なくともこの 4 つが表示されない場合は、Build Active Architecture の設定に起因している可能性があります。
これは、@skywinder が彼の回答で行ったのとほぼ同じプロセスを記述しています。
これは カルタゴはリポを使う と レームがリポを使用 .
重要事項
レーダーがあります。 Xcode 6.1.1 & 6.2: シミュレータスライスを含む iOS フレームワークは App Store に提出できない。 で、この件に関する長い議論が Realm#1163 と カルタゴ#188 で、特別な回避策で終了しました。
AppStore に提出する前に、iOS フレームワークのバイナリをシミュレータのスライスから削除する必要があります。
iOS
Carthage は特別なコードを持っています。 コピーフレームワークス という特別なコードがあり、それに対応した文書があります。
このスクリプトは App Store への投稿に関するバグ を回避します。
レルムは特殊なスクリプトを持っています。 strip-frameworks.sh という特別なスクリプトがあり、それに対応したドキュメントがあります。
このステップは App Store への投稿に関するバグ を回避するために必要です。
また、良い記事もあります。 Xcode のダイナミック ライブラリから不要なアーキテクチャを削除する .
私自身は、Realmの
strip-frameworks.sh
を使いました。もちろん、誰でも自由にゼロから書くことができますが、私には何の修正もなく完璧に機能しました。
私のトピックへのリンクは、この質問に関する別の側面を含んでいるので、読むことをお勧めします。 iOS/OSX フレームワークの作成: 他の開発者に配布する前にコード化する必要がありますか?
関連
-
libc++abi.dylib が NSException 型の捕捉できない例外で終了する理由 エラー
-
[iOS]コンパイルエラー:ld: アーキテクチャ x86_64 のシンボルが見つかりません。
-
[解決済み] Xcode 6.3 - 現在の iOS Development 証明書または保留中の証明書要求がすでにあります。
-
[解決済み] Objective-Cで、ある文字列が他の文字列を含んでいるかどうかを調べるにはどうすればよいですか?
-
[解決済み] App Storeのアプリと連動させる方法
-
[解決済み] Xcode 12、iOS Simulator用にビルドしても、iOS用にビルドされたオブジェクトファイルでは、アーキテクチャ「arm64」用にリンクされます。
-
[解決済み] フレームワークを使用したiOSアプリがデバイス上でクラッシュ、dyld: ライブラリがロードされない、Xcode 6 Beta
-
[解決済み] iOSで現在のデバイスの言語を取得するには?
-
[解決済み] iOSアプリをApple Developer Programや脱獄せずにデバイス上でテストすることができます。
-
[解決済み】XcodeとSDK 4+を使用してファットスタティックライブラリ(デバイス+シミュレータ)をビルドする。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[iOS]コンパイルエラー:ld: アーキテクチャ x86_64 のシンボルが見つかりません。
-
[解決済み] iOSまたはmacOSで、インターネット接続が有効かどうかを確認するにはどうすればよいですか?
-
[解決済み] Objective-Cで文字列が空かどうかをテストするにはどうすればよいですか?
-
[解決済み] iOS Simulatorでネットワークを無効にすることは可能ですか?
-
[解決済み] Swiftを使用してアプリのバージョンとビルド番号を取得するにはどうすればよいですか?
-
[解決済み] アプリのプレビュー用にiOSシミュレータのビデオをキャプチャー
-
[解決済み] iPadマルチタスクのサポートには、これらの方向が必要です。
-
[解決済み] UIViewの角丸とドロップシャドウ?
-
[解決済み] UITextBorderStyleNoneを使用してUITextFieldのパディングを設定する
-
[解決済み] Swiftのプロトコルでオプションのメソッドを定義するには?