建立Swift Framework(可包含 Xib , cassets , Storyboard)

周佳緯
5 min readMar 7, 2018

--

建立 Framework:

首先開啟 Xcode 選擇 Create a new project(圖 1) ,或是直接按 command+shift+n,出現選項,選擇 Cocoa Touch Framework (圖 2)

圖 1
圖 2

新增 Swift 檔案,將自己要包成 Framework 的 Swift 檔,放入建立的 Framework 中,如 圖 3 紅線處

圖 3

讓 Swift 的資源可被外部使用:

將 Swift 檔中要給外部使用的 Class,變數,function 前,加入 open 或是 public(圖4 藍框處),若不加入,當使用 Framework 時,會無法使用這些資源,只會出現在 .h 當中的資源。

圖 4

open,public 這些解釋可以參考這篇文章:Access Control 教學(swift 3 , iOS)

設定可支援的最低版本

找到 Framework 的 Target -> Build Setting -> 搜尋 iOS Deployment Target ,將最後紅框處改成自己想支援的最低版本,如:圖 5

圖 5

將 Framework 轉成 simulator 與 實機可以共用的檔案

建立 Aggregate Target 執行 Script。

建立 Aggragate Target ,並讓他執行 Script:

首先移到 Target , 點擊下方的 +,選擇 Cross-platform 中的Aggregate,按 next,輸入名字就會建立,如:圖 13

圖 13

到Build Phase 加入 New Run Script Phase,圖 14,之後在黑框內輸入 Script Code,這部分可參考,這兩篇文章:

Framework en Swift escrito originalmente por Zaid Pathan versión español.

Swift Framework — Ch: 1 . Develop a Swift Framework

第二篇的 Script 內的 Framework 名稱改成自己的 Framework 名稱。

圖 14

換到 Aggregate 並用 Generic iOS Device 編譯( 圖 15),因兩位大大有寫開啟檔案所在地的 script,所以會自動打開檔案所在地的文件夾,之後就可使用該Framework

圖 15

新建一個 Project 將Framework 拉入專案中就可使用,若出現 Reason: image not found 的錯誤 (圖 16),則要在 Embedded Binaries 中加入自製的 Framework ( 圖17)

圖 16
圖17

最後,請確認建立的 Framework 是否有在專案中,若沒有可能會出現以下錯誤,或是直接跟你說他找不到 Module

打開對應的文件夾後才發現沒被 Copy 過去

2018/06/05 遇到錯誤:

因 Xcode 改版,所以支援的 iOS 也往上升了,這時遇到了錯誤:

Module compiled with Swift 4.0.3 cannot be imported in Swift 4.1.2

這時只能再開啟 Xcode,並更新 Framework,或是參考 彼得潘 大大的這篇文章解決

『Module compiled with Swift 4.0.3 cannot be imported in Swift 4.1』

2018/06/21 打包上傳 Archive 錯誤:

當執行 Archive 要進行 上傳時,爆出下列錯誤

大概意思是Bitcode 錯誤,所以只好把Building Setting 中的 enable Bitcode 設定為 No 才可正常 Archive

PS. 在 Objective-C 的 Framework 建立時也有遇到這個問題

PS 2. 在把 包含自己建立的 .bundle 檔 打包成 .iPA 檔時,發生了另一個錯誤. 錯誤:“Found an unexpected Mach-O header code: 0x72613c21”

根據這位大大的這篇文章

iOS 打包 “Found an unexpected Mach-O header code: 0x72613c21”报错

將 .Bundle 內的 靜態文件拉到 .framework 中後,就成功了

--

--