新聞中心
概覽
Swift 軟件包是可復(fù)用的 Swift、Objective-C、Objective-C++、C 或 C++ 代碼組件。它們可以捆綁資源,將代碼作為二進(jìn)制文件來提供,或者依賴于其他軟件包。Swift 軟件包可用于捆綁可執(zhí)行代碼 (例如,將腳本捆綁為“可執(zhí)行產(chǎn)品”),或用于創(chuàng)建軟件包來將可共享的代碼作為“資源庫產(chǎn)品”提供。用于提供資源庫產(chǎn)品的軟件包有助于促進(jìn)代碼模塊化發(fā)展,方便與他人共享代碼,而且也利于其他開發(fā)者在其 App 中添加功能。

成都創(chuàng)新互聯(lián)業(yè)務(wù)包括:成品網(wǎng)站、企業(yè)產(chǎn)品展示型網(wǎng)站建設(shè)、高端網(wǎng)站設(shè)計(jì)、電子商務(wù)型網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)(多語言)、商城開發(fā)、按需求定制網(wǎng)站、全網(wǎng)營銷推廣等。效率優(yōu)先,品質(zhì)保證,用心服務(wù)是我們的核心價(jià)值觀,我們將繼續(xù)以良好的信譽(yù)為基礎(chǔ),秉承穩(wěn)固與發(fā)展、求實(shí)與創(chuàng)新的精神,為客戶提供更全面、更優(yōu)質(zhì)的互聯(lián)網(wǎng)服務(wù)!
通過 Xcode,你可以創(chuàng)建新的 Swift 軟件包,添加代碼、資源文件和二進(jìn)制文件,構(gòu)建 Swift 軟件包,并且運(yùn)行單元測試。
創(chuàng)建 Swift 軟件包
要?jiǎng)?chuàng)建新的 Swift 軟件包,請打開 Xcode,然后選擇“File”(文件) >“New”(新建) >“Swift Package”(Swift 軟件包)。選取名稱并選擇文件位置。選擇“Create Git repository on my Mac”(在我的 Mac 上創(chuàng)建 Git 儲(chǔ)存庫),以將你的軟件包置于版本控制下。完成后,Swift 軟件包會(huì)在 Xcode 中打開,就像是一個(gè)標(biāo)準(zhǔn)的 Xcode 項(xiàng)目。在創(chuàng)建 Swift 軟件包時(shí),Xcode 會(huì)生成所有必要的文件和文件夾:
-
README.md文件位于軟件包的根目錄下。它會(huì)提供 Swift 軟件包功能的描述。 -
Package.swift文件 (即“軟件包清單”) 描述 Swift 軟件包的配置。你可以在訪達(dá)中連按兩次該文件來在 Xcode 中打開對(duì)應(yīng)的軟件包。軟件包清單使用 Swift 和 PackageDescription 框架來定義軟件包的名稱、產(chǎn)品、目標(biāo),以及對(duì)其他軟件包的依賴項(xiàng)等。 -
源代碼文件位于名為
Sources的文件夾中,并根據(jù)Target(英文) 來設(shè)定作用域。一個(gè) Swift 軟件包可以包含多個(gè)目標(biāo),并且按照慣例,各目標(biāo)的代碼位于自己的子文件夾中。 -
單元測試目標(biāo)位于名為
Tests的文件夾中,并且遵循與標(biāo)準(zhǔn)目標(biāo)相同的慣例,各測試目標(biāo)的代碼分別位于自己的子文件夾中。
配置你的 Swift 軟件包
Swift 軟件包不使用 .xcproject 或 .xcworkspace,但依賴于它們的文件夾結(jié)構(gòu),并且使用軟件包清單來進(jìn)行其他配置。以下代碼摘錄顯示了一個(gè)簡單的軟件包清單。它聲明了 MyLibrary 目標(biāo),并使用同一名稱將它作為資源庫產(chǎn)品來提供。
// swift-tools-version:5.3 import PackageDescription let package = Package( name: "MyLibrary", platforms: [ .macOS(.v10_14), .iOS(.v13), .tvOS(.v13) ], products: [ // Products define the executables and libraries a package produces, and make them visible to other packages. .library( name: "MyLibrary", targets: ["MyLibrary", "SomeRemoteBinaryPackage", "SomeLocalBinaryPackage"]) ], dependencies: [ // Dependencies declare other packages that this package depends on. ], targets: [ // Targets are the basic building blocks of a package. A target can define a module or a test suite. // Targets can depend on other targets in this package, and on products in packages this package depends on. .target( name: "MyLibrary", exclude: ["instructions.md"], resources: [ .process("text.txt"), .process("example.png"), .copy("settings.plist") ] ), .binaryTarget( name: "SomeRemoteBinaryPackage", url: "https://url/to/some/remote/binary/package.zip", checksum: "The checksum of the XCFramework inside the ZIP archive." ), .binaryTarget( name: "SomeLocalBinaryPackage", path: "path/to/some.xcframework" ) .testTarget( name: "MyLibraryTests", dependencies: ["MyLibrary"]), ] )
軟件包清單的開頭必須是字符串 // swift-tools-version:,后跟版本號(hào),例如 // swift-tools-version:5.3。
Swift 工具版本聲明以下內(nèi)容:
-
PackageDescription 框架的版本
-
用于處理清單的 Swift 語言兼容版本
-
使用該軟件包所需的最低 Swift 工具版本
每個(gè)版本的 Swift 都可能會(huì)推出 PackageDescription 框架更新,但以前的 API 版本仍可供聲明較舊 Swift 工具版本的軟件包使用。這樣一來,你便可以利用新版本的 Swift、Swift 工具和 PackageDescription 框架,而無需更新你的軟件包清單,也不會(huì)失去對(duì)現(xiàn)有軟件包的訪問。
要進(jìn)一步了解 PackageDescription 框架,請參閱“Package (英文)”。
注釋
在你編輯軟件包清單時(shí),Xcode 會(huì)提供代碼補(bǔ)全功能。
添加你的代碼
根據(jù)慣例,源代碼文件位于軟件包的 Sources 目錄下的子文件中,文件夾名稱與它們所屬的目標(biāo)相同。注意上方的軟件包清單是如何聲明 MyLibrary 目標(biāo)的。其源代碼文件位于 Sources/MyLibrary 中,用于測試的源代碼文件則位于 Sources/MyLibraryTests 中。你可以利用其他子文件夾來組織它們的結(jié)構(gòu)。默認(rèn)情況下,Xcode 將所有有效的源代碼文件包含在目標(biāo)的文件夾中。如果想要以顯式方式聲明所含的源代碼文件,請?jiān)诔跏蓟?Target (英文) 時(shí)使用 sources (英文) 參數(shù)來傳遞它們。也可以傳遞目錄的路徑。
要將源代碼文件添加到 Swift 軟件包中,可以利用你已熟知的工作流程。例如,你可以將源代碼文件拖入項(xiàng)目導(dǎo)航器來將其添加到軟件包中,也可以使用“File”(文件) >“Add Files to [packageName]”(添加文件至 [packageName]) 菜單來添加。目標(biāo)可以包含 Swift、Objective-C/C++ 或 C/C++ 代碼,但一個(gè)目標(biāo)中不能混合 Swift 和 C 系列語言。例如,一個(gè) Swift 軟件包可以有兩個(gè)目標(biāo),一個(gè)目標(biāo)含有 Objective-C、Objective-C++ 和 C 代碼,另一個(gè)則包含 Swift 代碼。
添加對(duì)其他 Swift 軟件包的依賴項(xiàng)
與 App 一樣,Swift 軟件包可以擁有“軟件包依賴項(xiàng)”。要聲明對(duì)遠(yuǎn)程軟件包的依賴項(xiàng),可以使用任何一種將遠(yuǎn)程軟件包 URL 作為參數(shù)的函數(shù)。要將本地軟件包添加為依賴項(xiàng),可以使用任何一種將本地軟件包路徑作為參數(shù)的函數(shù)。以下代碼片段顯示了這兩種選項(xiàng):
dependencies: [ // Dependencies declare other packages that this package depends on. .package(url: "https://url/of/another/package.git", from: "1.0.0"), .package(path: "path/to/a/local/package/", "1.0.0"..<"2.0.0")],
請參閱 Package.Dependency (英文),以了解所有可用來聲明軟件包依賴項(xiàng)的方式。在添加依賴項(xiàng)時(shí),你可以將其提供的產(chǎn)品用作 Target.Dependency (英文),或使它成為軟件包的 Product (英文) 的一部分。
將二進(jìn)制文件作為 Swift 軟件包進(jìn)行分發(fā)
除了分發(fā)提供源代碼文件的 Swift 軟件包外,也可以選擇分發(fā)二進(jìn)制文件。例如,專有閉源資源庫的創(chuàng)建者通常以二進(jìn)制文件形式提供這些資源庫。要了解更多信息,請參閱“將二進(jìn)制框架作為 Swift 軟件包進(jìn)行分發(fā) (英文)”。
添加軟件包資源
在你的清單文件中聲明 Swift 工具版本 5.3 或更高版本,以將素材文件作為軟件包資源添加到 Swift 軟件包中。例如,Swift 軟件包可以包含使用素材目錄、Storyboard 和 .strings 文件等的用戶界面組件。要了解更多信息,請參閱“使用 Swift 軟件包捆綁資源 (英文)”。
使你的 Swift 軟件包能夠跨平臺(tái)兼容
盡管 Swift 軟件包在本質(zhì)上獨(dú)立于平臺(tái),并包含 Linux 等目標(biāo)平臺(tái),但是 Swift 軟件包可能是針對(duì)特定平臺(tái)的。你可以使用條件編譯塊來處理平臺(tái)專有代碼并實(shí)現(xiàn)跨平臺(tái)兼容性。以下示例顯示了如何使用條件編譯塊:
#if os(Linux) // Code specific to Linux #elseif os(macOS) // Code specific to macOS #endif #if canImport(UIKit) // Code specific to platforms where UIKit is available #endif
此外,你可能需要定義最低部署目標(biāo)。注意以下軟件包清單如何通過將最低部署目標(biāo)作為值傳遞給 Package (英文) 構(gòu)造器的 platforms 參數(shù)。但是,將最低部署目標(biāo)傳遞給該構(gòu)造器不會(huì)將軟件包限制到列出的平臺(tái)。
// swift-tools-version:5.3 import PackageDescription let package = Package( name: "MyLibrary", platforms: [ .macOS(.v10_14), .iOS(.v13), .tvOS(.v13) ], products: [ // Products define the executables and libraries a package produces, and make them visible to other packages. .library( name: "MyLibrary", targets: ["MyLibrary", "SomeRemoteBinaryPackage", "SomeLocalBinaryPackage"]) ], dependencies: [ // Dependencies declare other packages that this package depends on. ], targets: [ // Targets are the basic building blocks of a package. A target can define a module or a test suite. // Targets can depend on other targets in this package, and on products in packages this package depends on. .target( name: "MyLibrary", exclude: ["instructions.md"], resources: [ .process("text.txt"), .process("example.png"), .copy("settings.plist") ] ), .binaryTarget( name: "SomeRemoteBinaryPackage", url: "https://url/to/some/remote/binary/package.zip", checksum: "The checksum of the XCFramework inside the ZIP archive." ), .binaryTarget( name: "SomeLocalBinaryPackage", path: "path/to/some.xcframework" ) .testTarget( name: "MyLibraryTests", dependencies: ["MyLibrary"]), ] )
提示
如果你計(jì)劃發(fā)布 Swift 軟件包,而且該軟件包僅支持部分平臺(tái),請考慮在 README.md 文件中列出受支持的平臺(tái)。此外,也請考慮添加對(duì)其他平臺(tái)的支持,以便擴(kuò)大受眾范圍。
構(gòu)建目標(biāo)并運(yùn)行單元測試
Xcode 會(huì)在軟件包清單中為每個(gè)產(chǎn)品創(chuàng)建一個(gè)方案。為軟件包的構(gòu)建和運(yùn)行目的地選擇一個(gè)方案,并像構(gòu)建 App 目標(biāo)一樣進(jìn)行構(gòu)建。每個(gè)源代碼目標(biāo)通常至少有一個(gè)對(duì)應(yīng)的測試目標(biāo)。如果你的軟件包中包含多個(gè)產(chǎn)品,Xcode 會(huì)使用名稱 [packageName]-Package 來創(chuàng)建一個(gè)額外方案,以構(gòu)建所有目標(biāo)并運(yùn)行所有單元測試。
文章標(biāo)題:創(chuàng)新互聯(lián)IOS教程:使用Xcode創(chuàng)建獨(dú)立Swift軟件包
文章出自:http://www.5511xx.com/article/djihdgh.html


咨詢
建站咨詢
