web-dev-qa-db-ja.com

swiftで.a静的ライブラリを使用するにはどうすればよいですか?

Swiftでwebrtc .a静的ライブラリを使用したい。お願いできますか?私はあなたがSwiftで静的ライブラリを使用できないと読んだ、それは本当ですか?

17
CarlosAndres

尋ねたこの問題を修正しましたか?私も今日この問題に直面しましたが、ほんの一瞬で修正しました。この問題を解決していない場合は、次の手順を試してください。

p.s .: 2つのプロジェクトは同じワークスペース(静的ライブラリプロジェクトとアプリプロジェクト)にあり、静的ライブラリプロジェクトはアプリプロジェクトの前にビルドされます。写真が示すようなワークスペース構造:

/Users/raniys/Desktop/Screen Shot 2016-03-14 at 5.27.20 PM.png

  1. 静的libプロジェクトでは、すべての.hファイルを「Build Phases/Copy Files」に追加する必要があります。

enter image description here

  1. 静的ライブラリ製品ファイル(.aファイル)をアプリプロジェクトにドラッグします。写真を参照してください。

(パス:「アプリプロジェクト/ビルドフェーズ/ライブラリとバイナリをリンク」)

enter image description here

* .aファイルの赤い色のマークが気になる場合は、ビルドデバイスとして「汎用iOSデバイス」を選択して静的libプロジェクトを再ビルドし、.aをアプリプロジェクトに再ドラッグするだけです(赤いものは削除できます)

  1. アプリプロジェクトで「ライブラリ検索パス」を設定します。

enter image description here

これは、プロジェクトがビルドした.aファイルパスです:$(USER_LIBRARY_DIR)/ Developer/Xcode/DerivedData/StockApp-fkjqyvsniiauxogkivalcduqeotj/Build/Products/Debug-iphoneos

  1. アプリプロジェクトのBridging-Headerファイルを作成し、その中に静的ライブラリをインポートします。私の場合、「StaticLib/StaticLib.h」と「CommonFoundation/CommonFoundation.h」を含めます。

enter image description here

  1. アプリプロジェクトの "Objective-C Bridging Header"にBridging-Headerファイルパスを追加します。

enter image description here

これですべて完了し、静的ライブラリの機能を使用できるようになりました。 enter image description here

33
Raniys

SwiftでのObjective-Cクラスの使用

App Target内にコードをインポートする場合(1つのプロジェクトでSwiftとObjective-Cを混合)、bridging headerファイルを使用して、Objective-CコードをSwiftに公開する必要があります。 _コード。 [プロジェクトでSwiftとObjective-Cコードを混合]

この投稿では、Objective-Cの静的ライブラリをSwiftコードにインポートする方法を説明します

Swiftコンシューマ-> Objective-C静的ライブラリ

Xcodeバージョン10.2.1

Objective-Cの静的ライブラリを作成する

ライブラリプロジェクトを作成するか、ライブラリターゲットを作成します

File -> New -> Project... -> Cocoa Touch Static Library
//or
Project editor -> Add a Target -> Cocoa Touch Static Library 

module.modulemapファイルを作成 [約]

module module_name {
    umbrella header "module_name-umbrella.h"
    export *
}

module_name-umbrella.hファイルを作成 [約] そして、消費者向けに開くすべての.hファイルを追加します

#import "header_1.h"
#import "header_2.h"

module.modulemapおよびmodule_name-umbrella.hファイルをCopy Filesセクションに追加します [約]

Project editor -> select a target -> Build Phases -> Copy Files -> add `module.modulemap`, `module_name-umbrella.h` 

実装ファイルの追加.m

Select `.m` file -> Select File Inspectors Tab -> Target Membership -> Select the target
//or
Project editor -> select a target -> Build Phases -> Compile Sources -> add files

.hmodule_name-umbrella.hheader_1.h)にリストされたヘッダーファイルheader_2.hを追加します [できません][公開ターゲットメンバーシップ]

Select `.h` file -> Select File Inspectors Tab -> Target Membership -> Select the target and make it **public**
//or
Project editor -> select a target -> Build Phases -> Headers -> add files to the **public** zone

ビルドライブラリ- ⌘ Command + B またはProduct -> Build

注:クライアントコードと同じプロセスアーキテクチャのライブラリをビルドしてください。

生成された出力を検索 [ビルド場所]

Products group -> lib<product_name>.a -> Show in Finder

ディレクトリに含まれるもの

  • lib<product_name>.a –構築された静的ライブラリ
  • include/<product_name>セクションのファイルを含むCopy Filesフォルダー
  • Headersセクションのファイルを含むusr/local/includeフォルダー。パブリックインターフェイス/定義があります

Objective-Cの静的ライブラリを使用する

Drag and drop Xcodeプロジェクトへのバイナリ [約]

Link Library[未定義のシンボル][リンクと埋め込み]

Project editor -> select a target -> General -> Linked Frameworks and Libraries -> add -> Add Others... -> point to `lib<product_name>.a` file
//or
Project editor -> select a target -> Build Phases -> Link Binary With Libraries -> add -> Add Others... -> point to `lib<product_name>.a` file

Library Search paths[ライブラリが見つかりません][再帰パス]

Project editor -> select a target -> Build Settings -> Search Paths -> Library Search paths -> add path to the parent of `lib<product_name>.a` file

Header Search Paths[モジュールが見つかりません][再帰パス]

Project editor -> select a target -> Build Settings -> Search Paths -> Header Search Paths -> add path to generated `include/<product_name>` folder with `module.modulemap` and `<product_name>-umbrella.h`

モジュールをSwiftクライアントコードにインポート [モジュール名]

import module_name

その他の例はこちら

2
yoAlex5

はい、Swiftで静的ライブラリを使用できます。ビルドフェーズに移動し、[ライブラリとバイナリをリンク]でそれらを追加します。

enter image description here

または、[ビルド設定]の下に移動し、[検索パス]で[ライブラリ検索パス]値を追加して、.aファイルがあるフォルダーへのパスを含めることができます。

enter image description here

[ヘッダー検索パス]で同じ方法でライブラリのヘッダーを追加できます

また、このライブラリがObjective-Cで記述されている場合、Swiftで使用するにはブリッジングヘッダーが必要になることに注意してください。

1
Cole

Xcode 9では、Swiftでサポートされる静的ライブラリを使用します。 Objective-Cでのように使用できます。 Xcodeリリースノート

Xcodeは、Swiftコードを含む静的ライブラリターゲットをサポートしています。 Swift静的ライブラリを使用するアプリケーションのデバッグには、元の場所にあるビルドアーティファクトの完全なセットが必要になる場合があります

1
abdullahselek