打包 Framework 時使用 CocoaPods 引入第三方庫的方法


 

 

最近需要將自己項目的公共代碼打包成 Framework 來使用,但是在打包過程中遇到一個問題,就是提取的公共代碼中用到了一些第三方的庫,比如 AFNetworking等,怎么才能把第三方庫集成進來讓代碼編譯通過並打包成功呢,網上找了很久都沒有找到一篇專門說這個的,讓我走了不少坑,現在就分享一下在打包 Framework 時怎樣使用 CocoaPods 引入第三方庫。

如果你的代碼中沒有用到其他第三方庫的話,可以轉到我的另一篇文章:【iOS 開發】將自己的框架打包成 Framework 的方法


創建 Framework 工程

1. 創建打包工程

  • 打開 Xcode 新建一個工程,選擇 Framework & Libray 選項中的 Cocoa Touch Framework ,這里說一下我的 Xcode 版本是 8.3.2 。
 
創建工程
  • 假設我的代碼中要用到 MBProgressHUD 這個第三方庫(比較好演示),然后使用 CocoaPods 在工程中集成 MBProgressHUD ,集成方法和普通項目一模一樣。
 
CocoaPods
  • 然后選擇工程下的 TestFramework.xcworkspace 重新打開工程。
 
重新打開工程
  • 因為要打包所需的文件,所以這里我自己創建了一個測試類,並在里面使用了 MBProgressHUD 這個庫,在實際的打包過程中,直接把需要打包的所有文件拖到該工程中即可。
 
測試類

2. 添加公開頭文件

  • 選中 Target ,選擇 Build Phases - Headers ,可以看出有三個選項,分別是 Public 、Private 、Project ,把需要公開給別人的 .h 文件拖到 Public 中,把不想公開的,即為隱藏的 .h 文件拖到 Project 中。
 
Headers
  • 完成上述步驟之后,在默認生成的 .h 文件中,我的是 TestFramework.h ,把所有需要暴露的 .h 文件都用 #import <TestFramework/PublicHeader.h>引入,記住一定要將所有需要暴露的 .h 文件都引入,也就是上面 Headers - Public 中加的所有 .h 文件,不然編譯后生成的 .framework 在引用的時候會有警告。
 
引入頭文件

3. 更改設置參數

  • 選中 Target ,選擇 Build Settings ,在 Architectures 下增加 armv7s 。
 
更改設置參數
  • 選中 Target ,選擇 Build Settings ,在搜索欄搜索 Mach-O Type ,將 Mach-O Type修改為 Static Library
 
更改設置參數

工程打包成 Framework

1. 真機編譯所有文件

  • 按照下圖將編譯的 Device 選擇為真機 ,然后按下 Command + B 開始編譯,編譯成功后右鍵 Products 文件夾下的 .framework 文件,點擊 show in Finder
 
編譯真機
  • 打開后可以看到打包完成的真機 Framework 包。
 
Framework

2. 模擬器編譯所有文件

  • 按照下圖將編譯的 Device 選擇為隨便一個模擬器 ,然后按下 Command + B 開始編譯,編譯成功后右鍵 Products 文件夾下的 .framework 文件,點擊 show in Finder
 
編譯模擬器
  • 打開后可以看到打包完成的模擬器 Framework 包。
 
Framework

3. 將兩個 Framework 合成

上面有兩個 Framework , 一個是 Debug-iphoneos(真機) 下的,一個是 Debug-iphonesimulator(模擬器) 下的,需要通過終端命令將兩個 Framework 合為一個模擬器和真機都可使用的 Framework 。

  • 打開終端先輸入 lipo -create ,然后輸入 空格 。
 
Framework 合成
  • 接着將 Debug-iphoneos(真機) 下的 TestFramework 也就是上面框出來的空白文件直接拖到終端,終端會自動顯示路徑。
 
Framework 合成
  • 然后直接將 Debug-iphonesimulator(模擬器) 下的 TestFramework 也拖到終端。
 
Framework 合成
  • 接着輸入 -output ,然后輸入 空格 。
 
Framework 合成
  • 然后輸入 ~/Desktop/NewTestFramework 后直接回車。
 
Framework 合成
  • 這時候桌面上會多一個新的文件為 NewTestFramework ,這時候將真機下的 .framework 包文件復制出來,然后將 NewTestFramework 重命名為 TestFramework 也就是 .framework 包中那個空白文件的名字,如果有 .lipo 后綴就去掉,接着替換 .framework 包中的那個空白文件。
 
Framework 合成
  • 最終替換完成后的 .framework 包就是我們最后所需要的包了,但是可以發現打包完后的 .framework 包里面是沒有 CocoaPods 集成的第三方庫的,所以在使用 .framework 包時,工程中必須也要集成 .framework 包中用到的第三方庫,否則會找不到文件而報錯。

測試打包完的 Framework

  • 新建一個測試工程 TestDemo ,將打包完的 TestFramework.framework 拖到工程中,測試一下剛才創建的 TestClass 類,可以看到 MBProgressHUD 加載框顯示出來了,測試成功。
 
測試工程
  • 上面說了,測試工程中也要集成 MBProgressHUD ,否則會報錯。
 
第三方庫
 
轉載:https://www.jianshu.com/p/6790fc295f48
 
 
問題一:
/Users/XQ/Library/Developer/Xcode/DerivedData/static-bdsgvzfqigaspiaeivnhmmygrhgj/Build/Products

$ lipo -create Release-iphonesimulator5s/libstatic.a  Release-iphonesimulator6/libstatic.a -output lib.a

fatal error: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/lipo: Release-iphonesimulator5s/libstatic.a and Release-iphonesimulator6/libstatic.a have the same architectures (i386) and can't be in the same fat output file

 

1:因為我們合並的是Release-iphonesimulator6和Release-iphonesimulator5s之間的版本,都是模擬器的,或者都是真機的

2:清除緩存就可以

 

問題二:

自定義Framework 報錯 Could not build module 解決方法

 

方法1、找到buildSetting---Allow Non-modular Includes In Framework Modules 這個值  改為YES.

方法2、選中xxx.Framework下 Headers文件夾 右鍵 “add file to 'Headers' ” 把Module 文件夾加進來就可以解決

 

 

 

 

 

 

 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM