[ios] どのように "脂肪"ココアタッチフレームワーク(シミュレータとデバイス用)をエクスポートするには?



1 Answers

これはあまり明確な解決策ではありませんが、私には分かりません。

  1. Build SettingsONLY_ACTIVE_ARCH=NOBuild Settings

    • シミュレータ用ライブラリの構築
    • デバイスのライブラリを構築する
  2. あなたのフレームワークのためのコンソールのProductsフォルダで開きます(あなたはそこからオープンフレームワークフォルダとcd ..開くことができます)

  1. Productsフォルダーからthisスクリプトを実行します。 これは、このフォルダにfatフレームワークを作成します。 (または、以下で説明するように手動で行う3. 4.

または:

  1. このスクリプトでYourFrameworkNameを使ってこれらの2つのフレームワークを結合します( YourFrameworkNameをあなたのフレームワーク名に置き換えてください)

    lipo -create -output "YourFrameworkName" "Debug-iphonesimulator/YourFrameworkName.framework/YourFrameworkName" "Debug-iphoneos/YourFrameworkName.framework/YourFrameworkName"
    
  2. 既存のフレームワークの新しいバイナリ1に置き換えてください:

    cp -R Debug-iphoneos/YourFrameworkName.framework ./YourFrameworkName.framework
    mv YourFrameworkName ./YourFrameworkName.framework/YourFrameworkName
    
  1. Profit: ./YourFrameworkName.framework - すぐに使える太いバイナリです! プロジェクトにインポートすることができます!

ワークスペースにないプロジェクトの場合:

here説明するように、 この要点を使用することもできhere 。 しかし、それは、ワークスペース内のプロジェクトでは機能しないようです。

Question

Xcode 6では、独自のDynamic Cocoa Frameworksを作成できます。

のため:

  • シミュレータはまだ32-bitライブラリを使用します

  • 2015年6月1日から、App Storeに提出されたアプリのアップデートには、64ビットサポートが含まれていなければならず、iOS 8 SDK( developer.apple.com

私たちは、デバイスやシミュレータでプロジェクトを実行するために太いライブラリを作らなければなりません。 フレームワークで32ビットと64ビットの両方をサポートします。

しかし、私は他のプロジェクトとの将来の統合のために(そしてこのライブラリを誰かと共有するために)ユニバーサル・フレームワークをどのようにエクスポートするのか、マニュアルは見つけられませんでした。

再現するための私の措置は次のとおりです。

  1. Build SettingsONLY_ACTIVE_ARCH=NOBuild Settings

  2. Architectures armv7 armv7s arm64 i386 x86_64を追加する(確かに)

  1. フレームワークを構築し、Finderで開きます:

  1. このフレームワークを別のプロジェクトに追加する

実結果:

しかし、結局のところ、私はまだこのフレームワークを使って、デバイスとシミュレータでプロジェクトを一度に実行することに問題があります。

  • Debug-iphoneosフォルダからフレームワークを取得すると、デバイスで動作し、シミュレータでエラーが発生する: ld: symbol(s) not found for architecture i386

    xcrun lipo -info CoreActionSheetPicker
    

    fatファイルのアーキテクチャ:CoreActionSheetPickerは次のとおりです:armv7 armv7s arm64

  • Debug-iphonesimulatorフォルダからフレームワークを取得すると、シミュレータで動作します。 私はデバイスにエラーがあります: ld: symbol(s) not found for architecture arm64

    xcrun lipo -info CoreActionSheetPicker
    

    fatファイル内のアーキテクチャ:CoreActionSheetPickerは:i386 x86_64

では、デバイスやシミュレータで動作する動的なフレームワークを作成する方法は?

この回答はXcode 6 iOSに関連しています。Cocoa Touch Frameworkを作成する - アーキテクチャーの問題ですが、重複しません。

更新:

私はこの場合の「汚れたハック」を発見しました。 下の私の答えを見てください。 誰かがもっと便利な方法を知っているなら - 私に教えてください!




基本的に私は非常に良い解決策を見つけました。 これらの簡単な手順に従うだけです。

  1. ココアタッチフレームワークを作成します。
  2. ビットコードを有効にしてください。
  3. ターゲットを選択して、編集スキームを選択します。 「実行」を選択し、「情報」タブから「リリース」を選択します。
  4. その他の設定は必要ありません。
  5. 今度は、シミュレータがx86アーキテクチャ上で動作するため、あらゆるシミュレータ用のフレームワークを構築します。
  6. Project Navigatorで[Products]グループをクリックし、.frameworkファイルを探します。
  7. それを右クリックし、ファインダーで表示をクリックします。 フォルダにコピーして貼り付けてください。個人的には「シミュレータ」という名前が好きです。
  8. Generic iOS Deviceのフレームワークを作成し、手順6〜9を実行します。フォルダを「シミュレータ」ではなく「デバイス」に変更します。
  9. デバイス.frameworkファイルをコピーし、他のディレクトリに貼り付けます。 私は両方のすぐ上のディレクトリを好む。 ディレクトリ構造は次のようになります。
    • デスクトップ
    • デバイス
      • MyFramework.framework
    • シミュレータ
      • MyFramework.framework
    • MyFramework.frameworkターミナルを開き、デスクトップに移動します。 次に、次のコマンドを入力します。

リポジトリ作成デバイス/ MyFramework.framework / MyFramework ''シミュレータ/ MyFramework.framework / MyFramework '-output' MyFramework.framework / MyFramework '

以上です。 ここでは、MyFramework.framework内にあるMyFrameworkバイナリのシミュレータとデバイスバージョンをマージします。 我々は、シミュレータとデバイスを含むすべてのアーキテクチャを構築する汎用フレームワークを取得します。




Related