首先我們需要創建一個iOS的
CocoaTouch
工程,點擊Next,輸入我們Framework的名字即可。下方我們暫且將該Framework的名字命名為
MyFramework
。如下所示:
2.設定兼容版本
創建完工程后,我們要選擇Deployment Target
, 此處我們選擇的是8.0。也就是說此處我們封裝的SDK所支持的iOS系統版本是iOS8.0+。
3.選擇“靜態庫”
我們創建的framework默認是動態庫,所以我們要講Mach-O Type設置為靜態庫“Static Library”,如下所示。
4.引入源代碼並進行編譯
①這里我創建的是SayHello類。
.h文件中
#import <Foundation/Foundation.h> NS_ASSUME_NONNULL_BEGIN @interface SayHello : NSObject - (void)sayHello; @end NS_ASSUME_NONNULL_END
.m文件中
#import "SayHello.h" @implementation SayHello - (void)sayHello { NSLog(@"hello world"); } @end
下方截圖中是在Build Phases
下的Headers
中進行設置的。將用戶可以看到的頭文件房子Public
中,用戶看不到的放在Project中。如下所示。
將Run更改為release模式,選擇真機編譯完后,在Products
下會生成相應的Framework, 然后通過Show in Finder
進行查看即可
將framework導入到新項目中,other link flags 配置-Objc即可調用
自定義Framework 報錯 Could not build module
調用解決方法:找到buildSetting--Allow Non-modular Includes In Framework Modules 改為YES
將第三方.framework集成到自己的靜態庫里
調舉個例子,將高德framework集成到自己的靜態庫里,打包出來
到高德官網下載定位和基礎的兩個framework,下圖示例:
.
雙擊進入,找到AMapFoundationKit, 重命名為.a文件,並拖入header文件夾中.將header文件夾改名為AMapFoundation,另外一個framework同理操作
創建framework項目,將AMapFoundation文件夾拖入項目中,導入高德相關依賴庫
接下來生成framework的操作和上邊操作一樣,編譯過后生成framework.
新建項目,導入framework,修改release,ios9.0,添加高德依賴庫,添加-Objc,添加定位權限,添加網絡權限,調用即可.
可能會有一些頭文件導入后的文件層級關系的錯誤, 根據自己文件所在位置酌情修改即可.
!!!!!!!!!!!如果自己framework中使用的其他framework不支持某個架構的話(arm7,arm64等)
首先cd到這個問題framework中,lipo -info frameworkName查看該framework都支持什么架構,如果確實沒有報錯的架構,只能是讓自己的framework也不支持該架構.
到Build Setting中,Architecutres---Architecutres默認的另外添加arm64 或者arm7