在制作iphone应用程序时是否可以嵌入或加载主权财富基金(苹果是否允许)

在制作iphone应用程序时是否可以嵌入或加载主权财富基金(苹果是否允许),iphone,flash,actionscript-3,actionscript,air,Iphone,Flash,Actionscript 3,Actionscript,Air,在为iphone制作应用程序时,我对是否嵌入主权财富基金或加载主权财富基金有点困惑。有人知道每种方法的优点是什么(哪种方法更可取)?我知道嵌入主权财富基金应该比加载它们快一点,但就这些吗 而且这也很重要,我读到苹果会拒绝任何带有外部主权财富基金的应用??这是真的吗?如果是这样,嵌入或加载上述主权财富基金会解决这个问题吗 提前谢谢 编辑:经过一番搜索,发现苹果确实在加载外部软件方面存在问题,你仍然可以这样做,但你的软件不需要附加任何动作脚本,这里有一个链接,它没有说明任何嵌入软件的事,所以我的问题

在为iphone制作应用程序时,我对是否嵌入主权财富基金或加载主权财富基金有点困惑。有人知道每种方法的优点是什么(哪种方法更可取)?我知道嵌入主权财富基金应该比加载它们快一点,但就这些吗

而且这也很重要,我读到苹果会拒绝任何带有外部主权财富基金的应用??这是真的吗?如果是这样,嵌入或加载上述主权财富基金会解决这个问题吗

提前谢谢

编辑:经过一番搜索,发现苹果确实在加载外部软件方面存在问题,你仍然可以这样做,但你的软件不需要附加任何动作脚本,这里有一个链接,它没有说明任何嵌入软件的事,所以我的问题是:在iphone上编写应用程序时,你能嵌入软件吗

当我说外部主权财富基金时,请编辑以澄清。我指的是在本地系统中找到的SWF,但您需要将它们添加到您的程序中,因为它们包含MovieClips或sprite等。。。你需要的。我不是说你需要从网站或在线资源下载主权财富基金。(希望澄清问题)


编辑更改了问题的标题…问题解决了,感谢所有的帮助,新年快乐=D

我不熟悉苹果和iPhone应用程序的规则,但一般来说,当我制作应用程序/游戏时,我会嵌入所有内容。优点:

  • 您的游戏/应用程序位于一个swf中,便于共享
  • 您的游戏/应用加载速度更快,因为加载时所有资产都在那里
  • 你不需要依赖互联网访问来获取你的资产(如果你是从网站加载的话)——这对应用程序来说是很好的
  • 您的游戏/应用程序将“正常工作”-没有安全问题,URL更改/资产站点关闭时没有问题(如果它们是外部的)
  • 如果您使用swc而不是swf(顺便说一句,swc也可以加载),那么您也可以从严格的键入中获益
缺点是:

  • 如果你需要更新你的一项资产,你需要重新发布游戏/应用程序

  • 答案是肯定的,你可以嵌入主权财富基金,但这不是唯一的方法。您还可以使用普通加载程序方法,处理与主SWF相关的所有内容:

    var myLoader:Loader = new Loader();
    // iOS apps act as if the main SWF is in a folder 
    // and the other SWFs are in the same (or sub) folders. 
    var url:URLRequest = new URLRequest("loadedSWF.swf");
    myLoader.load(url);
    addChild(myLoader);
    myLoader.x = 50;
    myLoader.y = 30;
    
    有一个警告:在编译期间(在“Air for iOS设置”的“包含文件”列表中),您必须列出要加载的主权财富基金,它们将被编译到IPA中

    因此,不,您不能调用外部SWF,但您当然可以使用
    embed
    标记或使用(可能称为)IPA嵌入来访问其他SWF


    编辑:


    自从我第一次回答这个问题以来,问题和标题有了一些变化,这里有一个更一般的总结。如果在网站上使用Flash Player,苹果不允许以同样的方式加载本地主权财富基金。在i-device中使用“相对”或“本地”引用无法加载SWF(或任何其他内容),除非该内容被编译到应用程序中。这不适用于某些类型的“远程”SWF加载,也不适用于Actionscript“本机”编码,但这不是(原始)问题所在。

    更新,2012年10月:

    在AdobeAIR 3.5中,adl引入了一个名为“多SWF支持”的功能,该功能允许使用加载程序加载.ipa(本地文件,而不是服务器)中交付的SWF,以便在其中包含代码。adl编译器AOT编译.ipa中包含的SWF,允许它们在iOS下加载和工作

    在撰写本文时,AIR 3.5目前处于测试阶段,可在adobe实验室网站上获得:

    请注意,此功能需要-swf version=18或更大的根swf(不一定是加载的资产)和应用程序xml文件中以3.5结尾的AIR名称空间

    旧答案:

    我想更新这个答案,因为自从我第一次研究这个问题以来,我已经了解了很多

    问题的根源在于,在使用AIR制作iOS应用程序时,Apple TOS不允许对代码进行运行时解释,这包括SWF字节码。因此,不允许加载包含代码的SWF(即使是简单的动画命令,如stop()、gotoAndPlay()等),也无法通过加载程序(在AIR 3.5之前)工作

    • 请注意,可以为其矢量图形内容加载SWF。将显示图形,但不会执行代码
    但是,有一些解决办法。这两种解决方案都通过将包含代码的资产编译到主SWF中来避免装入器,因为一旦它们成为主SWF的一部分,AIR编译器(adt)就会将代码交叉编译到objective-c中,并且在iOS设备上一切都会正常工作

    使用SWC库

    这是iOS开发的最佳选择。如果将图形资源(.fla文件)编译成SWC(或从库中的符号导出SWC),然后根据这些SWC编译主swf,这将通过编译器完成,actionscript代码将在iOS设备上执行

    为[嵌入]嵌入式主权财富基金使用SWFMerge

    将资产嵌入主权财富基金非常容易,如下所示:

    [Embed(source="GameLevel.swf")]
      private var GameLevel:Class;
    
    public function main():void
    {
      var my_level:* = new GameLevel();
      addChild(my_level);
    }
    
    在这种情况下,如果gameLevel.swf中包含代码,它通常不会在iOS中工作,因为新的gameLevel()将创建加载程序并解释swf字节码。但是,如果您首先通过我的名为SWFMerge的工具运行上述SWF,它将获取嵌入的SWF并将其合并到根SWF中。然后ADT将把您的主swf(包括嵌入式代码)编译成objective-C,它将在iOS上运行,注意:new gameLevel()现在直接生成您的资产实例,而不是加载程序

    SWFMerge工具位于此处:

    请在评论中告诉我此解决方案是否适用于您,或者您是否有问题

    使用Lo