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

复制代码

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

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

项目源文件下载在第四篇

[AIR] NativeExtension在IOS下的开发实例 --- IOS项目的创建 (一)的更多相关文章

  1. [AIR] NativeExtension在IOS下的开发实例 --- 新建项目测试ANE(四)

    来源:http://bbs.9ria.com/thread-102043-1-1.html 通过前面的努力,好了,我们终于得到了一个ANE文件了.下面我们开始新建一个Flex Mobile项目做一下测 ...

  2. [AIR] NativeExtension在IOS下的开发实例 --- Flex库项目的创建(二)

    来源:http://bbs.9ria.com/thread-102038-1-1.html 上一章,我已经介绍了如果创建IOS库文件,并定义了两个方法ShowIconBadageNumber和Init ...

  3. [AIR] NativeExtension在IOS下的开发实例 --- ANE文件的打包(三)

    来源:http://bbs.9ria.com/thread-102041-1-1.html 好了,前面的准备工作做的差不多了.此时我们应用有下面几个文件:extension.xml    CoolEx ...

  4. iOS下OpenCV开发用OC还是Swift

    本文为作者原创,转载请注明出处(http://www.cnblogs.com/mar-q/)by 负赑屃 其实标题中这个问题并不准确,准确的说法应该是iOS下的OpenCV开发是使用OC还是Swift ...

  5. iOS下OpenCV开发配置的两个常见问题(sign和link)

    本文为作者原创,转载请注明出处(http://www.cnblogs.com/mar-q/)by 负赑屃 先上可以运行官方推荐的<OpenCV for iOS samples>的demo链 ...

  6. Android studio 下 JNI 开发实例

    在AS中进行 NDK 开发之前,我们先来简单的介绍几个大家都容易搞懵的概念: 到底什么是JNI,什么是NDK? 何为“交叉编译”? 先看什么是 JNI?JNI 的全称就是 Java Native In ...

  7. AJ学IOS 之ipad开发qq空间项目横竖屏幕适配

    AJ分享,必须精品 一:效果图 先看效果 二:结构图 如图所示: 其中用到了UIView+extension分类 Masonry第三方框架做子控制器的适配 NYHomeViewController对应 ...

  8. iOS下的WiFi开发

    iOS下Wi-Fi开发需要添加依赖库SystemConfiguration.framework,在需要使用Wi-Fi信息的控制器下引入头文件#import <SystemConfiguratio ...

  9. 移动端底部fixed固定定位输入框ios下不兼容

    简短记录下最近开发移动端项目碰到的小坑,产品需求做一个售后对话页面,底部固定输入框,和微信对话差不多,但是在ios下,fixed失效,输入框被虚拟键盘挡住,在安卓下是正常的. 尝试过网上说的很多方法, ...

随机推荐

  1. 利用select/poll监听多个设备详解

    如果一个应用程序去处理多个设备,例如应用程序读取网路数据,按键,串口,一般能想到的有三种方法: 方法1:串行+阻塞的方式读取:while(1) { read(标准输入);read(网络);}缺点:每当 ...

  2. 【mybatis源码学习】mybatis的插件功能

    一.mybatis的插件功能可拦截的目标 org.apache.ibatis.executor.parameter.ParameterHandler org.apache.ibatis.executo ...

  3. 使用PLSQL导入excel数据至oracle数据库

    https://blog.csdn.net/qq_42909551/article/details/82108754 https://jingyan.baidu.com/album/14bd256e2 ...

  4. 026_如何在MAC下输入主要国家货币符号?

    由于出国旅游啥的经常会记录一些东西,不避免的会遇到各种货币符号 一. 人民币: ¥(sogo输入法切换到中文模式,然后"shift键 + 4"即可) 美元: $(sogo输入法切换 ...

  5. JMeter压测“java.net.SocketException: Socket closed”解决方法 - Andrea-Pirlo

    报错详情: 引起 java.net.SocketException: Socket closed 错误的原因通常是 未设置连接的超时时间. 解决方法: 该问题可以尝试通过以下方法解决. 如果在 HTT ...

  6. Python - Django - form 组件内置的正则校验器

    app01/models.py: from django.db import models class UserInfo(models.Model): username = models.CharFi ...

  7. [LeetCode] 242. Valid Anagram 验证变位词

    Given two strings s and t , write a function to determine if t is an anagram of s. Example 1: Input: ...

  8. Jenkins - 安装并启动Jenkins

    1 - 关于Jenkins 构建流水线(build pipeline)工具Jenkins可以轻松地定义和管理各种各样的操作(构建.测试等),并将这些操作像管道pipe一样自由地进行组合,从而自动.流畅 ...

  9. OpenJudge 4152 最佳加法表达式

    总时间限制: 1000ms 内存限制: 65536kB 描述 给定n个1到9的数字,要求在数字之间摆放m个加号(加号两边必须有数字),使得所得到的加法表达式的值最小,并输出该值.例如,在1234中摆放 ...

  10. POJ 1014 Dividing(入门例题一)

    Time Limit: 1000MS Memory Limit: 10000K Total Submissions: Accepted: Description Marsha and Bill own ...