問題タブ [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.

0 投票する
1 に答える
398 参照

ios - iOS - 動的組み込みフレームワークとは対照的に、静的ライブラリ フレームワークのサイズが非常に大きい

次のチュートリアルhttps://github.com/jverkoey/iOS-Frameworkを使用して静的ライブラリ (フレームワーク) を作成しました。

フレームワークのサイズは非常に大きく、約 220 MB です。

代わりに動的組み込みフレームワークを作成すると、サイズはわずか 12 MB です。

フレームワークはバイナリとして配布されることに注意してください。

一部のコードは、c++ および objc++ で記述されています。

両方のプロジェクトのリンカー フラグは同じです。

OTHER_LDFLAGS = $(継承) -ObjC -l"c++"

このサイズの大きなばらつきの原因は何ですか? スタティック ライブラリのサイズを組み込みのダイナミック ライブラリと同じにするにはどうすればよいですか?

0 投票する
1 に答える
1587 参照

ios - lipo を使用して iOS .dylib をフレームワークにマージすると、ビットコードの再コンパイルが中断される

ファイルから動的 iOS フレームワークを手動で構築しようとしてい.dylibます。バイナリは cmake と xcodebuild で作成され、2 つの.dylibファイル (1 つはとを含みarmv7、もう1 つはとアーキテクチャ) を生成します。ライブラリはコンパイルされ、すべてが成功します。armv7sarm64x86_64i386-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、間違った方法で使用していますか?

ありがとうございました!

0 投票する
1 に答える
4079 参照

ios - iOS ファット バイナリと間引き

ファイルを使用すると、Mach-O に 2 つのアーキテクチャがあると報告するアプリがあります。

編集-Xcodeのツールでもこれを確認しました

otool を使用してアーキテクチャを特定すると、ARMv7 (cpusubtype 9) と ARM64 (cpysubtype 0) の 2 つがあることがわかります。

ただし、リポを使用してバイナリを間引くと、次のエラーが発生します

この特定のバイナリを考え出すことができない理由はありますか? armv7 で使用したときの前のリポバイナリは、次のように更新しました:このタイプのアーキテクチャはありません。

0 投票する
1 に答える
4393 参照

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 つのプラットフォームでのみ実行しようとすると、ビルドは成功しますが、調べることさえできない奇妙なフレームワークが発生します。

ここに画像の説明を入力

編集:

マルチプラットフォーム スクリプト: