2017-02-01 4 views
2

(プロジェクト1)私は異なるプロジェクトで使用したいフレームワークを1つ作成しています(プロジェクト2)他のフレームワーク(プロジェクトのドラッグドロップ)と同じように。iOSでユニバーサルフレームワークを作る方法は?

私の問題

をしかし、私は、私は私のプロジェクト2に、このフレームワークを使用するときにXcodeで選択保ちデバイス(プロジェクト1)フレームワークを作成したとき、それはないシミュレータ用のデバイスに対してのみ機能します。 逆の場合は、プロジェクト1のフレームワークを作成して、xcodeでシミュレータを選択し、このフレームワークをプロジェクト2で使用すると、シミュレータだけで動作します。このため

エラーが

enter image description here

は私が達成しようとしていますどのようなものです

プロジェクト内のデバイスとシミュレータの両方で実行する必要があるプロジェクト1から作成された私の枠組み2.

以下は両方のプロジェクトの設定です。

enter image description here

答えて

1

Xcodeは、選択したターゲットに従ってフレームワークを構築します。もし、フレームワークがシミュレータ用に構築されていれば、アーキテクチャーはX86_64、i386、それ以外の場合はarmv7、arm64になります。 以下のように、lipoコマンドを使用してフレームワークのアーキテクチャをチェックできます。

lipo -info sample.frameowrk/sample 

あなたのフレームワークでは、シミュレータとデバイスの両方をサポートする必要があります。だから、あなたは(デバイスとシミュレータ用に構築された)の両方のフレームワークを組み合わせて、以下のようにリポコマンドを使用してFATフレームワークを作成する必要があります。

lipo <path to framework build for simulator>/simulator.framework <path to framework build for device>/device.framework -create -output universal.framework 

たユニバーサルフレームワークは、両方のプラットフォームをサポートします。

lipo -info universal.framework/universal 

output : arm64,armv7,x86_64,i386 
+0

ここでファイル1とファイル2はどういう意味ですか?なぜこのようなフレームワーク名であれば、なぜ1つのフレームワークに対して2つの異なる名前がありますか?製品フォルダからこのコマンドを実行する必要がありますか? – sss

+0

これは正しいアプローチのように聞こえますが、前にこれをやっていますが、忘れてしまいました。私は彼がシミュレータとデバイスのプロジェクトをコンパイルし、それらの両方の出力フレームワークを取得し、次にfile1 =シミュレータフレームワーク、file2 =デバイスフレームワークなどのコマンドを実行すると思います。それらの名前を変更するだけで、第2のものをコンパイルするときには無効になります。 – Fonix

+0

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/lipo:一時出力ファイルを作成できません:OcrSdk.framework/OcrSdk.lipo(このようなファイルやディレクトリはありません)。なぜ私は出力を作成することができないのですか? – sss

関連する問題