問題タブ [lipo]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ios - iOS - 動的組み込みフレームワークとは対照的に、静的ライブラリ フレームワークのサイズが非常に大きい
次のチュートリアルhttps://github.com/jverkoey/iOS-Frameworkを使用して静的ライブラリ (フレームワーク) を作成しました。
フレームワークのサイズは非常に大きく、約 220 MB です。
代わりに動的組み込みフレームワークを作成すると、サイズはわずか 12 MB です。
フレームワークはバイナリとして配布されることに注意してください。
一部のコードは、c++ および objc++ で記述されています。
両方のプロジェクトのリンカー フラグは同じです。
OTHER_LDFLAGS = $(継承) -ObjC -l"c++"
このサイズの大きなばらつきの原因は何ですか? スタティック ライブラリのサイズを組み込みのダイナミック ライブラリと同じにするにはどうすればよいですか?
ios - lipo を使用して iOS .dylib をフレームワークにマージすると、ビットコードの再コンパイルが中断される
ファイルから動的 iOS フレームワークを手動で構築しようとしてい.dylib
ます。バイナリは cmake と xcodebuild で作成され、2 つの.dylib
ファイル (1 つはとを含みarmv7
、もう1 つはとアーキテクチャ) を生成します。ライブラリはコンパイルされ、すべてが成功します。armv7s
arm64
x86_64
i386
-fembed-bitcode parameter
.dylib ファイルは、次のコマンドでマージされます。
次に、lipo コマンドからの出力を次の場所にコピーして、フレームワークを作成します。
ヘッダーとヘッダーInfo.plist
は手動で生成され、フレームワークに追加されます。
このフレームワークは、CocoaPods を介してアプリケーションに .xml としてインストールされますvendored_framework
。CocoaPods は、App Store で配布するために、ファット バイナリから i386/x86_64 ライブラリを削除することが知られています。
アプリケーションのビルド、実行、アーカイブ、および App Store へのアップロードが正常に行われます。
ただし、ビットコードが有効になっているため、App Store は .ipa を処理し、ビットコードで再コンパイルします。ここで失敗し、App Store から処理に失敗したというメールを受け取ります。指示に従って、アドホック配布用にエクスポートし、ビットコード用に再コンパイルして、ローカルでエラーを再現できます。私が受け取るエラーはこれです:
したがって、どうやら再コンパイル中に、参照またはどこかにまだありますがlib_arm.dylib
、それはファット dylib Mach-O ユニバーサル バイナリにマージされています (file
以下のマージされた dylib バイナリの出力)。
これは、私のコンパイラ/リンカーの知識が範囲外になるところです。だから私の質問は:
これのどこが間違っているのですか?多分ビットコードは別の方法でコンパイルする必要がありますか? それともlipo
、間違った方法で使用していますか?
ありがとうございました!
ios - iOS ファット バイナリと間引き
ファイルを使用すると、Mach-O に 2 つのアーキテクチャがあると報告するアプリがあります。
編集-Xcodeのツールでもこれを確認しました
otool を使用してアーキテクチャを特定すると、ARMv7 (cpusubtype 9) と ARM64 (cpysubtype 0) の 2 つがあることがわかります。
ただし、リポを使用してバイナリを間引くと、次のエラーが発生します
この特定のバイナリを考え出すことができない理由はありますか? armv7 で使用したときの前のリポバイナリは、次のように更新しました:このタイプのアーキテクチャはありません。
ios - 「lipo」の実行に失敗しました。Lib は同じアーキテクチャを持っています
静的フレームワークを構築しようとしています。
したがって、次のコマンドを実行します。
デバイス用
シミュレータ用
ただし、実行しようとするとlipo
:
エラーが発生します:
致命的なエラー: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/lipo: build/Release-iphonesimulator/MyAppLib.framework/MyAppLib および build/Release-iphoneos/MyAppLib.framework/MyAppLib がある同じアーキテクチャ (i386) であり、同じファット出力ファイルにすることはできません
Xcodeからはビルドに成功しましたが、CLIからは両方とも同じ構造です。
$ file MyAppLib.framework
私に与えます:
1 つのプラットフォームでのみ実行しようとすると、ビルドは成功しますが、調べることさえできない奇妙なフレームワークが発生します。
編集:
マルチプラットフォーム スクリプト: