iOS 应用程序因分发配置文件而在启动时崩溃? (libgdx + robovm)

iOS app crashes at launch because of distribution profile? (libgdx + robovm)

我的 iOS 应用提交被拒绝两次,原因相同:启动时崩溃。鉴于日志,我猜它来自我的配置文件和签名身份。 我正在使用 Libgdx 1.5.x 和 RoboVM beta 4,以及 Eclipse

当我构建没有配置文件的应用程序时,它可以在任何模拟器上正常构建和运行。 有了开发者资料,该应用程序可以在我的测试设备上正常构建和运行。 一切都很好,直到我将 iosSignIdentity 和 iosProvisioningProfile 设置为分发,但出现以下错误:

使用以下命令从控制台构建:

./gradlew -Probovm.device.name=<my device name> launchIOSDevice --stacktrace

我遇到错误:

org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':ios:launchIOSDevice'.
...
Caused by: org.robovm.libimobiledevice.LibIMobileDeviceException: ApplicationVerificationFailed
at org.robovm.libimobiledevice.util.AppLauncher.error(AppLauncher.java:1001)
at org.robovm.libimobiledevice.Callbacks.callInstproxyCallback(Callbacks.java:64)

我设备的日志(取自Xcode)是:

<Error>: profile not valid: 0xe8008012
<Error>: 0x1e3000 install_embedded_profile: Could not install embedded profile: 0xe8008012
<Error>: 0x1e3000 verify_signer_identity: MISValidateSignatureAndCopyInfo failed for /var/tmp/install_staging.6O8w3D/IOSLauncher.app/IOSLauncher: 0xe8008015

这是我为分发创建的配置文件,它链接到我的分发证书和我的应用程序:

在我的 build.gradle 中,我设置了这样的身份和个人资料:

    robovm {
iosSignIdentity = "iPhone Distribution: <my name> (PK79UD6TA3)"
iosProvisioningProfile = "DistribKM"
iosSkipSigning = false
stdoutFifo = null
stderrFifo = null
}

}

我正在从这个命令行获取 iosSignIdentity:

这就是我迷路的地方。我可以用

构建应用程序
./gradlew -Probovm.ipaArchs=thumbv7:arm64 build createIPA

构建将成功。但我几乎可以肯定,如果我上传并提交此版本进行修改,Apple 将第三次拒绝它,原因与前两次相同:"app crashes at start".

这是上传到 iTunes Connect 后的样子:

在提交应用程序之前,我如何确保该应用程序能够与分发配置文件一起正常工作?

回答我自己,这可能会帮助其他人知道,尽管此构建在任何设备上都会崩溃,但几个小时前它已被 Apple 批准。 因此,如果您遇到此处描述的相同问题,请最后一次对所有内容进行三次检查,您的构建将会崩溃,但它可以得到 Apple 的批准。 遗憾的是,使用 Libgdx Robovm,使用 XCode 检查供应配置文件和证书要么不可能,要么非常困难,所以你基本上必须采取信心的飞跃...... 希望对你有帮助

我们有同样的问题,甚至我们的应用程序也被拒绝了两次。我们使用 eclipse(不是在控制台中)使用 adHoc 配置文件进行构建,并且构建在我们尝试过的每台 64 位设备上都崩溃了。因此,似乎以某种方式从 "eclipse" 制作 IPA 的标准方式错过了 64 位架构。 (我确定我正确选择了所有参数)。

在控制台中构建 IPA 解决了问题。

./gradlew -Probovm.ipaArchs=thumbv7:arm64 build createIPA

** 最新更新:跳过了android问题,解决了绑定项目的问题,遇到这个问题的人,看这个link http://www.badlogicgames.com/forum/viewtopic.php?f=11&t=11145&p=79057#p79057 **

你们能提供任何关于从命令行设置 gradle 的参考吗?

./gradlew -Probovm.ipaArchs=thumbv7:arm64 build createIPA

