本帖最后由 破晓 于 2015-8-7 17:09 编辑
基本的Xcode工程到ANE的打包过程
1· 创建Cocoa Touch Static Library
Project的 Name 及 Organization信息可以随意填写,这个和最后ANE使用的extension.xml中定义的信息无关
2·将Xcode的工程改为Release模式
3·将工程编译环境改为设备而非模拟器
4·按ANE Template的类定义方式更新文件并导入FlashRuntimeExtensions.h将.h及.m文件中的xxxExtInitializer/xxxExtFinalizer 替换成项目用到的名称. 比如 demoExtInitializer/demoExtFinalizer
这些名字将与extension.xml中的名称对应
5· 创建对应的SWC
- =================================================================================================
- //
- // CopyEngine Framework
- // Copyright 2012 Eran. All Rights Reserved.
- //
- // This program is free software. You can redistribute and/or modify it
- // in accordance with the terms of the accompanying license agreement.
- //
- // =================================================================================================
-
- package
- {
- import flash.external.ExtensionContext;
-
- public class IOSAudioUtils
- {
- private static const EXTENSION_ID:String = "eran.iosAudioUtils";
- private static var _instance:IOSAudioUtils;
-
- public static function get instance():IOSAudioUtils
- {
- if (_instance == null)
- {
- _instance = new IOSAudioUtils();
- }
- return _instance;
- }
-
- private var mExtContext:ExtensionContext;
-
- public function IOSAudioUtils()
- {
- mExtContext = ExtensionContext.createExtensionContext(EXTENSION_ID, null);
- if (mExtContext == null)
- {
- trace("Error:: ExtensionContext is null");
- }
- }
-
- //==================================
- //== Public Function
- //==================================
-
- public function isSupported():Boolean
- {
- if (mExtContext != null)
- {
- return mExtContext.call("isSupported");
- }
- return false;
- }
-
-
- }
- }
复制代码 6·将生成的swc文件复制出一份并改为.zip后缀,解压缩得到对应的library.swf将 xcode编译得到的.a文件,AS生成的swc文件,解压缩得到的library.swf文件一同放到一个文件夹下同时创建extension.xml文件
7·在命令行下,将目录CD到 这些文件所在的目录内,然后执行ANE打包命令- /Users/eran/Documents/WorkGround/DeveloperTools/AIR16_SDK_MAC/bin/adt -package -target ane IOSAudioUtils.ane extension.xml -swc IOSAudioUtilsANE.swc -platform default library.swf -platform iPhone-ARM libIOSAudioUtils.a library.swf
复制代码 其中 /Users/eran/Documents/WorkGround/DeveloperTools/AIR16_SDK_MAC/bin/adt 是ADT文件所在的目录
8·生成测试项目,引用生成后的ANE,然后运行看效果- package
- {
-
- import flash.display.Sprite;
- import flash.text.TextField;
-
- public class AudioUtilsDemo extends Sprite
- {
- public function AudioUtilsDemo()
- {
- var textField:TextField = new TextField();
- textField.text = "Hello, World";
- addChild(textField);
-
- trace("Is Support is : " + IOSAudioUtils.instance.isSupported());
-
- }
- }
- }
复制代码 上真机,如果一切正常则显示HelloWorld 并且 trace返回值为 [trace] Is Support is : true此时,ANE的大体环境已经搭建完成.
===============================================================================
如果编译的项目引用了其他静态库,如何打包?
1· 将需要引用的静态库文件(*.a)文件拖入项目中
2· 确保此时项目的Build Phases的 Link Binart With Libraries中有新加入的点a文件
3· 更改Target -> Build Setting -> Header Search Path 为 recursive
Q&A
'autorelease' is unavailable: not available in automatic reference counting mode
因为旧的项目没有使用ARC(Automatic Reference Counting),Xcode新项目默认使用,所以要使用旧项目进行重新打包时候 需要更改ARC为No
ANE文件打包ipa时候报错 Undefined symbols for architecture arm64
Error: Apple App Store allows only universal applications. This ANE must have a universal iOS binary. Please change build settings in Xcode project to "Standard Architecture" to create universal library.
(错误!)网上的教程都是让你修改Build Active Architercuter Only 为Yes, 或者修改Architectures下的arm64 这个都是在苹果没有强制64位之前可以尝试的方式, 如果你更改了 Build Active Architercuter Only 为Yes 则打包点a文件时候不会报错,但是编译ANE时候会提示上面那句话,告诉你不是64位的包,如果不改,可以正常打包ANE,不过ANE打包到ipa时候会报错,提示没有定义的symbol for arm64.
这个其实实质的原因是因为你使用的其他依赖库(其他的点a文件)不是arm64的, 你需要重新编译其他的依赖库(也可以从网上去找)
Unknown type name 'NSMutableData'
Unknown type name 'NSArray'
Unknown type name 'NSData'
使用网上的lib库时候 有时候没有 #import <Foundation/Foundation.h> , 所以导致一系列的NS组件报错,导入即可
本文来自:http://blog.csdn.net/iamzealotwang/article/details/43016971
|