Xcode 4& three20&创建IPA存档:没有这样的文件或目录

时间:2011-03-10 14:54:30

标签: iphone xcode three20 xcode4

在Xcode 3.2.5中,我使用“Build and Archive”创建一个没有任何问题的IPA文件。 我怎么能在Xcode 4中做到这一点?我想我必须使用“Product - > Archive”,但我在three20框架中收到了100多条错误消息。大多数是“没有这样的文件或目录”。 (“产品 - > Build For - > Build For Archiving”有效。没有错误。)

例如,这是第一条错误消息:

../scripts/Protect.command: line 23: cd: /Users/[USERNAME]/Library/Developer/Xcode/DerivedData/[PROJECTNAME]-blabla/ArchiveIntermediates/[PROJECTNAME]/BuildProductsPath/Release-iphoneos/../three20/Three20Core: No such file or directory

路径"/[PROJECTNAME]/BuildProductsPath/three20/"确实不存在,但此路径存在:"/[PROJECTNAME]/three20/"

我该怎么办?

12 个答案:

答案 0 :(得分:16)

Three20文档并没有为我解决这个问题(不幸的是......)。最终对我有用的是一些解决方案。 “存档”和“存档构建”(或构建运行)之间存在差异,并且使用这些步骤我使这两个步骤都没有构建问题:

您需要将脚本更改为Manni mentioned,为链接到项目树的每个Three20项目设置“跳过安装”标志,并将以下路径添加到项目的“标题搜索路径”中:

“$(BUILT_PRODUCTS_DIR)/../ three20” “$(BUILT_PRODUCTS_DIR)/../../ three20”

这将使您使用Build选项。如果要执行存档操作,则还需要将Xcode中的“位置”首选项更改为featherless mentioned above

我在此post中记录了这些步骤。

答案 1 :(得分:13)

适用于Xcode4中的构建和存档的配置。
https://github.com/pazustep/three20/commit/4a9aad4eb90a6962dd729d245f9293a7cc0d7f36


的src /普通/配置/ Paths.xcconfig

REPO_ROOT_PATH    = $(SRCROOT)/../..
ROOT_SOURCE_PATH  = $(REPO_ROOT_PATH)/src

//OBJROOT = $(REPO_ROOT_PATH)/Build
//SYMROOT = $(OBJROOT)/Products

// Search Paths

LIBRARY_SEARCH_PATHS    = $(STDLIB_LIBRARY)
//HEADER_SEARCH_PATHS     = $(STDLIB_HEADERS) "$(CONFIGURATION_BUILD_DIR)/../three20"
HEADER_SEARCH_PATHS     = $(STDLIB_HEADERS) "$(BUILT_PRODUCTS_DIR)/../three20" "$(BUILT_PRODUCTS_DIR)/../../three20"

的src /脚本/ Protect.command

# Ignore whitespace characters in paths
IFS=$'\n'

#cd ${CONFIGURATION_BUILD_DIR}${PUBLIC_HEADERS_FOLDER_PATH}

if [ "${DEPLOYMENT_LOCATION}" == "YES" ]; then
    PREFIX=${BUILT_PRODUCTS_DIR}/..
else
    PREFIX=${BUILT_PRODUCTS_DIR}
fi

cd ${PREFIX}${PUBLIC_HEADERS_FOLDER_PATH}

