在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/"
我该怎么办?
答案 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
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"
# 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一起工作的最简单方法是执行以下操作:
我会写一篇关于这个的更多细节的三篇.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)
我做了以下工作让它适合我:
Absolute path
更改为products directory
。 就是这样!
提示:了解导致您的存档创建存档文件而不是ipa的违规文件:
usr/local/include
将识别您需要从Public移动到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