当前位置: 首页 > news >正文

[AIR] NativeExtension在IOS下的开发实例 --- IOS项目的创建 (一)

来源:http://bbs.9ria.com/thread-102037-1-1.html

最近看到本版块的很多关于NativeExtension的应用。但是都是在Android下面的应用。也有很多朋友在线上问我这个问题,今天晚上特写了一篇NativeExtension在IOS的应用,首先,我们做准备工作,下载AIR3.0及其SDK,当然我们也可以下载Flash Builder 4.6的Prelease版本,4.6可以直接添加ANE文件,进行最后的打包Ipa工作。省了最后的命令行工作,对新手来说,建议采用Flash Builder 4.6.,下载地址论坛里的兄弟贡献出来了,http://bbs.9ria.com/thread-100284-1-1.html 

下面开始制作ANE文件,

1,启动Xcode,在IOS-》Frameworkd&Library下面,创建一个Cocoa Touch Static Library的项目(我们暂时将项目取名为:CoolExpLibANEIOS)。
2,OK,创建好之后,从你下载的SDK目录下,找到Include文件夹,找到里面的FlashRuntimeExtensions.h,通过项目添加FlashRuntimeExtensions.h文件
3,新建一个Object-C Class文件,此时会产生一个.h一个.m的文件,此时可以把.h文件删除,留一个.m的文件就行了。在这里我们暂定这个M的文件叫CoolExpLibANE.m文件。
4,下面是该文件的内容:我这里定义了两个方法供测试用,一个叫ShowIconBadageNumber,另外一个叫InitNativeCode。其他的代码都是必需的。

  1. #import "FlashRuntimeExtensions.h"
  2. #import <AudioToolbox/AudioServices.h>
  3. #import <UIKit/UIKit.h>
  4. FREObject ShowIconBadageNumber(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[]) {
  5.     int32_t t;
  6.     FREGetObjectAsInt32(argv[0], &t);
  7.     
  8.     [[UIApplication sharedApplication] setApplicationIconBadgeNumber:t];
  9.         return argv[0];
  10. }
  11. // InitNativeCode()
  12. //
  13. // An InitNativeCode function is necessary in the Android implementation of this extension.
  14. // Therefore, an analogous function is necessary in the iOS implementation to make
  15. // the ActionScript interface identical for all implementations.
  16. // However, the iOS implementation has nothing to do.
  17. //此方法参考Adobe的官方例子,Vibration的。具体不明白的可以看注释。
  18. FREObject InitNativeCode(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[]) {
  19.     
  20.     NSLog(@"Entering InitNativeCode()");
  21.     
  22.     // Nothing to do.
  23.     
  24.     NSLog(@"Exiting InitNativeCode()");
  25.     
  26.     return NULL;
  27. }
  28. // ContextInitializer()
  29. //
  30. // The context initializer is called when the runtime creates the extension context instance.
  31. void ContextInitializer(void* extData, const uint8_t* ctxType, FREContext ctx, 
  32.                                                 uint32_t* numFunctionsToTest, const FRENamedFunction** functionsToSet) {
  33.     
  34.     NSLog(@"Entering ContextInitializer()");
  35.     
  36.         *numFunctionsToTest = 2;
  37.         //这地方 ,如果是两个方法有两个2,如果是三个方法就是3了。当然你可以自己看着定义了。
  38.         FRENamedFunction* func = (FRENamedFunction*) malloc(sizeof(FRENamedFunction) * 2);
  39.         
  40.    //这地方定义方法名
  41.         //Just for consistency with Android
  42.         func[0].name = (const uint8_t*) "initNativeCode";
  43.         func[0].functionData = NULL;
  44.         func[0].function = &InitNativeCode;
  45.     
  46.     //这地方定义方法名
  47.     func[1].name = (const uint8_t*) "ShowIconBadageNumber";
  48.         func[1].functionData = NULL;
  49.     func[1].function = &ShowIconBadageNumber;
  50.         
  51.         *functionsToSet = func;
  52.     
  53.     NSLog(@"Exiting ContextInitializer()");
  54.     
  55. }
  56. // ContextFinalizer()
  57. //
  58. // The context finalizer is called when the extension's ActionScript code
  59. // calls the ExtensionContext instance's dispose() method.
  60. // If the AIR runtime garbage collector disposes of the ExtensionContext instance, the runtime also calls
  61. // ContextFinalizer().
  62. void ContextFinalizer(FREContext ctx) {
  63.     
  64.     NSLog(@"Entering ContextFinalizer()");
  65.     
  66.     // Nothing to clean up.
  67.     
  68.     NSLog(@"Exiting ContextFinalizer()");
  69.     
  70.         return;
  71. }
  72. // ExtInitializer()
  73. //
  74. // The extension initializer is called the first time the ActionScript side of the extension
  75. // calls ExtensionContext.createExtensionContext() for any context.
  76. void ExtInitializer(void** extDataToSet, FREContextInitializer* ctxInitializerToSet, 
  77.                     FREContextFinalizer* ctxFinalizerToSet) {
  78.     
  79.     NSLog(@"Entering ExtInitializer()");
  80.     
  81.     *extDataToSet = NULL;
  82.     *ctxInitializerToSet = &ContextInitializer;
  83.     *ctxFinalizerToSet = &ContextFinalizer;
  84.     
  85.     NSLog(@"Exiting ExtInitializer()");
  86. }
  87. // ExtFinalizer()
  88. //
  89. // The extension finalizer is called when the runtime unloads the extension. However, it is not always called.
  90. void ExtFinalizer(void* extData) {
  91.     
  92.     NSLog(@"Entering ExtFinalizer()");
  93.     
  94.     // Nothing to clean up.
  95.     
  96.     NSLog(@"Exiting ExtFinalizer()");
  97.     return;
  98. }
复制代码

5,Build项目,会在项目文件夹Products生成一个.a 的文件,复制出来,我们在打包ANE的时候要用。

好了。IOS项目创建完毕。下一篇介绍如果创建ActionScript Library。

项目源文件下载在第四篇

转载于:https://www.cnblogs.com/sunminmin/p/3823852.html

相关文章:

  • Java设计模式——单例模式(创建型模式)
  • Android高德地图贴合图片完成手绘地图展示
  • 使用ServletContext读取properties配置文件
  • java程序员必备的15个框架
  • 做还是不做,是一个问题
  • java springboot b2b2c shop 多用户商城系统源码-Spring Cloud Hystrix依赖隔离
  • 谨记一次问题排查经历
  • Framework7开发H5App如何禁止回退离开首页
  • ListT对元素的查找。
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • 关于CAD的开发思路
  • 七彩视界
  • centos7使用kubeadm安装k8s集群
  • SQL Profile 总结(一)
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • ES6指北【2】—— 箭头函数
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • 3.7、@ResponseBody 和 @RestController
  • AngularJS指令开发(1)——参数详解
  • ESLint简单操作
  • Laravel 实践之路: 数据库迁移与数据填充
  • rc-form之最单纯情况
  • select2 取值 遍历 设置默认值
  • 从零开始学习部署
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 基于webpack 的 vue 多页架构
  • 记录一下第一次使用npm
  • 精彩代码 vue.js
  • 看域名解析域名安全对SEO的影响
  • 跨域
  • 力扣(LeetCode)56
  • 项目管理碎碎念系列之一:干系人管理
  • 硬币翻转问题,区间操作
  • 从如何停掉 Promise 链说起
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • ​比特币大跌的 2 个原因
  • #Ubuntu(修改root信息)
  • (floyd+补集) poj 3275
  • (分布式缓存)Redis分片集群
  • (附源码)计算机毕业设计ssm电影分享网站
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
  • .net core 3.0 linux,.NET Core 3.0 的新增功能
  • .NET Core 实现 Redis 批量查询指定格式的Key
  • .net 获取url的方法
  • .skip() 和 .only() 的使用
  • /etc/skel 目录作用
  • ??在JSP中,java和JavaScript如何交互?
  • @ConfigurationProperties注解对数据的自动封装
  • @test注解_Spring 自定义注解你了解过吗?
  • @vue/cli 3.x+引入jQuery
  • @开发者,一文搞懂什么是 C# 计时器!
  • [BJDCTF2020]The mystery of ip1
  • [C++][数据结构][算法]单链式结构的深拷贝