我已经看过 https://github.com/libgdx/libgdx/wiki/Gradle-on-the-Commandline 但这没什么用。每当我 运行 上面的代码时,它都会编译所有项目,包括 Android (但是,我很难设置 Gradle 具有外部依赖项);不过 eclipse 运行 很好。 是否可以只编译'core'+'ios'?比如下面的东西

./gradlew -Probovm.ipaArchs=thumbv7:arm64 core:build ios:createIPA

* 更新 * 好的,通过创建另一个临时项目并从新项目中删除 android 来规避第一个问题,当我构建它时说 Could not determine the dependencies of task ':ios:compileJava' 这是什么意思?

与 --debug

20:54:47.851 [INFO] [org.gradle.execution.TaskNameResolvingBuildConfigurationAction] Selected primary task 'build' from project :
20:54:47.855 [ERROR] [org.gradle.BuildExceptionReporter] 
20:54:47.855 [ERROR] [org.gradle.BuildExceptionReporter] FAILURE: Build failed with an exception.
20:54:47.856 [ERROR] [org.gradle.BuildExceptionReporter] 
20:54:47.856 [ERROR] [org.gradle.BuildExceptionReporter] * What went wrong:
20:54:47.856 [ERROR] [org.gradle.BuildExceptionReporter] Could not determine the dependencies of task ':ios:compileJava'.
20:54:47.856 [ERROR] [org.gradle.BuildExceptionReporter] > Could not determine the dependencies of task ':ios:compileJava'.
20:54:47.856 [ERROR] [org.gradle.BuildExceptionReporter] 
20:54:47.857 [ERROR] [org.gradle.BuildExceptionReporter] * Try:
20:54:47.857 [ERROR] [org.gradle.BuildExceptionReporter] Run with --stacktrace option to get the stack trace. 
20:54:47.857 [LIFECYCLE] [org.gradle.BuildResultLogger] 
20:54:47.857 [LIFECYCLE] [org.gradle.BuildResultLogger] BUILD FAILED
20:54:47.857 [LIFECYCLE] [org.gradle.BuildResultLogger] 
20:54:47.858 [LIFECYCLE] [org.gradle.BuildResultLogger] Total time: 1.288 secs

与 --stacktrace

Configuration on demand is an incubating feature.

FAILURE: Build failed with an exception.

* What went wrong:
Could not determine the dependencies of task ':ios:compileJava'.
> Configuration with name 'default' not found.

* Try:
Run with --info or --debug option to get more log output.

* Exception is:
org.gradle.api.GradleException: Could not determine the dependencies of task ':ios:compileJava'.
    at org.gradle.api.internal.tasks.CachingTaskDependencyResolveContext.resolve(CachingTaskDependencyResolveContext.java:65)
    at org.gradle.api.internal.tasks.CachingTaskDependencyResolveContext.getDependencies(CachingTaskDependencyResolveContext.java:53)
    at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.addToTaskGraph(DefaultTaskExecutionPlan.java:112)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.addTasks(DefaultTaskGraphExecuter.java:76)
    at org.gradle.execution.TaskNameResolvingBuildConfigurationAction.configure(TaskNameResolvingBuildConfigurationAction.java:47)
    at org.gradle.execution.DefaultBuildExecuter.configure(DefaultBuildExecuter.java:42)
    at org.gradle.execution.DefaultBuildExecuter.access0(DefaultBuildExecuter.java:23)
    at org.gradle.execution.DefaultBuildExecuter.proceed(DefaultBuildExecuter.java:48)
    at org.gradle.execution.ExcludedTaskFilteringBuildConfigurationAction.configure(ExcludedTaskFilteringBuildConfigurationAction.java:47)
    at org.gradle.execution.DefaultBuildExecuter.configure(DefaultBuildExecuter.java:42)
    at org.gradle.execution.DefaultBuildExecuter.access0(DefaultBuildExecuter.java:23)
    at org.gradle.execution.DefaultBuildExecuter.proceed(DefaultBuildExecuter.java:48)
    at org.gradle.execution.DefaultTasksBuildExecutionAction.configure(DefaultTasksBuildExecutionAction.java:44)
    at org.gradle.execution.DefaultBuildExecuter.configure(DefaultBuildExecuter.java:42)
    at org.gradle.execution.DefaultBuildExecuter.select(DefaultBuildExecuter.java:35)
    at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:142)
    at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:106)
    at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:86)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:80)
    at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:33)
    at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:24)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:36)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:26)
    at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:47)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:34)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:119)
    at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:35)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:119)
    at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:24)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:119)
    at org.gradle.launcher.daemon.server.exec.StartStopIfBuildAndStop.execute(StartStopIfBuildAndStop.java:33)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:119)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput.call(ForwardClientInput.java:71)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput.call(ForwardClientInput.java:69)
    at org.gradle.util.Swapper.swap(Swapper.java:38)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:69)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:119)
    at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:60)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:34)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:119)
    at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:70)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:34)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:119)
    at org.gradle.launcher.daemon.server.exec.DaemonHygieneAction.execute(DaemonHygieneAction.java:39)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:119)
    at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy.run(StartBuildOrRespondWithBusy.java:46)
    at org.gradle.launcher.daemon.server.DaemonStateCoordinator.run(DaemonStateCoordinator.java:246)
    at org.gradle.internal.concurrent.DefaultExecutorFactory$StoppableExecutorImpl.run(DefaultExecutorFactory.java:64)