chmod a-w *.h 2>> /dev/null
chmod a-w private/*.h 2>> /dev/null

exit 0

答案 2 :(得分:5)

可能会摒弃构建过程的另一件事是使用包含空格方案名称

XCode不会阻止您这样做,但如果您为您的方案使用“Ad Hoc”这样的名称,您将会遇到相同的错误:

Three20/Three20+Additions.h: No such file or directory

答案 3 :(得分:4)

我现在正在研究这个问题,希望能够在Xcode 3.2。#和Xcode 4中使用适当的补丁。

编辑: 所以看起来让旧的Xcode 3.2项目与Xcode 4一起工作的最简单方法是执行以下操作:

  • 进入Xcode 4的首选项(Cmd +,)。
  • 选择“地点”标签。
  • 如果显示“构建位置”,请选择下拉列表并选择“将构建产品放置在目标指定的位置”

我会写一篇关于这个的更多细节的三篇.3.info文章。

答案 4 :(得分:2)

three20.info:Xcode 4过渡指南
http://three20.info/article/2011-03-10-Xcode4-Support

  

本指南已汇总   Three20团队为了帮助你   将您的应用迁移到Xcode 4   成功。

答案 5 :(得分:2)

确保您的方案名称不包含空格。这也导致“找不到文件”构建错误。

答案 6 :(得分:1)

我必须参加项目信息>构建(选项卡)并将以下内容添加到标题搜索路径:

three20/Build/Products/three20

此路径可能特定于我的项目,但如果它适用于其他人。

答案 7 :(得分:0)

打开文件/src/common/Configurations/Paths.xcconfig

旧代码:

HEADER_SEARCH_PATHS     = $(STDLIB_HEADERS) "$(CONFIGURATION_BUILD_DIR)/../three20"

新代码:

HEADER_SEARCH_PATHS     = $(STDLIB_HEADERS) "$(CONFIGURATION_BUILD_DIR)/../../three20"

所以,我仍然有7个错误,但我可以创建存档...

答案 8 :(得分:0)

Google网上论坛:Xcode 4,Three20和Project - >存档
http://groups.google.com/group/three20/browse_frm/thread/cde36b7dab178bad

答案 9 :(得分:0)

Amir Naor的回答非常完美。我在xcode 4.2上验证了他的答案,但它确实有效。我错过了“您将需要更改Manni上面提到的脚本”的步骤,因此我不断收到原始问题帖子中引用的类似错误。希望你不要犯同样的错误。从xcode 4.2开始,“然后你还需要将Xcode中的”Locations“偏好更改为上面提到的无毛。”不再需要了。

答案 10 :(得分:0)

我做了以下工作让它适合我:

  1. 对于three20静态库,我使用cocoapods将文件包含在主项目中..它只是摆脱了三个20给我的麻烦(而且它们很多..)顺便说一下我试过替换three20 with Nimbus ..但是Nimbus缺少我的项目使用three20的一些功能..所以Nimbus没有帮助。
  2. 在所有其他子项目/静态库的构建设置下将skip install设置为yes,并在构建阶段将复制头从公共切换到项目
  3. 最重要的是:在子库下..在构建阶段,我确保复制文件目标已从Absolute path更改为products directory
  4. 就是这样!

    提示:了解导致您的存档创建存档文件而不是ipa的违规文件:

    1. 选择存档,然后单击“分发”按钮。
    2. 选择“保存已建成产品”选项。
    3. 点击下一步并保存。
    4. 在Finder中浏览创建的目录。
    5. 'libraries'子目录将标识将Skip Install设置为Yes所需的库。
    6. 在某些情况下,usr/local/include将识别您需要从Pu​​blic移动到Project的罪魁祸首头文件,或者您必须从绝对路径更改为products目录的文件。但该目录(即usr / local / include)因子库目录结构而异。

答案 11 :(得分:0)

如果您想快速解决方法,只需执行以下简单步骤:

1.转到上面提到的/Users/[USERNAME]/Library/Developer/Xcode/DerivedData/[PROJECTNAME]-blabla/ArchiveIntermediates/[PROJECTNAME]/BuildProductsPath/路径(它将在您的错误消息中)。它应该是该路径中的/..之前的子字符串 2.创建Release-iphoneos(或Debug-iphoneos,如果适用)文件夹

然后一切都会好起来的!

Three20脚本假设您已经拥有该文件夹,但是当您第一次构建时,没有人存在。这就是为什么你需要修复" Build"和"存档"分开:" Build"动作通常使用Debug-iphoneos文件夹和"存档"行动使用Release-iphoneos

提示:您可以一次创建所有必需的文件夹,以避免不同配置出现问题。这些是:
Release-iphoneos
Debug-iphoneos
Release-iphonesimulator
Debug-iphonesimulator