[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。其他的代码都是必需的。
- #import "FlashRuntimeExtensions.h"
- #import <AudioToolbox/AudioServices.h>
- #import <UIKit/UIKit.h>
- FREObject ShowIconBadageNumber(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[]) {
- int32_t t;
- FREGetObjectAsInt32(argv[0], &t);
- [[UIApplication sharedApplication] setApplicationIconBadgeNumber:t];
- return argv[0];
- }
- // InitNativeCode()
- //
- // An InitNativeCode function is necessary in the Android implementation of this extension.
- // Therefore, an analogous function is necessary in the iOS implementation to make
- // the ActionScript interface identical for all implementations.
- // However, the iOS implementation has nothing to do.
- //此方法参考Adobe的官方例子,Vibration的。具体不明白的可以看注释。
- FREObject InitNativeCode(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[]) {
- NSLog(@"Entering InitNativeCode()");
- // Nothing to do.
- NSLog(@"Exiting InitNativeCode()");
- return NULL;
- }
- // ContextInitializer()
- //
- // The context initializer is called when the runtime creates the extension context instance.
- void ContextInitializer(void* extData, const uint8_t* ctxType, FREContext ctx,
- uint32_t* numFunctionsToTest, const FRENamedFunction** functionsToSet) {
- NSLog(@"Entering ContextInitializer()");
- *numFunctionsToTest = 2;
- //这地方 ,如果是两个方法有两个2,如果是三个方法就是3了。当然你可以自己看着定义了。
- FRENamedFunction* func = (FRENamedFunction*) malloc(sizeof(FRENamedFunction) * 2);
- //这地方定义方法名
- //Just for consistency with Android
- func[0].name = (const uint8_t*) "initNativeCode";
- func[0].functionData = NULL;
- func[0].function = &InitNativeCode;
- //这地方定义方法名
- func[1].name = (const uint8_t*) "ShowIconBadageNumber";
- func[1].functionData = NULL;
- func[1].function = &ShowIconBadageNumber;
- *functionsToSet = func;
- NSLog(@"Exiting ContextInitializer()");
- }
- // ContextFinalizer()
- //
- // The context finalizer is called when the extension's ActionScript code
- // calls the ExtensionContext instance's dispose() method.
- // If the AIR runtime garbage collector disposes of the ExtensionContext instance, the runtime also calls
- // ContextFinalizer().
- void ContextFinalizer(FREContext ctx) {
- NSLog(@"Entering ContextFinalizer()");
- // Nothing to clean up.
- NSLog(@"Exiting ContextFinalizer()");
- return;
- }
- // ExtInitializer()
- //
- // The extension initializer is called the first time the ActionScript side of the extension
- // calls ExtensionContext.createExtensionContext() for any context.
- void ExtInitializer(void** extDataToSet, FREContextInitializer* ctxInitializerToSet,
- FREContextFinalizer* ctxFinalizerToSet) {
- NSLog(@"Entering ExtInitializer()");
- *extDataToSet = NULL;
- *ctxInitializerToSet = &ContextInitializer;
- *ctxFinalizerToSet = &ContextFinalizer;
- NSLog(@"Exiting ExtInitializer()");
- }
- // ExtFinalizer()
- //
- // The extension finalizer is called when the runtime unloads the extension. However, it is not always called.
- void ExtFinalizer(void* extData) {
- NSLog(@"Entering ExtFinalizer()");
- // Nothing to clean up.
- NSLog(@"Exiting ExtFinalizer()");
- return;
- }
复制代码
5,Build项目,会在项目文件夹Products生成一个.a 的文件,复制出来,我们在打包ANE的时候要用。
好了。IOS项目创建完毕。下一篇介绍如果创建ActionScript Library。
项目源文件下载在第四篇
[AIR] NativeExtension在IOS下的开发实例 --- IOS项目的创建 (一)的更多相关文章
- [AIR] NativeExtension在IOS下的开发实例 --- 新建项目测试ANE(四)
来源:http://bbs.9ria.com/thread-102043-1-1.html 通过前面的努力,好了,我们终于得到了一个ANE文件了.下面我们开始新建一个Flex Mobile项目做一下测 ...
- [AIR] NativeExtension在IOS下的开发实例 --- Flex库项目的创建(二)
来源:http://bbs.9ria.com/thread-102038-1-1.html 上一章,我已经介绍了如果创建IOS库文件,并定义了两个方法ShowIconBadageNumber和Init ...
- [AIR] NativeExtension在IOS下的开发实例 --- ANE文件的打包(三)
来源:http://bbs.9ria.com/thread-102041-1-1.html 好了,前面的准备工作做的差不多了.此时我们应用有下面几个文件:extension.xml CoolEx ...
- iOS下OpenCV开发用OC还是Swift
本文为作者原创,转载请注明出处(http://www.cnblogs.com/mar-q/)by 负赑屃 其实标题中这个问题并不准确,准确的说法应该是iOS下的OpenCV开发是使用OC还是Swift ...
- iOS下OpenCV开发配置的两个常见问题(sign和link)
本文为作者原创,转载请注明出处(http://www.cnblogs.com/mar-q/)by 负赑屃 先上可以运行官方推荐的<OpenCV for iOS samples>的demo链 ...
- Android studio 下 JNI 开发实例
在AS中进行 NDK 开发之前,我们先来简单的介绍几个大家都容易搞懵的概念: 到底什么是JNI,什么是NDK? 何为“交叉编译”? 先看什么是 JNI?JNI 的全称就是 Java Native In ...
- AJ学IOS 之ipad开发qq空间项目横竖屏幕适配
AJ分享,必须精品 一:效果图 先看效果 二:结构图 如图所示: 其中用到了UIView+extension分类 Masonry第三方框架做子控制器的适配 NYHomeViewController对应 ...
- iOS下的WiFi开发
iOS下Wi-Fi开发需要添加依赖库SystemConfiguration.framework,在需要使用Wi-Fi信息的控制器下引入头文件#import <SystemConfiguratio ...
- 移动端底部fixed固定定位输入框ios下不兼容
简短记录下最近开发移动端项目碰到的小坑,产品需求做一个售后对话页面,底部固定输入框,和微信对话差不多,但是在ios下,fixed失效,输入框被虚拟键盘挡住,在安卓下是正常的. 尝试过网上说的很多方法, ...
随机推荐
- MySQL Group By 实例讲解(一)
MySQL Group By 实例讲解 group by语法可以根据给定数据列的每个成员对查询结果进行分组统计,最终得到一个分组汇总表. SELECT子句中的列名必须为分组列或列函数.列函数对于GRO ...
- springboot自动装配redis在pool下偶尔出现连接异常的问题
jedis pool的配置其实是采用 org.apache.commons.pool2.impl.GenericObjectPoolConfig类的配置项. jedis 2.9版本代码如下: pack ...
- Spark程序进行单元测试-使用scala
Spark 中进行一些单元测试技巧:最近刚写了一点Spark上的单元测试,大概整理了一些 rdd测试 spark程序一般从集群中读取数据然后通过rdd进行转换,这其中涉及到集群,每次修改bug,上传到 ...
- Visual Studio 2017 vcvarsall.bat 环境配置对应关系
博客参考:https://chenzehe.iteye.com/blog/1703429 安装Visual Studio 2017之后,vcvarsall.bat ,vcvars32.bat,vcva ...
- [LeetCode] 686. Repeated String Match 重复字符串匹配
Given two strings A and B, find the minimum number of times A has to be repeated such that B is a su ...
- Java之使用IDE
IDE是集成开发环境:Integrated Development Environment的缩写. 使用IDE的好处在于按,可以把编写代码.组织项目.编译.运行.调试等放到一个环境中运行,能极大地提高 ...
- golang 基于channel封装资源池(可用于封装redis、mq连接池)
package pool import ( "errors" "io" "sync" "time" ) var ( Er ...
- python的进修之路
PYTHON目录篇 本篇主要在个人学习python中的一些总结性的总线,包括python的基础,python的基础进阶,除了帮助和我一样学习python的同学,也是对自己的一种要求! python基础 ...
- GIT 基础 &本地服务器搭建
Git是一款免费.开源的分布式版本控制系统.众所周知的Github便是基于Git的开源代码库以及版本控制系统,由于其远程托管服务仅对开源免费,所以搭建本地Git服务器也是个较好的选择,本文将对此进行详 ...
- 嵌入式02 STM32 实验04跑马灯
开学STM32 跑马灯的实验主要就是了解GPIO口的配置及使用,我这里是使用库函数进行编程,主要需要设置以下两方面: 1.使能需要使用的IO口的时钟,一共有A.B.C.D.E.F.G七组IO口 2.初 ...