ios – 如何创建一个本机显示浮动窗口的ANE

前端之家收集整理的这篇文章主要介绍了ios – 如何创建一个本机显示浮动窗口的ANE前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如何在 Xcode中创建本机窗口并将其与Mobile Flex应用程序集成.本机窗口应该与StageWebView组件类似,其中本机内容浮动在Flex应用程序的其余部分的矩形区域中.

解决方法

作为一名灵活的程序员,这是一个繁琐的过程,花了我几个星期才弄明白.希望这将有助于其他一些Xcode新手.

首先,您必须对Objective-C和Xcode有基本的了解.您应该能够创建一个简单的Hello World Xcode程序.一旦你知道如何做到这一点,你会发现对于每个可视窗口,你通常会有一个xib文件,一个头文件和一个实现文件.我发现开始编写一个普通的Xcode应用程序更容易,然后一旦它正常工作并且看起来应该如此,你就可以手动将这3个文件(当然还有辅助文件)拉到你的Xcode静态库项目中.所以,继续前进,我将假设你已经过了这一步.以下是有关如何使用ANE集成Xcode和Flex移动设备的一步一步说明:

>打开XCode.创建新项目. iOS – >可可触摸静态库.我打电话给我的项目FWAne
>删除FWAne.h文件.用以下内容替换FWAne.m文件内容

  1.  
  2. '#import "FloatingWindow.h"
  3. '#import "FlashRuntimeExtensions.h"
  4.  
  5. FREObject openFloatingWindow(FREContext ctx,void* funcData,uint32_t argc,FREObject argv[] )
  6. {
  7. uint32_t parm0Length,parm1Length,parm2Length,parm3Length,parm4Length,parm5Length,parm6Length,parm7Length,parm8Length,parm9Length,parm10Length,parm11Length,parm12Length,parm13Length;
  8. const uint8_t *uparm0,*uparm1,*uparm2,*uparm3,*uparm4,*uparm5,*uparm6,*uparm7,*uparm8,*uparm9,*uparm10,*uparm11,*uparm12,*uparm13;
  9. FREGetObjectAsUTF8(argv[0],&parm0Length,&uparm0);
  10. NSString* parm0 = [NSString stringWithUTF8String:(char*)uparm0];
  11. // FREGetObjectAsUTF8(argv[1],&parm1Length,&uparm1);
  12. // NSString* parm1 = [NSString stringWithUTF8String:(char*)uparm1];
  13. // FREGetObjectAsUTF8(argv[2],&parm2Length,&uparm2);
  14. // NSString* parm2 = [NSString stringWithUTF8String:(char*)uparm2];
  15. // FREGetObjectAsUTF8(argv[3],&parm3Length,&uparm3);
  16. // NSString* parm3 = [NSString stringWithUTF8String:(char*)uparm3];
  17. // FREGetObjectAsUTF8(argv[4],&parm4Length,&uparm4);
  18. // NSString* parm4 = [NSString stringWithUTF8String:(char*)uparm4];
  19. // FREGetObjectAsUTF8(argv[5],&parm5Length,&uparm5);
  20. // NSString* parm5 = [NSString stringWithUTF8String:(char*)uparm5];
  21. // FREGetObjectAsUTF8(argv[6],&parm6Length,&uparm6);
  22. // NSString* parm6 = [NSString stringWithUTF8String:(char*)uparm6];
  23. // FREGetObjectAsUTF8(argv[7],&parm7Length,&uparm7);
  24. // NSString* parm7 = [NSString stringWithUTF8String:(char*)uparm7];
  25. // FREGetObjectAsUTF8(argv[8],&parm8Length,&uparm8);
  26. // NSString* parm8 = [NSString stringWithUTF8String:(char*)uparm8];
  27. // FREGetObjectAsUTF8(argv[9],&parm9Length,&uparm9);
  28. // NSString* parm9 = [NSString stringWithUTF8String:(char*)uparm9];
  29. // FREGetObjectAsUTF8(argv[10],&parm10Length,&uparm10);
  30. // NSString* parm10 = [NSString stringWithUTF8String:(char*)uparm10];
  31. // FREGetObjectAsUTF8(argv[11],&parm11Length,&uparm11);
  32. // NSString* parm11 = [NSString stringWithUTF8String:(char*)uparm11];
  33. // FREGetObjectAsUTF8(argv[12],&parm12Length,&uparm12);
  34. // NSString* parm12 = [NSString stringWithUTF8String:(char*)uparm12];
  35. // FREGetObjectAsUTF8(argv[13],&parm13Length,&uparm13);
  36. // NSString* parm13 = [NSString stringWithUTF8String:(char*)uparm13];
  37.  
  38. }

  39. // ContextFinalizer().
    void ContextFinalizer(FREContext ctx)
    {
    NSLog(@ ContextFinalizer”);
    //清理这里
    返回;
    }

  40. // ContextInitializer()
    void ContextInitializer(void * extData,const uint8_t * ctxType,FREContext ctx,
    uint32_t * numFunctionsToTest,const FRENamedFunction ** functionsToSet)
    {
    NSLog(@ ContextInitializer”);
    * numFunctionsToTest = 1;

  41.  
  42. }

  43. // ExtInitializer()
    void ExtInitializer(void ** extDataToSet,FREContextInitializer * ctxInitializerToSet,
    FREContextFinalizer * ctxFinalizerToSet)
    {
    NSLog(@ ExtInitializer”);
    * extDataToSet = NULL;
    * ctxInitializerToSet =& ContextInitializer;
    * ctxFinalizerToSet =& ContextFinalizer;
    }

  44. // ExtFinalizer()
    void ExtFinalizer(void * extData){
    NSLog(@ ExtFinalizer”);
    //在这里清理
    返回;
    }

  45. >将FlashRuntimeExtensions.h添加Xcode项目中.该文件存在于/ Applications / Adob​​e Flash Builder 4.6 / sdks / 4.6.0 / include文件夹下
    >将FloatingWindow.hFloatingWindow.m(或任何与xib所有者关联的文件)添加Xcode项目中.
    >您可能还需要将UIKit框架添加xcode项目中(/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/System/Library/Frameworks/UIKit.framework)
    >转到项目构建设置并修改以下标志(如果不这样做会导致分段错误.请花一点时间来解决这个问题.希望这是我更改的所有标志):

  46. >目标设备系列= iPhone / iPad
    > Mach-O Type =静态库
    >其他链接器标志= -OjbC -v
    >展开Info.plist文件中的构建设置=否
    >启用与共享库的链接=否

  47. >构建Xcode静态库
    >现在,转到FlashBuilder并创建一个Flex库项目.请务必包含Adobe Air
    >创建将使用ExtensionContextFlex代码连接到Xcode代码的类,如下所示:

  48.  
  49. package fwane
  50. {
  51.     import flash.events.EventDispatcher;
  52.     import flash.events.StatusEvent;
  53.     import flash.external.ExtensionContext;
  54. }

  55. >构建FWAne swc
    >接下来,您将需要一个构建脚本来编译您的ANE.这是我的build.sh脚本:

  56. export XLIB="/Users/christo.smal/Library/Developer/Xcode/DerivedData/wherever-lib.a"
  57. export CERT="/wherever/if/you/want/to/sign/ane.p12"
  58. export FLEXLIBPATH="../Path/of/flex/library/project"
  59. export XIBPATH="/Path/of/where/xib/files/are"
  60. export SWCFNAME="FWAne.swc"
  61. export ANEFNAME="FWAne.ane"
  62. ls -la $XLIB
  63. echo Copying files ...
  64.  rm -rf debug/*
  65. cp $FLEXLIBPATH/src/extension.xml .
  66. cp $FLEXLIBPATH/bin/$SWCFNAME .
  67.  cp $XLIB ./debug
  68. '# copy resource files such as images to debug folder
  69. cp /path/to/my/images/referenced/from/xcode/*.png ./debug
  70. echo Compiling xib''s
  71. cp $XIBPATH/*.xib ./debug
  72. cp /wherever/FloatingWindow.xib ./debug
  73. /Developer/usr/bin/ibtool --errors --warnings --notices --output-format human-readable-text --compile debug/FloatingWindow.nib debug/FloatingWindow.xib --sdk /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk
  74. rm -rf debug/*.xib
  75. echo Extracting library.swc ...
  76. cp $SWCFNAME kak
  77. cd kak
  78. unzip -xo $SWCFNAME
  79. cp -X library.swf ../debug
  80. cd ..
  81. echo Copying some more files ...
  82. rm -rf debug/*.ane
  83. cp extension.xml debug
  84. echo Building ANE ... 
  85. '#  -package -target ane / extension.xml -swc  -platform  -C  .
  86. /Applications/Adobe\ Flash\ Builder\ 4.6/sdks/4.6.0/bin/adt -package -target ane debug/unsigned.ane extension.xml -swc $SWCFNAME -platform iPhone-ARM -platformoptions ios-platformoptions.xml -C debug .
  87. echo Signing ANE ...
  88. '#/Applications/Adobe\ Flash\ Builder\ 4.6/sdks/4.6.0/bin/adt -sign -storetype pkcs12 -keystore $CERT -storepass password -target ane debug/unsigned.ane $ANEFNAME
  89. cp debug/unsigned.ane $ANEFNAME
  90. echo done
  91. >重要的是要注意我的构建脚本:将xib编译为nib,然后将这些nib与其他资源文件(例如图像)一起包含在ANE中.请记住,静态库不能包含资源文件.
    >您还需要一个ios-platformoptions.xml文件.这包括您需要的所有框架.您还可以在此处添加任何其他第三方库及其搜索路径:

  92. <platform xmlns="http://ns.adobe.com/air/extension/3.1">
  93.     <sdkVersion>5.0</sdkVersion>
  94.     <linkerOptions>
  95.         <option>-framework Foundation</option>
  96.         <option>-framework UIKit</option>
  97.         <option>-framework QuartzCore</option>
  98.         <option>-framework CoreGraphics</option>
  99.         <!--option>-lthirdparty</option>
  100.         <option>-L/searhPath/for/thirdlibrary</option-->
  101.     </linkerOptions>
  102. </platform>
  103. >现在,在FlashBuilder中,创建一个示例测试应用程序项目.转到项目属性.在Flex构建路径中,确保添加了ane.也在Flex Build Packaging下 - > Apple iOS - >在此处添加ANE的本机扩展并检查包.还要在原生扩展名下添加Apple iOS SDK文件夹.最后,检查扩展是否已添加到-app.xml文件中.
    >在FlashBuilder中,使用适当的打包设置在设备上创建调试配置.仔细检查是否包含和打包了本机扩展.清理项目并进行调试.如果一切顺利,将弹出“等待调试连接”窗口.在iPad上安装并启动应用程序.

  104. 希望这可以帮助

  105. C

    NSLog(@"Initializing delegate and window");
  106. id delegate = [[UIApplication sharedApplication] delegate];
  107. UIWindow *window = [delegate window];
  108. NSLog(@"Creating FloatingWindow");
  109. FloatingWindow* fw = [[FloatingWindow alloc] initWithNibName:@"FloatingWindow" bundle:nil];
  110. NSLog(@"Adding FloatingWindow");
  111. [window addSubview:fw.view];
  112. NSLog(@"Setting frame size");
  113. fw.view.frame = CGRectMake(100,100,200,200);
  114. NSLog(@"Done openFloatingWindow");
  115. return NULL;FRENamedFunction* func = (FRENamedFunction*) malloc(sizeof(FRENamedFunction) * 1);
  116. func[0].name = (const uint8_t*) "openFloatingWindow";
  117. func[0].functionData = NULL;
  118. func[0].function = &openFloatingWindow;
  119.  
  120. *functionsToSet = func;public class FWAne
  121. {
  122.  
  123. private static const EXTENSION_ID : String = "fwane.FWAne";
  124.  
  125. private var context : ExtensionContext;
  126.  
  127. public function FWAne()
  128. {
  129. context = ExtensionContext.createExtensionContext( EXTENSION_ID,null );
  130. if (context == null) {
  131. trace("WARNING: ExtensionContext cannot initialize");
  132. }
  133. }
  134.  
  135. public function openFloatingWeendow(fileName : String) : void {
  136. trace("Calling openFloatingWeendow");
  137. context.addEventListener( StatusEvent.STATUS,onAneWinHander );
  138. trace("Invoking native call");
  139. context.call( "openFloatingWindow",fileName);
  140. trace("Returning from openFloatingWeendow");
  141. }
  142.  
  143. private function onAneWinHander( event : StatusEvent ) : void
  144. {
  145. trace(event.level);
  146. }
  147.  
  148. }

猜你在找的iOS相关文章