web-dev-qa-db-ja.com

純粋なSwift Cocoa Touch Frameworkの構築

私はXcode-6でSwiftを探求していますが、これまでのところは良好ですが、コンパイラを数回壊すことができたため、新しいコレクションには少し作業が必要だと思います。

問題は、フレームワークパッケージをその後別のプロジェクトで使用に作成しようとすることです。プロジェクトは問題なくビルドされ、すべてのテストに成功します。アーカイブを作成しようとすると(これが必要だと思います)、次のエラーが表示されます。

:0:エラー:基本となるObjective-Cモジュール 'Sample'が見つかりません

今、私はこれがSample.hの内容と関係があると思います

// In this header, you should import all the public headers of your framework using statements like #import <Sample/PublicHeader.h>

これは、Swiftこのフレームワークの列挙型、構造体、およびクラスのみを使用しているため、.hファイルは存在しません。

私はまだ利用可能なドキュメントを見つけることができないので、誰かがこれについていくらか光を当てることができますか?

35
Moth

編集(2018年7月27日)

以下の回答の情報は正確ではない場合があります。あなたのマイレージは異なる場合があります。


私はエンジニアと一緒に座って、この正確な質問をしました。これは彼らの反応でした:

Xcode 6は、現時点では配布可能なSwiftフレームワークの構築をサポートしておらず、そのAppleは、そのために有利になるまで、この機能をXcodeに構築しない可能性が高い現在、フレームワークは配布するのではなく、アプリのプロジェクトに埋め込むことを目的としています。セッションビデオのいずれかを見るか、サンプルプロジェクトを見る場合、これは常に配置です。 別の理由はSwiftは非常に新しく、変更される可能性があります。したがって、Swiftベースのフレームワークは、最初に構築したプラットフォームで動作することが保証されていません。

わずかな更新

エンジニアは、配布用のフレームワークを作成することは不可能ではなく、サポートされていないことだけを述べました。

24
Aaron

フレームワークのターゲットに移動し、Headersの下のBuild PhasesタブでMyFramework.hファイルを削除することで、エラーを回避できました

ただし、フレームワークを使用して、含まれているアプリとアプリ拡張機能(どちらも純粋なSwift)の間でコードを共有しているときに、「Underlying Objective-C module not found」エラーが表示されました。

Image showing MyFramework.h for the MyFramework target on the Build Phases tab under Headers

11
Jamie McDaniel

これは便利かもしれません: Creation of pure Swift module

要するに、静的なフレームワークを作成することは可能ですが、1つの問題があります。「ProjectName-Swift.h」ヘッダーが含まれていると、エンドユーザーのプロジェクトでは機能しません。

ただし、Swiftのみを使用する場合は正常に機能します。

2
AlexDenisov

本当に純粋なSwiftモジュールを作成していると仮定すると、Objective-C互換性ヘッダーと生成されたインターフェイスヘッダーを無効にする必要があります。フレームワーク用。 enter image description here

しないパブリックフレームワークヘッダーを削除します。リンクすると、モジュールマップの警告が表示されます。

2
CodaFi

XCode 6のバグだと思います。または、Appleはベータ版ではXCodeからフレームワークをアーカイブできません。

プロファイルにコンパイルすると、XCodeはフレームワークを正しく生成します。 (DerivedDataで作成されたリリースフォルダーを参照)

0
jcgamestoy