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

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

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 を使用しています。

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

xcode - Xcode プロジェクト内で外部静的 C ライブラリを含む xcframework の関数を使用する

my_library_function()using を使用してスタティック ライブラリにコンパイルし、using という xcframework にパッケージ化した関数を含むgccCファイルがあります。このフレームワークを Mac アプリの Xcode プロジェクトに追加しました。ただし、私の Mac アプリ内では、この関数を呼び出すことができず、一般的にその方法がわかりません。Swift ファイル内から試して、関数を直接呼び出そうとしましたが、どちらの場合もコンパイラ エラー と. 私が見つけた唯一の回避策は、ブリッジング ヘッダーを作成し、mylib.xcframeworkxcodebuild -create-frameworkimport mylibmy_library_function()No such module mylibUse of unresolved identifier 'my_library_function'#includexcframework 内のパスからのヘッダー ファイル。ただし、最終的にはより複雑なライブラリを使用してクロス コンパイルし、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 構成のいくつかの画像です。

Xcode プロジェクト ディレクトリ フレームワークの追加 埋め込みと署名 その他のコード署名フラグ ビルド フェーズ

0 投票する
2 に答える
1493 参照

swift - 静的フレームワークのサブ依存関係を持つ XCFramework

いくつかの静的フレームワークに依存する XCFramework があります。

私の XCFramework は、BUILD_FOR_LIBRARIES_FOR_DISTRIBUTION を有効にしてビルドされています。

サブ フレームワークは、XCFramework の外部からアクセスできる必要はありません。

クライアント (ホスト) アプリで XCFramework をコンパイルしようとすると、XCFramework の .swiftinterface ファイルでエラーが発生しますNo such module 'FBSDKLoginKit'(FBSDKLoginKit は XCFramework サブ フレームワークの 1 つです)。

不足しているように見えるのは、依存モジュールの swiftinterface ファイルです。たとえば、FBSDKLoginKit を使用していますが、swiftinterface が XCFramework 内にありません。

参考までに、フレームワークを次のようにコンパイルしています。

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

xcode - Xcode 12で機能しないXCFrameworkにfatライブラリを追加する

編集(2020/09/14) : これは、Xcode 12 beta 6 の時点で修正された Xcode のバグのようです。

私は Xcode 12 を使用して静的ライブラリを構築しています。tvOS の場合、Xcode 12 には単一のファット ライブラリにarm64との両方が含まれています。arm64e

同様に、シミュレーター用にビルドする場合、Xcode 12 にはx86_64arm64(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+arm64earm64+ x86_64)、それを認識して処理できない理由がわかりませんxcodebuild

また、個々のアーキテクチャをそれぞれ 2 つのシン ファイル (例:A-arm64.aA-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 を作成するにはどうすればよいですか?