掃二維碼與項目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
Swift 軟件包是可復用的 Swift、Objective-C、Objective-C++、C 或 C++ 代碼組件。它們可以捆綁資源,將代碼作為二進制文件來提供,或者依賴于其他軟件包。Swift 軟件包可用于捆綁可執(zhí)行代碼 (例如,將腳本捆綁為“可執(zhí)行產(chǎn)品”),或用于創(chuàng)建軟件包來將可共享的代碼作為“資源庫產(chǎn)品”提供。用于提供資源庫產(chǎn)品的軟件包有助于促進代碼模塊化發(fā)展,方便與他人共享代碼,而且也利于其他開發(fā)者在其 App 中添加功能。

成都創(chuàng)新互聯(lián)業(yè)務包括:成品網(wǎng)站、企業(yè)產(chǎn)品展示型網(wǎng)站建設(shè)、高端網(wǎng)站設(shè)計、電子商務型網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)(多語言)、商城開發(fā)、按需求定制網(wǎng)站、全網(wǎng)營銷推廣等。效率優(yōu)先,品質(zhì)保證,用心服務是我們的核心價值觀,我們將繼續(xù)以良好的信譽為基礎(chǔ),秉承穩(wěn)固與發(fā)展、求實與創(chuàng)新的精神,為客戶提供更全面、更優(yōu)質(zhì)的互聯(lián)網(wǎng)服務!
通過 Xcode,你可以創(chuàng)建新的 Swift 軟件包,添加代碼、資源文件和二進制文件,構(gòu)建 Swift 軟件包,并且運行單元測試。
要創(chuàng)建新的 Swift 軟件包,請打開 Xcode,然后選擇“File”(文件) >“New”(新建) >“Swift Package”(Swift 軟件包)。選取名稱并選擇文件位置。選擇“Create Git repository on my Mac”(在我的 Mac 上創(chuàng)建 Git 儲存庫),以將你的軟件包置于版本控制下。完成后,Swift 軟件包會在 Xcode 中打開,就像是一個標準的 Xcode 項目。在創(chuàng)建 Swift 軟件包時,Xcode 會生成所有必要的文件和文件夾:
README.md 文件位于軟件包的根目錄下。它會提供 Swift 軟件包功能的描述。
Package.swift 文件 (即“軟件包清單”) 描述 Swift 軟件包的配置。你可以在訪達中連按兩次該文件來在 Xcode 中打開對應的軟件包。軟件包清單使用 Swift 和 PackageDescription 框架來定義軟件包的名稱、產(chǎn)品、目標,以及對其他軟件包的依賴項等。
源代碼文件位于名為 Sources 的文件夾中,并根據(jù) Target (英文) 來設(shè)定作用域。一個 Swift 軟件包可以包含多個目標,并且按照慣例,各目標的代碼位于自己的子文件夾中。
單元測試目標位于名為 Tests 的文件夾中,并且遵循與標準目標相同的慣例,各測試目標的代碼分別位于自己的子文件夾中。
Swift 軟件包不使用 .xcproject 或 .xcworkspace,但依賴于它們的文件夾結(jié)構(gòu),并且使用軟件包清單來進行其他配置。以下代碼摘錄顯示了一個簡單的軟件包清單。它聲明了 MyLibrary 目標,并使用同一名稱將它作為資源庫產(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:,后跟版本號,例如 // swift-tools-version:5.3。
Swift 工具版本聲明以下內(nèi)容:
PackageDescription 框架的版本
用于處理清單的 Swift 語言兼容版本
使用該軟件包所需的最低 Swift 工具版本
每個版本的 Swift 都可能會推出 PackageDescription 框架更新,但以前的 API 版本仍可供聲明較舊 Swift 工具版本的軟件包使用。這樣一來,你便可以利用新版本的 Swift、Swift 工具和 PackageDescription 框架,而無需更新你的軟件包清單,也不會失去對現(xiàn)有軟件包的訪問。
要進一步了解 PackageDescription 框架,請參閱“Package (英文)”。
注釋
在你編輯軟件包清單時,Xcode 會提供代碼補全功能。
根據(jù)慣例,源代碼文件位于軟件包的 Sources 目錄下的子文件中,文件夾名稱與它們所屬的目標相同。注意上方的軟件包清單是如何聲明 MyLibrary 目標的。其源代碼文件位于 Sources/MyLibrary 中,用于測試的源代碼文件則位于 Sources/MyLibraryTests 中。你可以利用其他子文件夾來組織它們的結(jié)構(gòu)。默認情況下,Xcode 將所有有效的源代碼文件包含在目標的文件夾中。如果想要以顯式方式聲明所含的源代碼文件,請在初始化 Target (英文) 時使用 sources (英文) 參數(shù)來傳遞它們。也可以傳遞目錄的路徑。
要將源代碼文件添加到 Swift 軟件包中,可以利用你已熟知的工作流程。例如,你可以將源代碼文件拖入項目導航器來將其添加到軟件包中,也可以使用“File”(文件) >“Add Files to [packageName]”(添加文件至 [packageName]) 菜單來添加。目標可以包含 Swift、Objective-C/C++ 或 C/C++ 代碼,但一個目標中不能混合 Swift 和 C 系列語言。例如,一個 Swift 軟件包可以有兩個目標,一個目標含有 Objective-C、Objective-C++ 和 C 代碼,另一個則包含 Swift 代碼。
與 App 一樣,Swift 軟件包可以擁有“軟件包依賴項”。要聲明對遠程軟件包的依賴項,可以使用任何一種將遠程軟件包 URL 作為參數(shù)的函數(shù)。要將本地軟件包添加為依賴項,可以使用任何一種將本地軟件包路徑作為參數(shù)的函數(shù)。以下代碼片段顯示了這兩種選項:
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 (英文),以了解所有可用來聲明軟件包依賴項的方式。在添加依賴項時,你可以將其提供的產(chǎn)品用作 Target.Dependency (英文),或使它成為軟件包的 Product (英文) 的一部分。
除了分發(fā)提供源代碼文件的 Swift 軟件包外,也可以選擇分發(fā)二進制文件。例如,專有閉源資源庫的創(chuàng)建者通常以二進制文件形式提供這些資源庫。要了解更多信息,請參閱“將二進制框架作為 Swift 軟件包進行分發(fā) (英文)”。
在你的清單文件中聲明 Swift 工具版本 5.3 或更高版本,以將素材文件作為軟件包資源添加到 Swift 軟件包中。例如,Swift 軟件包可以包含使用素材目錄、Storyboard 和 .strings 文件等的用戶界面組件。要了解更多信息,請參閱“使用 Swift 軟件包捆綁資源 (英文)”。
盡管 Swift 軟件包在本質(zhì)上獨立于平臺,并包含 Linux 等目標平臺,但是 Swift 軟件包可能是針對特定平臺的。你可以使用條件編譯塊來處理平臺專有代碼并實現(xiàn)跨平臺兼容性。以下示例顯示了如何使用條件編譯塊:
#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
此外,你可能需要定義最低部署目標。注意以下軟件包清單如何通過將最低部署目標作為值傳遞給 Package (英文) 構(gòu)造器的 platforms 參數(shù)。但是,將最低部署目標傳遞給該構(gòu)造器不會將軟件包限制到列出的平臺。
// 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"]), ] )
提示
如果你計劃發(fā)布 Swift 軟件包,而且該軟件包僅支持部分平臺,請考慮在 README.md 文件中列出受支持的平臺。此外,也請考慮添加對其他平臺的支持,以便擴大受眾范圍。
Xcode 會在軟件包清單中為每個產(chǎn)品創(chuàng)建一個方案。為軟件包的構(gòu)建和運行目的地選擇一個方案,并像構(gòu)建 App 目標一樣進行構(gòu)建。每個源代碼目標通常至少有一個對應的測試目標。如果你的軟件包中包含多個產(chǎn)品,Xcode 會使用名稱 [packageName]-Package 來創(chuàng)建一個額外方案,以構(gòu)建所有目標并運行所有單元測試。

我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流