制作原生插件-iOS Framework制作流程
uni-app 2019-05-30 15:40:24

 1、新建工程选择iOS —> Cocoa Touch Framework

702B074D-2721-4CDB-8CFE-FFBE0099001B.png

语言选择OC

 

2、 进入创建好的工程删除掉自带的工程同名头文件

WX20190530-154405@2x.png 

 

3、 添加所需文件

 

https://www.jianshu.com/p/f2bb038db637

||

||

||

||

 

新建 framwwork以后,

Header Search Paths 中添加引用:

"$(SRCROOT)/../../SDK/inc"

WX20200830-212221@2x.png

 

 

Build Active Architecture Only 设置为NO的意思是当前打包的.framework支持所有的设备.否则打包时只能用当前版本的模拟器或真机运行.

1.png

 

Build Setting 搜索linking

设置Dead Code Stripping 为NO是编译选项优化,包瘦身,(可不改)

Mach-O Type 选中StaticLibrary (静态库) Xcode默认是动态库.

2.png

 

设置framework最低支持的版本,搜索IOS deployment,最低9.0即可

3.png 

TARGETS —> Build Phases

将需要呈现给来的头文件,直接从Project拖到Public中. 不想呈现出来的.h文件不建议拖到Private中. 放在project中即可 

 4.png

在进行编译之前应该设置为release模式

 5.png

 

6.png

 

 

 

开始制作:

 

 第一步、新建weex插件扩展模块类JPushPluginModule,注意命名加前缀防止冲突(和weex官方插件扩展方式一样,https://weex.apache.org/zh/guide/extend/extend-ios.html

WX20190531-022013@2x.png

 7.png

C/C++ Code复制内容到剪贴板
  1. #import <Foundation/Foundation.h>  
  2. #import "WXModuleProtocol.h"  
  3.   
  4. NS_ASSUME_NONNULL_BEGIN  
  5.   
  6. @interface YOJPushPluginModule : NSObject <WXModuleProtocol>  
  7.   
  8.   
  9.   
  10. @end  
  11.   
  12. NS_ASSUME_NONNULL_END  

 

  

980CC7C5-455D-4A77-8F4E-D0A3E90DC141.png 

 WX20190531-021807@2x.png

 8.png

C/C++ Code复制内容到剪贴板
  1. #import <Foundation/Foundation.h>  
  2. #import "YOJPushPluginModule.h"  
  3. #import "WXUtility.h"  
  4.   
  5. @implementation YOJPushPluginModule;  
  6.   
  7. @synthesize weexInstance;  
  8.   
  9. WX_EXPORT_METHOD(@selector(test))  
  10.   
  11. - (void)dealloc  
  12. {  
  13.     [[NSNotificationCenter defaultCenter] removeObserver:self];  
  14. }  
  15.   
  16. - (instancetype)init  
  17. {  
  18.     if (self = [super init]) {  
  19.         /* 监听App停止运行事件,例:如果alert存在,调一下dismiss方法移除 */  
  20.         //        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dismiss) name:@"PDRCoreAppDidStopedKey" object:nil];  
  21.     }  
  22.     return self;  
  23. }  
  24.   
  25. - (void)test  
  26. {  
  27.     NSLog(@"JPUSH success");  
  28. }  
  29.   
  30. @end  

 

 

第二步看情况(有需要在app启动时初始化或者获取系统事件用的,可以有第2步,如果没有则跳过这步) 

新建weex插件扩展模块类JPushPluginProxy类(注意命名加前缀防止冲突),继承 NSObject

遵守UniPluginProtocol协议 ,用来在app启动时初始化或者获取系统事件用的,这个类尽量不要有其他的过多代码逻辑。如下图:

1.png 

C/C++ Code复制内容到剪贴板
  1. #import <Foundation/Foundation.h>  
  2. #import "UniPluginProtocol.h"  
  3. @interface YOJPushPluginProxy : NSObject<UniPluginProtocol>  
  4.   
  5. @end  

 

 

 2.png

C/C++ Code复制内容到剪贴板
  1. #import "YOJPushPluginProxy.h"  
  2.   
  3.   
  4. @implementation YOJPushPluginProxy  
  5. -(void)onCreateUniPlugin{  
  6.     NSLog(@"TestJPushPlugin 有需要初始化的逻辑可以放这里!");  
  7. }  
  8.   
  9. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{  
  10.     NSLog(@"TestJPushPlugin 有需要didFinishLaunchingWithOptions可以放这里!");  
  11.     return YES;  
  12. }  
  13.   
  14. @end  

 

 

合并真机模拟器版本

内部分为Debug版本和Release版本,同时两者有分为真机版本和模拟器版本framework(iphoneos后缀代表真机版本,iphonesimulator后缀代表模拟器)

因为以上获取的framework只能在对应的版本上运行(即真机只能在设备上运行模拟器版本只能在模拟器上面运行使用)所以需要合并为通用版本

命令行语句:sudo lipo -create (此处请填写真机JPushPlugin文件路径) (此处填写模拟器JPushPlugin文件路径) -output 自定义合成文件存储路径(合成文件的名字JPushPlugin)

 

打开终端使用命令行 lipo -info 查看framework架构信息 

 

 

 

 

 

 

本文来自于:http://www.yoyo88.cn/study/uniapp/438.html

Powered by yoyo苏ICP备15045725号