如何在 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文件的内容:


'#import "FloatingWindow.h"
'#import "FlashRuntimeExtensions.h"

FREObject openFloatingWindow(FREContext ctx,void* funcData,uint32_t argc,FREObject argv[] )
{
    uint32_t parm0Length,parm1Length,parm2Length,parm3Length,parm4Length,parm5Length,parm6Length,parm7Length,parm8Length,parm9Length,parm10Length,parm11Length,parm12Length,parm13Length;
    const uint8_t *uparm0,*uparm1,*uparm2,*uparm3,*uparm4,*uparm5,*uparm6,*uparm7,*uparm8,*uparm9,*uparm10,*uparm11,*uparm12,*uparm13;
    FregetObjectAsUTF8(argv[0],&parm0Length,&uparm0);
    Nsstring* parm0 = [Nsstring stringWithUTF8String:(char*)uparm0];
    //    FregetObjectAsUTF8(argv[1],&parm1Length,&uparm1);
    //    Nsstring* parm1 = [Nsstring stringWithUTF8String:(char*)uparm1];
    //    FregetObjectAsUTF8(argv[2],&parm2Length,&uparm2);
    //    Nsstring* parm2 = [Nsstring stringWithUTF8String:(char*)uparm2];
    //    FregetObjectAsUTF8(argv[3],&parm3Length,&uparm3);
    //    Nsstring* parm3 = [Nsstring stringWithUTF8String:(char*)uparm3];
    //    FregetObjectAsUTF8(argv[4],&parm4Length,&uparm4);
    //    Nsstring* parm4 = [Nsstring stringWithUTF8String:(char*)uparm4];
    //    FregetObjectAsUTF8(argv[5],&parm5Length,&uparm5);
    //    Nsstring* parm5 = [Nsstring stringWithUTF8String:(char*)uparm5];
    //    FregetObjectAsUTF8(argv[6],&parm6Length,&uparm6);
    //    Nsstring* parm6 = [Nsstring stringWithUTF8String:(char*)uparm6];
    //    FregetObjectAsUTF8(argv[7],&parm7Length,&uparm7);
    //    Nsstring* parm7 = [Nsstring stringWithUTF8String:(char*)uparm7];
    //    FregetObjectAsUTF8(argv[8],&parm8Length,&uparm8);
    //    Nsstring* parm8 = [Nsstring stringWithUTF8String:(char*)uparm8];
    //    FregetObjectAsUTF8(argv[9],&parm9Length,&uparm9);
    //    Nsstring* parm9 = [Nsstring stringWithUTF8String:(char*)uparm9];
    //    FregetObjectAsUTF8(argv[10],&parm10Length,&uparm10);
    //    Nsstring* parm10 = [Nsstring stringWithUTF8String:(char*)uparm10];
    //    FregetObjectAsUTF8(argv[11],&parm11Length,&uparm11);
    //    Nsstring* parm11 = [Nsstring stringWithUTF8String:(char*)uparm11];
    //    FregetObjectAsUTF8(argv[12],&parm12Length,&uparm12);
    //    Nsstring* parm12 = [Nsstring stringWithUTF8String:(char*)uparm12];
    //    FregetObjectAsUTF8(argv[13],&parm13Length,&uparm13);
    //    Nsstring* parm13 = [Nsstring stringWithUTF8String:(char*)uparm13];


}

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

// Contextinitializer()
void Contextinitializer(void * extData,const uint8_t * ctxType,FREContext ctx,
uint32_t * numFunctionsToTest,const FRENamedFunction ** functionsToSet)
{
的NSLog(@ “Contextinitializer”);
* numFunctionsToTest = 1;


}

// Extinitializer()
void Extinitializer(void ** extDataToSet,FREContextinitializer * ctxInitializerToSet,
FREContextFinalizer * ctxFinalizerToSet)
{
的NSLog(@ “Extinitializer”);
* extDataToSet = NULL;
* ctxInitializerToSet =& Contextinitializer;
* ctxFinalizerToSet =& ContextFinalizer;
}

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

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

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

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

