【问题标题】:iOS app crashes at launch because of distribution profile? (libgdx + robovm)由于分发配置文件,iOS 应用程序在启动时崩溃? (libgdx + robovm)
【发布时间】:2015-02-23 19:57:33
【问题描述】:

我的 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$1.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 将第三次拒绝它,原因与前两次相同:“应用程序在启动时崩溃”。

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

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

【问题讨论】:

    标签: ios libgdx provisioning-profile robovm


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

          **最新更新:跳过了android问题,解决了绑定项目的问题,有这个问题的可以看这个链接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);日食运行良好。 是否可以只编译'core'+'ios'?比如下面这样的

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

          * 更新 * 好的,通过创建另一个临时项目并从新项目中删除 android 来绕过第一个问题,当我构建它时说无法确定任务 ':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.access$100(DefaultBuildExecuter.java:23)
              at org.gradle.execution.DefaultBuildExecuter$1.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.access$100(DefaultBuildExecuter.java:23)
              at org.gradle.execution.DefaultBuildExecuter$1.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$2.call(ForwardClientInput.java:71)
              at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.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$1.run(StartBuildOrRespondWithBusy.java:46)
              at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:246)
              at org.gradle.internal.concurrent.DefaultExecutorFactory$StoppableExecutorImpl$1.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
          

          【讨论】:

          • 你确定你在gradle文件所在的文件夹下运行了命令吗?
          • 感谢 Don 的回复,-是的,我在顶级项目文件夹中,其中包含 android、cores desktop、ios 文件夹。我已经习惯了通过 Eclipse 进行编译,我在手动使用 Gradle 时遇到了各种问题,例如依赖项。我的一个主要问题是为什么当我们运行该命令行时它会编译 android?目前正在研究如何为 Gradle 添加项目依赖项。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-12-27
          • 1970-01-01
          相关资源
          最近更新 更多