守望者--AIR技术交流

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
热搜: ANE FlasCC 炼金术
查看: 2102|回复: 0

[IOS] 使用Xcode打包ANE流程

[复制链接]
  • TA的每日心情
    擦汗
    2018-4-10 15:18
  • 签到天数: 447 天

    [LV.9]以坛为家II

    1742

    主题

    2094

    帖子

    13万

    积分

    超级版主

    Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

    威望
    562
    贡献
    29
    金币
    51747
    钢镚
    1422

    开源英雄守望者

    发表于 2015-8-7 17:07:47 | 显示全部楼层 |阅读模式
    本帖最后由 破晓 于 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

    1. =================================================================================================  
    2. //  
    3. //  CopyEngine Framework  
    4. //  Copyright 2012 Eran. All Rights Reserved.  
    5. //  
    6. //  This program is free software. You can redistribute and/or modify it  
    7. //  in accordance with the terms of the accompanying license agreement.  
    8. //  
    9. // =================================================================================================  
    10.   
    11. package  
    12. {  
    13.     import flash.external.ExtensionContext;  
    14.   
    15.     public class IOSAudioUtils  
    16.     {  
    17.         private static const EXTENSION_ID:String = "eran.iosAudioUtils";  
    18.         private static var _instance:IOSAudioUtils;  
    19.   
    20.         public static function get instance():IOSAudioUtils  
    21.         {  
    22.             if (_instance == null)  
    23.             {  
    24.                 _instance = new IOSAudioUtils();  
    25.             }  
    26.             return _instance;  
    27.         }  
    28.   
    29.         private var mExtContext:ExtensionContext;  
    30.   
    31.         public function IOSAudioUtils()  
    32.         {  
    33.              mExtContext = ExtensionContext.createExtensionContext(EXTENSION_ID, null);  
    34.             if (mExtContext == null)  
    35.             {  
    36.                 trace("Error:: ExtensionContext is null");  
    37.             }  
    38.         }  
    39.   
    40.         //==================================  
    41.         //== Public Function  
    42.         //==================================  
    43.   
    44.         public function isSupported():Boolean  
    45.         {  
    46.             if (mExtContext != null)  
    47.             {  
    48.                 return mExtContext.call("isSupported");  
    49.             }  
    50.             return false;  
    51.         }  
    52.   
    53.   
    54.     }  
    55. }  
    复制代码
    6·将生成的swc文件复制出一份并改为.zip后缀,解压缩得到对应的library.swf将 xcode编译得到的.a文件,AS生成的swc文件,解压缩得到的library.swf文件一同放到一个文件夹下同时创建extension.xml文件


    7·在命令行下,将目录CD到 这些文件所在的目录内,然后执行ANE打包命令
    1. /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,然后运行看效果
    1. package  
    2. {  
    3.   
    4.     import flash.display.Sprite;  
    5.     import flash.text.TextField;  
    6.   
    7.     public class AudioUtilsDemo extends Sprite  
    8.     {  
    9.         public function AudioUtilsDemo()  
    10.         {  
    11.             var textField:TextField = new TextField();  
    12.             textField.text = "Hello, World";  
    13.             addChild(textField);  
    14.   
    15.             trace("Is Support is : " + IOSAudioUtils.instance.isSupported());  
    16.   
    17.         }  
    18.     }  
    19. }  
    复制代码
    上真机,如果一切正常则显示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

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    守望者AIR技术交流社区(www.airmyth.com)
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    
    关闭

    站长推荐上一条 /4 下一条

    QQ|手机版|Archiver|网站地图|小黑屋|守望者 ( 京ICP备14061876号

    GMT+8, 2019-10-15 02:47 , Processed in 0.044971 second(s), 32 queries .

    守望者AIR

    守望者AIR技术交流社区

    本站成立于 2014年12月31日

    快速回复 返回顶部 返回列表