package fwane
{
    import flash.events.Eventdispatcher;
    import flash.events.StatusEvent;
    import flash.external.ExtensionContext;


}

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


export XLIB="/Users/christo.smal/Library/Developer/Xcode/DerivedData/wherever-lib.a"
export CERT="/wherever/if/you/want/to/sign/ane.p12"
export FLEXLIBPATH="../Path/of/flex/library/project"
export XIBPATH="/Path/of/where/xib/files/are"
export SWCFNAME="FWAne.swc"
export ANEFNAME="FWAne.ane"

ls -la $XLIB

echo copying files ...
 rm -rf debug/*
cp $FLEXLIBPATH/src/extension.xml .
cp $FLEXLIBPATH/bin/$SWCFNAME .
 cp $XLIB ./debug

'# copy resource files such as images to debug folder
cp /path/to/my/images/referenced/from/xcode/*.png ./debug

echo Compiling xib''s

cp $XIBPATH/*.xib ./debug
cp /wherever/FloatingWindow.xib ./debug

/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

rm -rf debug/*.xib


echo Extracting library.swc ...
cp $SWCFNAME kak
cd kak
unzip -xo $SWCFNAME
cp -X library.swf ../debug
cd ..

echo copying some more files ...
rm -rf debug/*.ane
cp extension.xml debug

echo Building ANE ... 
'#  -package -target ane / extension.xml -swc  -platform  -C  .
/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 .

echo Signing ANE ...
'#/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
cp debug/unsigned.ane $ANEFNAME

echo done

>重要的是要注意我的构建脚本:将xib编译为nib,然后将这些nib与其他资源文件(例如图像)一起包含在ANE中.请记住,静态库不能包含资源文件.
>您还需要一个ios-platformoptions.xml文件.这包括您需要的所有框架.您还可以在此处添加任何其他第三方库及其搜索路径:

<platform xmlns="http://ns.adobe.com/air/extension/3.1">
    <sdkVersion>5.0</sdkVersion>
    <linkerOptions>
        <option>-framework Foundation</option>
        <option>-framework UIKit</option>
        <option>-framework QuartzCore</option>
        <option>-framework CoreGraphics</option>
        <!--option>-lthirdparty</option>
        <option>-L/searhPath/for/thirdlibrary</option-->
    </linkerOptions>
</platform>

>现在,在FlashBuilder中,创建一个示例测试应用程序项目.转到项目属性.在Flex构建路径中,确保添加了ane.也在Flex Build Packaging下 - > Apple iOS - >在此处添加ANE的本机扩展并检查包.还要在原生扩展名下添加Apple iOS SDK文件夹.最后,检查扩展是否已添加到-app.xml文件中.
>在FlashBuilder中,使用适当的打包设置在设备上创建调试配置.仔细检查是否包含和打包了本机扩展.清理项目并进行调试.如果一切顺利,将弹出“等待调试连接”窗口.在iPad上安装并启动应用程序.

希望这可以帮助

C

NSLog(@"Initializing delegate and window"); id delegate = [[UIApplication sharedApplication] delegate]; UIWindow *window = [delegate window]; NSLog(@"Creating FloatingWindow"); FloatingWindow* fw = [[FloatingWindow alloc] initWithNibName:@"FloatingWindow" bundle:nil]; NSLog(@"Adding FloatingWindow"); [window addSubview:fw.view]; NSLog(@"Setting frame size"); fw.view.frame = CGRectMake(100,100,200,200); NSLog(@"Done openFloatingWindow"); return NULL;FRENamedFunction* func = (FRENamedFunction*) malloc(sizeof(FRENamedFunction) * 1); func[0].name = (const uint8_t*) "openFloatingWindow"; func[0].functionData = NULL; func[0].function = &openFloatingWindow; *functionsToSet = func;public class FWAne { private static const EXTENSION_ID : String = "fwane.FWAne"; private var context : ExtensionContext; public function FWAne() { context = ExtensionContext.createExtensionContext( EXTENSION_ID,null ); if (context == null) { trace("WARNING: ExtensionContext cannot initialize"); } } public function openFloatingWeendow(fileName : String) : void { trace("Calling openFloatingWeendow"); context.addEventListener( StatusEvent.STATUS,onAneWinHander ); trace("Invoking native call"); context.call( "openFloatingWindow",fileName); trace("Returning from openFloatingWeendow"); } private function onAneWinHander( event : StatusEvent ) : void { trace(event.level); } }

ios – 如何创建一个本机显示浮动窗口的ANE的更多相关文章

  1. Html5跳转到APP指定页面的实现

    这篇文章主要介绍了Html5跳转到APP指定页面的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  2. ios – Xcode找不到Alamofire,错误:没有这样的模块’Alamofire’

    我正在尝试按照github(https://github.com/Alamofire/Alamofire#cocoapods)指令将Alamofire包含在我的Swift项目中.我创建了一个新项目,导航到项目目录并运行此命令sudogeminstallcocoapods.然后我面临以下错误:搜索后我设法通过运行此命令安装cocoapodssudogeminstall-n/usr/local/bin

  3. ios – Xcode在发布时崩溃

    我正在开发iOS应用程序,我在应用程序中没有更改任何内容.但是在重新启动我的Mac时,XCode每次都会崩溃.不知道这是否重要,但我的聚光灯找不到任何应用程序当我打开取景器并使用快捷键cmdshiftH时我看到一个白色的窗户.Xcode不再启动并抛出此错误:我希望有一个人可以帮助我.这会导致与权限冲突吗?

  4. xcode找不到匹配的配置文件

    我有一个AdhociOS应用程序,它给了我“在xcode6中找不到匹配的配置文件”,我创建了一个Adhoc配置文件,下载它,双击它并在General–Identity下选择了一个团队.但我接着得到了那条消息,并尝试使用“修复问题”按钮没有帮助.在构建设置–供应配置文件–发布我有“自动”.任何人都可以帮助我,我完全迷失了……

  5. iOS:调试无法在XCode中运行

    我正在使用XCode4和iOSSDK4.3.我的调试工作正常,但现在我发现在设置断点时,应用暂停,但XCode不关注编辑器中的行.点击断点时也不会显示绿色箭头.我有一个在AppDelegate中分配的UINavigationController.当我在didFinishLaunchingWithOptions中设置断点时,一切都按预期工作:这是当一个断点暂停了mapViewController中的

  6. ios – 如何/是否在Xcode中制作通用故事板

    在Xcode中创建故事板文件时,您必须选择是否适用于iPhone或iPad.这意味着应始终将iPhone和iPadUI放入单独的故事板中.这是真的?我的应用程序有多个故事板.虽然Main.storyboard文件在iPhone和iPad之间存在很大差异,但其他故事板几乎完全相同.唯一的区别可能是推动iPhone与iPhone上的popover,可以通过编程方式处理.制作两个故事板似乎非常愚蠢和多余.因此,如果制作一个“通用”故事板,是否应该在Xcode中选择iPhone或iPad?

  7. ios – 比较两个版本号

    如何比较两个版本号字符串?例如:3.1.1和3.1.2.5.4现在我需要找出3.1.2.5.4是否高于3.1.1但我不知道如何做到这一点.有谁能够帮我?

  8. iOS:无法获取Caches目录的内容

    试图获取Caches目录的内容:路径是正确的,我可以在Finder中看到它存在并包含我的文件.directoryItems是nil,错误是我怎么了?解决方法你使用错误的路径.要为应用程序获取正确的缓存目录,请使用此:在cacheDirectory中,您将收到这样的字符串路径:整个代码:

  9. xcode – 如何通过LLDB命令行添加断点操作?

    如果你从Xcode编辑一个断点,有一个超级有用的选项,可以添加一个“Action”,以便在每次遇到断点时自动执行.如何从LLDB命令行添加此类操作?

  10. XCode:将故事板导出到图像

    我有一个小问题……

随机推荐

  1. iOS实现拖拽View跟随手指浮动效果

    这篇文章主要为大家详细介绍了iOS实现拖拽View跟随手指浮动,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  2. iOS – genstrings:无法连接到输出目录en.lproj

    使用我桌面上的项目文件夹,我启动终端输入:cd然后将我的项目文件夹拖到终端,它给了我路径.然后我将这行代码粘贴到终端中找.-name*.m|xargsgenstrings-oen.lproj我在终端中收到此错误消息:genstrings:无法连接到输出目录en.lproj它多次打印这行,然后说我的项目是一个目录的路径?没有.strings文件.对我做错了什么的想法?

  3. iOS 7 UIButtonBarItem图像没有色调

    如何确保按钮图标采用全局色调?解决方法只是想将其转换为根注释,以便为“回答”复选标记提供更好的上下文,并提供更好的格式.我能想出这个!

  4. ios – 在自定义相机层的AVFoundation中自动对焦和自动曝光

    为AVFoundation定制图层相机创建精确的自动对焦和曝光的最佳方法是什么?

  5. ios – Xcode找不到Alamofire,错误:没有这样的模块’Alamofire’

    我正在尝试按照github(https://github.com/Alamofire/Alamofire#cocoapods)指令将Alamofire包含在我的Swift项目中.我创建了一个新项目,导航到项目目录并运行此命令sudogeminstallcocoapods.然后我面临以下错误:搜索后我设法通过运行此命令安装cocoapodssudogeminstall-n/usr/local/bin

  6. ios – 在没有iPhone6s或更新的情况下测试ARKit

    我在决定下载Xcode9之前.我想玩新的框架–ARKit.我知道要用ARKit运行app我需要一个带有A9芯片或更新版本的设备.不幸的是我有一个较旧的.我的问题是已经下载了新Xcode的人.在我的情况下有可能运行ARKit应用程序吗?那个或其他任何模拟器?任何想法或我将不得不购买新设备?解决方法任何iOS11设备都可以使用ARKit,但是具有高质量AR体验的全球跟踪功能需要使用A9或更高版本处理器的设备.使用iOS11测试版更新您的设备是必要的.

  7. 将iOS应用移植到Android

    我们制作了一个具有2000个目标c类的退出大型iOS应用程序.我想知道有一个最佳实践指南将其移植到Android?此外,由于我们的应用程序大量使用UINavigation和UIView控制器,我想知道在Android上有类似的模型和实现.谢谢到目前为止,guenter解决方法老实说,我认为你正在计划的只是制作难以维护的糟糕代码.我意识到这听起来像很多工作,但从长远来看它会更容易,我只是将应用程序的概念“移植”到android并从头开始编写.

  8. ios – 在Swift中覆盖Objective C类方法

    我是Swift的初学者,我正在尝试在Swift项目中使用JSONModel.我想从JSONModel覆盖方法keyMapper,但我没有找到如何覆盖模型类中的Objective-C类方法.该方法的签名是:我怎样才能做到这一点?解决方法您可以像覆盖实例方法一样执行此操作,但使用class关键字除外:

  9. ios – 在WKWebView中获取链接URL

    我想在WKWebView中获取tapped链接的url.链接采用自定义格式,可触发应用中的某些操作.例如HTTP://我的网站/帮助#深层链接对讲.我这样使用KVO:这在第一次点击链接时效果很好.但是,如果我连续两次点击相同的链接,它将不报告链接点击.是否有解决方法来解决这个问题,以便我可以检测每个点击并获取链接?任何关于这个的指针都会很棒!解决方法像这样更改addobserver在observeValue函数中,您可以获得两个值

  10. ios – 在Swift的UIView中找到UILabel

    我正在尝试在我的UIViewControllers的超级视图中找到我的UILabels.这是我的代码:这是在Objective-C中推荐的方式,但是在Swift中我只得到UIViews和CALayer.我肯定在提供给这个方法的视图中有UILabel.我错过了什么?我的UIViewController中的调用:解决方法使用函数式编程概念可以更轻松地实现这一目标.

返回
顶部