iOS .a庫打包成.framework(將極光推送的.a庫打包進framework)
兩個以上的工程同時開發時,如果需要引用相同的網路層、第三方庫、工具類等程式碼,可以考慮將其放到一個workspace
;將共同程式碼抽取出來,放在該工程的一個framework
中。考慮到編譯步驟的複雜性,通常一個workspace
建立一個 framework
就可以了。
這樣,在不同工程中只要引用該framework
,即可呼叫它裡面的方法。不用同一份程式碼拷貝兩個以上的地方,避免不同工程中的實現程式碼不一致,提高了開發效率和可維護性。
本文以極光推送(JPush
)SDK
為例,一步步將極光推送的.a
庫以framework
的形式打包進自己專案的workspace
。專案釋出在我的GitHub主頁。
整個步驟走完即可避免專案實施過程中的坑。下面一起來看看吧。
一、建立工程
首先建立一個workspace
、包含一個Cocoa Touch Framework
和一個Swift
工程。這個比較簡單。目錄結構如下:
二、修改UtilLib工程配置
2.1、修改UtilLib
工程的Build Phases
如下:
2.2、修改UtilLib -> Build Settings
配置如下:
三、修改WorkProj配置,執行工程
3.1、WorkProj
工程中,在Build Phases -> Link Binary With Libraries
中新增新建的庫.framework
。引用新建的framework
。
3.2、新建橋接檔案WorkProj-Bridging-Header.h
。因為中Swift中混編OC,需要橋接。
#WorkProj-Bridging-Header.h
#ifndef WorkProj_Bridging_Header_h
#define WorkProj_Bridging_Header_h
#import <UtilLib/JPUSHService.h>
#endif /* WorkProj_Bridging_Header_h */
3.3、在工程的Build Settings
設定OC
橋接檔名稱(在工程根路徑下可直接寫檔名,否則要寫它的相對路徑)
四、準備就續,首先執行UtilLib
工程,再執行WorkProj
工程:
可以正常執行了。
檢視編譯後的檔案,雖然
UtilLib.framework
只有844Kb
,但是在外部工程中可以連結並呼叫UtilLib.framework
的方法。
五、錯誤收集:
這期間有不少的坑,有些是能非常簡單的解決的,有些在網上並沒有直接的解決辦法。現在列出來記錄一下:
5.1、如果路徑不對,會報如下的錯誤。此時在Objective-C Bridging Header中設定它的路徑即可。
5.2、執行WorkProj
工程,會報錯誤:
Undefined symbols for architecture x86_64: "_OBJC_CLASS_$_JPUSHService", referenced from: objc-class-ref in AppDelegate.old: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
大意是JPUSHService
沒有實現檔案。原因是UtilLib.framework
檔案中並不包含JPUSHService
類的實現。
解決辦法是在framework -> Build Settings -> Other Linker Flags
加入-all_load
、-ObjC
。即文中2.2步驟。
相關文章
- iOS 靜態庫(.a, .framework) 動態庫(.framework, dylib)iOSFramework
- iOS的Framework靜態庫iOSFramework
- iOS Xcode打包frameworkiOSXCodeFramework
- iOS —— 極光推送和極光IMiOS
- iOS 10 的推送 User Notifications FrameworkiOSFramework
- iOS逆向--注入framework庫到appiOSFrameworkAPP
- iOS中,Framework和 a的打包及使用iOSFramework
- iOS極光推送封裝iOS封裝
- iOS - 靜態庫.a 和 framework 詳解iOSFramework
- iOS 極光推送遇到的問題iOS
- 玩轉 iOS 10 推送 —— UserNotifications Framework(下)iOSFramework
- 玩轉 iOS 10 推送 —— UserNotifications Framework(上)iOSFramework
- 玩轉 iOS 10 推送 —— UserNotifications Framework(中)iOSFramework
- iOS中的動態庫,靜態庫和framework介紹iOSFramework
- .NET Framework 類庫Framework
- NET Framework 類庫Framework
- iOS 極光推送整合與開發iOS
- iOS-極光推送開發小結iOS
- ios,framework的坑iOSFramework
- iOS_極光推送的UNNotificationServiceExtension實現富文字iOS
- 極光筆記丨iOS 15推送新特性筆記iOS
- 多包名打包以及整合“極光推送”的坑點(區別於“多渠道打包”)
- 極光推送總結
- Robot Framework(5)- 使用測試庫Framework
- Android framework中使用stl庫AndroidFramework
- ios 極光推送獲取當前控制器進行介面跳轉iOS
- iOS-framework的補充iOSFramework
- 極光推送申請iOS推送證書p12及配置教程iOS
- 極光推送申請iOS推送證書p12及配置流程iOS
- 極光推送-java工具類Java
- 極光推送—java快速接入Java
- 極光推送證書篇
- 極光筆記|極光推送在APICloud平臺的使用教程筆記APICloud
- 如何將web打包成jar檔案WebJAR
- SharePoint Framework 開發工具和庫Framework
- Entity Framework Code First資料庫連線Framework資料庫
- robot framework-databaselibaray庫使用(python)FrameworkDatabasePython
- Flutter應用整合極光推送Flutter