无法读取 null 的 属性 'emit'
Cannot read property 'emit' of null
在使用 Appcelerator SDK 5.5.1.GA 执行构建时,在调用 xcodebuild 后会抛出错误,文本无法读取 属性 'emit' of null。直到上周它都可以正常工作。它仅在我制作 AdHoc 或 Production IPA 时发生。它在模拟器中启动没有任何问题。
如果我通过 Studio 或使用控制台进行操作,就会发生这种情况。如果社区中有人遇到过这个问题,请告诉我。如果我使用的是 5.5.0.GA 等较旧的 SDK,那么构建工作正常。
XCode:7.3.1
节点:0.12.7
尝试升级到更新版本的 npm (3.x)。我在其他非 Appcelerator 项目中看到过这个问题。
您可以尝试通过终端执行以下命令并清理构建 "Project>>Clean"
- appc 注销
- appc 登录
此外,我看到您使用的是相当旧版本的 Ti SDK、Xcode 和 node.js。所以你可以更新你的环境然后试试看。
- https://platform.appcelerator.com/#/product/cli
希望对您有所帮助。
我终于成功了,没有迁移我所有的环境。仅更新 Appcelerator CLI、Alloy 和 Node
首先更新您的 Appcelerator CLI
sudo npm install -g appcelerator
appc setup
那你需要更新Alloy1.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 这是我的新配置:
- 工作室 4.5.0
- SDK 5.2.0.GA
- XCode7.3.1
- npm 2.14.7
- 节点 4.2.0
- CLI 5.0.12
除了我的开发人员已经提到的上述过程之外,以下过程也可以在不对环境进行任何更改的情况下进行。这将需要两阶段构建。
供参考让我们使用这个link作为参考:
Appcelerator iOS Build JS (_build.js)
要解决此问题,您可以从终端启动构建
appc run --build-only -T dist-adhoc --project-dir ~/Code/MyApp
构建启动后,让它完成并等待
invoking xcode
被调用并抛出错误。抛出错误后,转到以下文件夹:
build/iphone/build/Products/Releases-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 运行 命令。现在这将采用最后一个构建并从中准备 IPA。这是一个漫长的过程,但无需任何环境更改即可完成工作。
在使用 Appcelerator SDK 5.5.1.GA 执行构建时,在调用 xcodebuild 后会抛出错误,文本无法读取 属性 'emit' of null。直到上周它都可以正常工作。它仅在我制作 AdHoc 或 Production IPA 时发生。它在模拟器中启动没有任何问题。
如果我通过 Studio 或使用控制台进行操作,就会发生这种情况。如果社区中有人遇到过这个问题,请告诉我。如果我使用的是 5.5.0.GA 等较旧的 SDK,那么构建工作正常。
XCode:7.3.1 节点:0.12.7
尝试升级到更新版本的 npm (3.x)。我在其他非 Appcelerator 项目中看到过这个问题。
您可以尝试通过终端执行以下命令并清理构建 "Project>>Clean"
- appc 注销
- appc 登录
此外,我看到您使用的是相当旧版本的 Ti SDK、Xcode 和 node.js。所以你可以更新你的环境然后试试看。 - https://platform.appcelerator.com/#/product/cli
希望对您有所帮助。
我终于成功了,没有迁移我所有的环境。仅更新 Appcelerator CLI、Alloy 和 Node
首先更新您的 Appcelerator CLI
sudo npm install -g appcelerator
appc setup
那你需要更新Alloy1.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 这是我的新配置:
- 工作室 4.5.0
- SDK 5.2.0.GA
- XCode7.3.1
- npm 2.14.7
- 节点 4.2.0
- CLI 5.0.12
除了我的开发人员已经提到的上述过程之外,以下过程也可以在不对环境进行任何更改的情况下进行。这将需要两阶段构建。
供参考让我们使用这个link作为参考: Appcelerator iOS Build JS (_build.js)
要解决此问题,您可以从终端启动构建
appc run --build-only -T dist-adhoc --project-dir ~/Code/MyApp
构建启动后,让它完成并等待
invoking xcode
被调用并抛出错误。抛出错误后,转到以下文件夹:
build/iphone/build/Products/Releases-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 运行 命令。现在这将采用最后一个构建并从中准备 IPA。这是一个漫长的过程,但无需任何环境更改即可完成工作。