【问题标题】:iOS Application crashes when using SpriteKit's TextureAtlas and building over Xcode command-lineiOS 应用程序在使用 SpriteKit 的 TextureAtlas 并通过 Xcode 命令行构建时崩溃
【发布时间】:2013-10-25 14:04:41
【问题描述】:

我们使用 iOS 7 中新的 SpriteKit 框架来开发小游戏。为了构建和分发我们游戏的新版本,我们使用了一个使用 Xcode5 命令行工具的构建和部署服务器。

当我们在 Xcode 中使用 Texture Atlas 并打开使用来自纹理图集的图像的 SpriteKit 视图时,应用程序(通过命令行构建)崩溃。

当我们构建应用程序 Xcode 的 GUI 并使用 Xcode 的 GUI 将其部署到设备时,一切正常,应用程序不会崩溃。

这似乎是 Xcode5 命令行工具中的一个错误。

有什么解决方法的想法吗?

【问题讨论】:

  • 什么是崩溃日志?

标签: objective-c command-line ios7 xcode5 sprite-kit


【解决方案1】:

使用 Xcode 5 Final:

xCode 命令行工具似乎只是忽略了构建设置中的“启用纹理图集生成”设置。

在命令行上完成的所有构建、调试和发布构建,不包含任何已编译的纹理图集文件夹。 (只有源 .atlas 的)。如果我使用 Xcode GUI 进行相同的构建,源图集 (.atlas) 文件夹将消失,并且在 IPA 内有正确的“.atlasc”文件夹以及已编译的纹理图集。缺少的图集是 Stephan 提到的崩溃的原因。

我在 Apples Bug Reporter 中填写了一个错误:15250666

作为一种快速的脏修复,可以使用这样的 shell 脚本构建阶段手动运行图集生成:

cd "$CONFIGURATION_BUILD_DIR"/*.app  
/Applications/Xcode.app/Contents/Developer/usr/bin/TextureAtlas YOURATLAS.atlas

【讨论】:

  • 谢谢。有了这个解决方法,我的游戏在从图集加载图像时不再崩溃。希望苹果尽快修复这个bug,这样就不再需要解决方法了。
【解决方案2】:

我在尝试通过 AppCode 在我的测试设备上运行 SpriteKit 应用时遇到了类似的问题,我假设它在下面使用 xcode-build。

您可以查看详情here

为此,我必须按照 Lukas Alperowitz 的建议手动编译它们。我建议不要编译每个脚本,而是添加一个通用规则。

为此,添加一个为所有 *.atlas 文件运行的自定义脚本。

自定义脚本:

${DEVELOPER_TOOLS_DIR}/../usr/bin/TextureAtlas ${INPUT_FILE_PATH} ${DERIVED_FILE_DIR}

输出文件:

${DERIVED_FILE_DIR}/${INPUT_FILE_BASE}.atlasc

【讨论】:

  • 这个解决方案...我推荐。
【解决方案3】:

更新:

有一个单独的TextureAtlas(注意大写)工具,看来您必须手动调用它才能进行命令行构建。该工具位于:

/Applications/Xcode.app/Contents/Developer/usr/bin 

从 Xcode 5.0.1 开始,该工具的使用会打印出以下内容:

Usage: TextureAtlas [-c][-p][-v][-f format] input_textures_folder optional_output_folder
     -c: use copy textures instead of generating texture atlas.
     -p: force texture atlas to have power of two dimensions.
     -v: enable verbose output.
     -f format: set texture output format.
         format = 1 (default): output RGBA8888 format.
         format = 2: output RGBA8888 compressed format.
         format = 3: output RGBA4444 format.
         format = 4: output RGBA5551 format.
         format = 5: output RGB565 format.

其他需要检查的事项:

  • 确认崩溃是由于纹理丢失/损坏造成的。如果在加载图集或使用图集纹理之一时它没有崩溃,那么您可能遇到了不同的问题。尝试运行附带调试器的自动构建。
  • 您的自动构建是创建调试还是发布配置构建?如果发布,请尝试使用 GUI 构建发布版本。您可能遇到了一个简单的仅发布崩溃问题。
  • 仔细检查纹理图集文件夹是否包含与 GUI 构建中相同的文件
  • 从设备中删除应用程序,清理构建文件夹,使用 GUI 工具重新运行:它现在崩溃了吗?如果是,您遇到的情况是纹理已从项目中删除但仍在捆绑包中,因为 Xcode 不会从已部署的捆绑包中删除文件。
  • Xcode 首选项 -> 位置:确保将命令行工具设置为正确的版本。
  • 运行xcodebuild -version验证命令行工具版本
  • 如果其他方法都失败,请尝试 TexturePacker

【讨论】:

  • 我也经历了所有这些步骤,但没有运气。使用 Xcode 5 Final:xCode 命令行工具似乎只是忽略了构建设置中的“启用纹理图集生成”设置。在命令行上完成的所有构建、调试和发布构建,不包含任何已编译的 textureatlas 文件夹。 (只有源 .atlas 的)。如果我使用 Xcode GUI 进行相同的构建,源图集 (.atlas) 文件夹将消失,并且在 IPA 内有正确的“.atlasc”文件夹以及已编译的纹理图集。缺少的地图集是 Stephan 提到的崩溃的原因。
  • 看我的更新,好像有一个单独的 TextureAtlas 工具来创建图集
猜你喜欢
  • 2014-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-06
  • 1970-01-01
  • 2011-12-24
  • 2012-01-21
  • 1970-01-01
相关资源
最近更新 更多