无法读取属性' emit'为null

时间:2017-04-13 18:24:49

标签: appcelerator appcelerator-titanium

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

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

XCode:7.3.1 节点:0.12.7

4 个答案:

答案 0 :(得分:0)

尝试升级到较新版本的npm(3.x)。我已经看到了其他非Appcelerator项目的问题。

答案 1 :(得分:0)

您可以通过终端尝试使用以下命令并清除构建“Project>> Clean”

  • appc logout
  • appc login

另外,我发现你使用的是相当旧版本的Ti SDK,Xcode和节点。所以你可以更新你的环境,然后尝试一下。 - https://platform.appcelerator.com/#/product/cli

希望这有帮助。

答案 2 :(得分:0)

我终于成功了,没有迁移我的所有环境。只需更新Appcelerator CLI,Alloy和Node

首先更新您的Appcelerator CLI

sudo npm install -g appcelerator
appc setup

然后你需要更新Alloy 1.8.0 +

sudo npm install -g alloy

接下来修改项目以反映Alloy 1.8.0先决条件:http://www.appcelerator.com/blog/2016/03/alloy-1-8-relocates-i18n-and-platform-directories/

- >将您的/ i18n和/ platform目录移动到/ app / i18n和/ app / platform

最后重新启动计算机。

PS这是我的新配置:

  • Studio 4.5.0
  • sdk 5.2.0.GA
  • XCode 7.3.1
  • npm 2.14.7
  • node 4.2.0
  • CLI 5.0.12

答案 3 :(得分:0)

除了我的其他开发人员提到的上述过程之外,以下过程也可以在不对环境进行任何更改的情况下工作。这将需要两阶段构建。

供参考,我们可以使用此链接作为参考: a Rotate transform

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

启动构建
appc run --build-only -T dist-adhoc --project-dir ~/Code/MyApp

一旦构建开始,让它通过并等待

  

调用xcode

调用

并抛出错误。抛出错误后,转到以下文件夹:

  

建立/ iphone /建造/产品/唱片集-iPhone

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

打开_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。这是一个漫长的过程,但在没有任何环境变化的情况下完成工作。