如何在Xcode中创建 native 窗口并将其与Mobile Flex应用程序集成。 native 窗口的作用类似于StageWebView组件,由此 native 内容 float 在Flex应用程序其余部分的矩形区域中。
最佳答案
作为一名弹性程序员,这是一个乏味的过程,我花了数周的时间才弄清楚。希望这对其他Xcode新手有所帮助。
首先,您必须对Objective-C和Xcode有基本的了解。您应该能够创建一个简单的Hello World Xcode程序。知道如何执行此操作后,您将看到,对于每个可视窗口,通常将具有一个xib文件,一个头文件和一个实现文件。我发现开始编写普通的Xcode应用程序比较容易,然后,一旦它正常工作并看起来应该正常工作,就可以将这3个文件(当然还有帮助文件)手动拉到Xcode静态库项目中。因此,继续前进,我将假设您已经过了这一步。以下是有关如何使用ANE集成Xcode和Flex mobile的逐步说明:
'#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];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;
}
//ContextFinalizer()。
无效的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;FRENamedFunction* func = (FRENamedFunction*) malloc(sizeof(FRENamedFunction) * 1); func[0].name = (const uint8_t*) "openFloatingWindow"; func[0].functionData = NULL; func[0].function = &openFloatingWindow; *functionsToSet = func;
}
//ExtInitializer()
void ExtInitializer(void ** extDataToSet,FREContextInitializer * ctxInitializerToSet,
FREContextFinalizer * ctxFinalizerToSet)
{
NSLog(@“ExtInitializer”);
* extDataToSet = NULL;
* ctxInitializerToSet =&ContextInitializer;
* ctxFinalizerToSet =&ContextFinalizer;
}
//ExtFinalizer()
void ExtFinalizer(void * extData){
NSLog(@“ExtFinalizer”);
//在这里进行清理。
返回;
}
package fwane { import flash.events.EventDispatcher; import flash.events.StatusEvent; import flash.external.ExtensionContext;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); } }
}
导出XLIB =“/Users/christo.smal/Library/Developer/Xcode/DerivedData/wherever-lib.a”
导出CERT =“/在任何地方/如果/您/想要/要/签名/ane.p12”
导出FLEXLIBPATH =“../path/of/flex/library/project”
导出XIBPATH =“/Path/of/where/xib/files/are”
导出SWCFNAME =“FWAne.swc”
导出ANEFNAME =“FWAne.ane”
ls -la $ XLIB
回声复制文件...
rm -rf调试/*
cp $ FLEXLIBPATH/src/extension.xml。
cp $ FLEXLIBPATH/bin/$ SWCFNAME。
cp $ XLIB ./调试
'#将资源文件(例如图像)复制到调试文件夹
cp/path/to/my/images/referenced/from/xcode/*.png ./调试
回声编译XIB的
cp $ XIBPATH/*。xib ./调试
cp/wherever/FloatingWindow.xib ./debug
/Developer/usr/bin/ibtool-错误-警告-通知-输出格式的人类可读文本-编译debug/FloatingWindow.nib debug/FloatingWindow.xib --sdk/Developer/Platforms/iPhoneOS。平台/开发人员/SDK/iPhoneOS5.0.sdk
rm -rf调试/*.xib
回声提取library.swc ...
cp $ SWCFNAME kak
cd kak
解压-xo $ SWCFNAME
cp -X library.swf ../debug
光盘..
回声复制更多的文件...
rm -rf调试/*.ane
cp extension.xml调试
回声大厦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调试。
回声签名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
回声完成
-lthirdparty
希望这可以帮助
C
关于ios - 如何创建将在本地显示 float 窗口的ANE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8968726/