問題タブ [xcframework]
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.
xcode - Xcode が断続的に xcframework を検出しない
Xcode は、インクリメンタル ビルド用の xcframework を見つけられないことがあります。
- エラーは私の
ld: framework not found [framework]
xcframework[framework]
の名前です。 - 失敗すると、繰り返されるインクリメンタル ビルドも失敗します。
- クリーンビルドは常にそれを修正します。
- この問題は、通常のフレームワークから xcframeworks に切り替えたときに始まりました。
- この WWDC ビデオの指示に従って xcframework を作成しました: https://developer.apple.com/videos/play/wwdc2019/416/
インクリメンタル ビルドとクリーン ビルドの間でリンク コマンドを比較しましたが、違いはありませんでした。これは Xcode のバグのようです。Xcode 11.4.1 を使用しています。
xcode - Xcode プロジェクト内で外部静的 C ライブラリを含む xcframework の関数を使用する
my_library_function()
using を使用してスタティック ライブラリにコンパイルし、using という xcframework にパッケージ化した関数を含むgcc
Cファイルがあります。このフレームワークを Mac アプリの Xcode プロジェクトに追加しました。ただし、私の Mac アプリ内では、この関数を呼び出すことができず、一般的にその方法がわかりません。Swift ファイル内から試して、関数を直接呼び出そうとしましたが、どちらの場合もコンパイラ エラー と. 私が見つけた唯一の回避策は、ブリッジング ヘッダーを作成し、mylib.xcframework
xcodebuild -create-framework
import mylib
my_library_function()
No such module mylib
Use of unresolved identifier 'my_library_function'
#include
xcframework 内のパスからのヘッダー ファイル。ただし、最終的にはより複雑なライブラリを使用してクロス コンパイルし、xcframework に複数のターゲット用の静的ライブラリを含めるようにしたいので、これはハックな回避策のように思えます。ブリッジヘッダーなしでこれを行う方法はありますか?このプロセスで何か不足していますか?
以下は、私が行ったことの正確な指示です。まず、C コードをスタティック ライブラリにコンパイルしました。ライブラリのソース コードには、1 つの関数が含まれています。
mylib.c
上記のヘッダーもあります。
mylib.h
ソースコードのツリーは次のとおりです。
プロジェクト ソース ツリー
次に、以下を使用して C コードをスタティック ライブラリにコンパイルしました。
次に、以下を使用して xcframework を作成しました。
これにより、xcframework が次のようになりました。
mylib.xcframework ソース ツリー
次に、Xcode 11 を使用して新しい Xcode プロジェクトを作成しました。
プロジェクトのルートで新しいグループを作成し、それを Frameworks と呼びました。次に、xcframework を XCode フレームワーク グループにドラッグ アンド ドロップし、[必要に応じてアイテムをコピー] チェックボックスと [グループの作成] ラジオ ボタンをオンにしました。
Xcode プロジェクトの一般タブの [フレームワーク、ライブラリ、および埋め込みコンテンツ] で、フレームワークを [埋め込みと署名] に設定します。
[Build Settings] タブの [Signing] で、[Other Code Signing Flags] を に設定して、コード署名--deep
エラーを防止しました。同じ Build Settings タブの Linking で、Runpath Search Paths が に設定されてい@executable_path/../Frameworks/
ます。さらに、[検索パス] の下の [ビルド設定] タブで、フレームワーク検索パス、ライブラリ検索パス、ヘッダー検索パスを同じ値に設定@executable_path/../Frameworks/
しようとしましたが、これらのパスも空にしてみました。
残念ながらmy_library_function()
、アプリケーションのどこからでもを使用することはできません。またimport mylib
、Swift からも使用できません。
私が見つけた唯一の回避策は、目的の C ブリッジ ヘッダーを作成し#include
、フレームワーク フォルダー内で明示的にポイントしてHeaders/mylib.h
、関数を呼び出せるようにすることです。これはハックなソリューションのように思えますが、最終的にはコードをクロス コンパイルしたいと考えており、異なるアーキテクチャの個別のライブラリごとに個別のヘッダー ファイルが必要になるため、この方法で行うのは非常に複雑になる可能性があります。MacOS Swift プロジェクトを使用して XCFramework 内から関数を含める方法について、私が見逃しているものはありますか?
以下は、私の Xcode 構成のいくつかの画像です。
swift - 静的フレームワークのサブ依存関係を持つ XCFramework
いくつかの静的フレームワークに依存する XCFramework があります。
私の XCFramework は、BUILD_FOR_LIBRARIES_FOR_DISTRIBUTION を有効にしてビルドされています。
サブ フレームワークは、XCFramework の外部からアクセスできる必要はありません。
クライアント (ホスト) アプリで XCFramework をコンパイルしようとすると、XCFramework の .swiftinterface ファイルでエラーが発生しますNo such module 'FBSDKLoginKit'
(FBSDKLoginKit は XCFramework サブ フレームワークの 1 つです)。
不足しているように見えるのは、依存モジュールの swiftinterface ファイルです。たとえば、FBSDKLoginKit を使用していますが、swiftinterface が XCFramework 内にありません。
参考までに、フレームワークを次のようにコンパイルしています。
xcode - Xcode 12で機能しないXCFrameworkにfatライブラリを追加する
編集(2020/09/14) : これは、Xcode 12 beta 6 の時点で修正された Xcode のバグのようです。
私は Xcode 12 を使用して静的ライブラリを構築しています。tvOS の場合、Xcode 12 には単一のファット ライブラリにarm64
との両方が含まれています。arm64e
同様に、シミュレーター用にビルドする場合、Xcode 12 にはx86_64
とarm64
(Mac Apple シリコン) の両方が 1 つのファット ライブラリに含まれます。
どちらの場合も、次のコマンドを使用して、これらのライブラリを含む XCFramework を作成できません。
xcodebuild -create-xcframework -output A.xcframework" -library A.a
そうしようとすると、エラーが発生します
error: unable to find any architecture information in the binary at 'A.a'
からの出力lipo -info A.a
は、両方のアーキテクチャが存在することを明確に示しているため (それぞれarm64
+arm64e
とarm64
+ x86_64
)、それを認識して処理できない理由がわかりませんxcodebuild
。
また、個々のアーキテクチャをそれぞれ 2 つのシン ファイル (例:A-arm64.a
とA-arm64e.a
) に抽出し、それらを使用して XCFramework を作成しようとしましたが、別のエラーが発生します。
Both tvos-arm64e and tvos-arm64 represent two equivalent library definitions.
と
Both tvos-arm64-simulator and tvos-x86_64-simulator represent two equivalent library definitions.
何か不足していますか?ファット ライブラリ (または 2 つの同等のシン ライブラリ) から XCFramework を作成するにはどうすればよいですか?