2017-04-13 151 views
0

在使用Appcelerator SDK 5.5.1.GA执行构建时,在调用xcodebuild之后,它会抛出一个错误,并且文本无法读取属性'emit'为null。它曾经工作得很好,直到上周。只有在我制作AdHoc或生产IPA时才会发生这种情况。它在模拟器中启动时没有任何问题。无法读取属性'emit'null

如果我通过Studio或使用控制台进行操作,就会发生这种情况。如果来自社区的任何人遇到了这个问题,请让我知道。如果我使用5.5.0.GA这样的旧SDK,那么构建工作正常。

的XCode:7.3.1 节点:0.12.7

+0

如果我们从命令行执行xcodebuild,那么它工作正常,我们可以从中生成IPA。不确定为什么它在Studio中执行时不起作用。 – Soumya

+0

这与调用invokexcodebuild函数的_builds.js有关。如果我从此呼叫返回,则其他代码正确流通。 – Soumya

+0

我已经添加了为我工作的过程。这似乎是一个时间问题。所以在两阶段构建中,它工作正常。我也加了我自己的方法。 – Soumya

回答

0

除了我的开发人员提到的上述过程之外,以下工作也不会对环境做任何改变。这将需要两阶段构建。

供参考,让我们使用这个链接以供参考: Appcelerator iOS Build JS (_build.js)

要解决此问题,可以从终端

appc run --build-only -T dist-adhoc --project-dir ~/Code/MyApp 

一旦构建开始启动建设,让它经历和等到

调用的Xcode

被调用并引发错误。一旦引发错误,转到以下文件夹:

编译/ iphone /编译/产品/新闻稿 - iPhone

里面有你会发现APP文件和文件DSYM。如果没有,等待2-3分钟,XCode构建的后台进程将完成。一旦看到这两个文件,在这种情况下打开SDK的_build.js(5.5.1.GA)。您可以在构建开始时找到在控制台中显示的路径。

打开_build.js文件,然后转到下面的函数

iOSBuilder.prototype.run = function (logger, config, cli, finished) 

里面有,你会发现一个一系列它具有所有的函数调用。在这里您需要进行以下更改:

function (next) { 
     cli.emit('build.pre.construct', this, next); 
    }, 

    // initialization 
    //'doAnalytics', 
    'initialize', 
    'loginfo', 
    //'readBuildManifest', 
    //'checkIfNeedToRecompile', 
    //'initBuildDir', 

    /* 
    function (next) { 
     cli.emit('build.pre.compile', this, next); 
    }, 

    function() { 
     // Make sure we have an app.js. This used to be validated in validate(), but since plugins like 
     // Alloy generate an app.js, it may not have existed during validate(), but should exist now 
     // that build.pre.compile was fired. 
     ti.validateAppJsExists(this.projectDir, this.logger, ['iphone', 'ios']); 
    }, 

    // xcode related tasks 
    'createXcodeProject', 
    'writeEntitlementsPlist', 
    'writeInfoPlist', 
    'writeMain', 
    'writeXcodeConfigFiles', 
    'copyTitaniumLibraries', 
    'copyTitaniumiOSFiles', 
    'copyExtensionFiles', 
    'cleanXcodeDerivedData', 

    // titanium related tasks 
    'writeDebugProfilePlists', 
    'copyResources', 
    'encryptJSFiles', 
    'writeI18NFiles', 
    'processTiSymbols', 

    // cleanup and optimization 
    'removeFiles', 
    'optimizeFiles', 

    // provide a hook event before xcodebuild 
    function (next) { 
     cli.emit('build.pre.build', this, next); 
    }, 

    // build baby, build 
    'invokeXcodeBuild', 

    */ 

    // provide a hook event after xcodebuild 
    function (next) { 
     cli.emit('build.post.build', this, next); 
    }, 

    // finalize 
    'writeBuildManifest', 

    function (next) { 
     if (!this.buildOnly && (this.target === 'simulator' || this.target === 'device')) { 
      var delta = appc.time.prettyDiff(this.cli.startTime, Date.now()); 
      this.logger.info(__('Finished building the application in %s', delta.cyan)); 
     } 

     cli.emit('build.post.compile', this, next); 
    }, 

    function (next) { 
     cli.emit('build.finalize', this, next); 
    } 

现在再次运行appc run命令。现在,这将采取最后的构建并准备IPA。这是一个漫长的过程,但在没有任何环境变化的情况下完成工作。

0

尝试升级到NPM(3.X)的新版本。我已经看到与其他非Appcelerator项目的问题。

0

您可以通过终端下面的命令和干净的构建“项目>>干净”尝试

  • APPC注销
  • APPC登录

而且,我看你是使用相当老版本的Ti SDK,Xcode和节点。所以你可以更新你的环境然后尝试。 - https://platform.appcelerator.com/#/product/cli

希望这会有所帮助。

0

我终于成功了,没有迁移我所有的环境。刚刚更新Appcelerator的CLI,合金和节点

首先更新您的Appcelerator的CLI

sudo npm install -g appcelerator 
appc setup 

然后,你需要更新合金1.8.0+

sudo npm install -g alloy 

下一页修改您的项目以反映合金1.8 0.0先决条件:http://www.appcelerator.com/blog/2016/03/alloy-1-8-relocates-i18n-and-platform-directories/

- >移动你/ i18n中和/平台目录/应用/ i18n中和/应用/平台

最后重新启动您的计算机。这里

PS是我的新配置:

  • 工作室4.5.0
  • SDK 5.2.0.GA
  • 的XCode 7.3.1
  • NPM 2.14.7
  • 节点4.2。 0
  • CLI 5.0.12
+0

您是否面临与发射属性为空的相同问题?它也发生在Android上吗? – Soumya