建立 Framework:
首先開啟 Xcode 選擇 Create a new project(圖 1) ,或是直接按 command+shift+n,出現選項,選擇 Cocoa Touch Framework (圖 2)
新增 Swift 檔案,將自己要包成 Framework 的 Swift 檔,放入建立的 Framework 中,如 圖 3 紅線處
讓 Swift 的資源可被外部使用:
將 Swift 檔中要給外部使用的 Class,變數,function 前,加入 open 或是 public(圖4 藍框處),若不加入,當使用 Framework 時,會無法使用這些資源,只會出現在 .h 當中的資源。
open,public 這些解釋可以參考這篇文章:Access Control 教學(swift 3 , iOS)
設定可支援的最低版本
找到 Framework 的 Target -> Build Setting -> 搜尋 iOS Deployment Target ,將最後紅框處改成自己想支援的最低版本,如:圖 5
將 Framework 轉成 simulator 與 實機可以共用的檔案
建立 Aggregate Target 執行 Script。
建立 Aggragate Target ,並讓他執行 Script:
首先移到 Target , 點擊下方的 +,選擇 Cross-platform 中的Aggregate,按 next,輸入名字就會建立,如:圖 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 名稱。
換到 Aggregate 並用 Generic iOS Device 編譯( 圖 15),因兩位大大有寫開啟檔案所在地的 script,所以會自動打開檔案所在地的文件夾,之後就可使用該Framework
新建一個 Project 將Framework 拉入專案中就可使用,若出現 Reason: image not found 的錯誤 (圖 16),則要在 Embedded Binaries 中加入自製的 Framework ( 圖17)
最後,請確認建立的 Framework 是否有在專案中,若沒有可能會出現以下錯誤,或是直接跟你說他找不到 Module
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 中後,就成功了