Caused by: org.gradle.api.artifacts.UnknownConfigurationException: Configuration with name 'default' not found.
    at org.gradle.api.internal.artifacts.configurations.DefaultConfigurationContainer.createNotFoundException(DefaultConfigurationContainer.java:79)
    at org.gradle.api.internal.DefaultNamedDomainObjectCollection.getByName(DefaultNamedDomainObjectCollection.java:192)
    at org.gradle.api.internal.artifacts.configurations.DefaultConfigurationContainer.getByName(DefaultConfigurationContainer.java:69)
    at org.gradle.api.internal.artifacts.configurations.DefaultConfigurationContainer.getByName(DefaultConfigurationContainer.java:33)
    at org.gradle.api.internal.artifacts.dependencies.DefaultProjectDependency.getProjectConfiguration(DefaultProjectDependency.java:69)
    at org.gradle.api.internal.artifacts.dependencies.DefaultProjectDependency_Decorated.getProjectConfiguration(Unknown Source)
    at org.gradle.api.internal.artifacts.dependencies.DefaultProjectDependency$TaskDependencyImpl.resolve(DefaultProjectDependency.java:164)
    at org.gradle.api.internal.tasks.CachingTaskDependencyResolveContext$TaskGraphImpl.getNodeValues(CachingTaskDependencyResolveContext.java:86)
    at org.gradle.internal.graph.CachingDirectedGraphWalker$GraphWithEmpyEdges.getNodeValues(CachingDirectedGraphWalker.java:200)
    at org.gradle.internal.graph.CachingDirectedGraphWalker.doSearch(CachingDirectedGraphWalker.java:112)
    at org.gradle.internal.graph.CachingDirectedGraphWalker.findValues(CachingDirectedGraphWalker.java:64)
    at org.gradle.api.internal.tasks.CachingTaskDependencyResolveContext.doResolve(CachingTaskDependencyResolveContext.java:74)
    at org.gradle.api.internal.tasks.CachingTaskDependencyResolveContext.resolve(CachingTaskDependencyResolveContext.java:63)
    ... 47 more


BUILD FAILED

我遇到了同样的问题。现在已经修好了。我使用 maven 来管理依赖项(这就是问题所在)。当你 运行 通过 eclipse roboVM 插件使用模拟器或真实设备的应用程序时,maven 依赖项将被打包到目标 ipa 并部署到你的模拟器或真实设备,所以它工作正常。但是当您使用 Robo VM Tools -> Package for app store/Ad-Hoc distribution... 导出 ipa 文件时,maven 依赖项不会导出到目标 ipa。修复解决方案是将所有依赖项放入核心项目的 lib 文件夹并添加到构建路径。