无法读取属性'emit'null
在使用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
除了我的开发人员提到的上述过程之外,以下工作也不会对环境做任何改变。这将需要两阶段构建。
供参考,让我们使用这个链接以供参考: 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。这是一个漫长的过程,但在没有任何环境变化的情况下完成工作。
尝试升级到NPM(3.X)的新版本。我已经看到与其他非Appcelerator项目的问题。
您可以通过终端下面的命令和干净的构建“项目>>干净”尝试
- APPC注销
- APPC登录
而且,我看你是使用相当老版本的Ti SDK,Xcode和节点。所以你可以更新你的环境然后尝试。 - https://platform.appcelerator.com/#/product/cli
希望这会有所帮助。
我终于成功了,没有迁移我所有的环境。刚刚更新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
您是否面临与发射属性为空的相同问题?它也发生在Android上吗? – Soumya
如果我们从命令行执行xcodebuild,那么它工作正常,我们可以从中生成IPA。不确定为什么它在Studio中执行时不起作用。 – Soumya
这与调用invokexcodebuild函数的_builds.js有关。如果我从此呼叫返回,则其他代码正确流通。 – Soumya
我已经添加了为我工作的过程。这似乎是一个时间问题。所以在两阶段构建中,它工作正常。我也加了我自己的方法。 – Soumya