有哪些好的 Xcode 脚本可以加快开发速度?

2024-01-28

Xcode 允许您创建自动化脚本来执行重复任务。您编写了哪些脚本来加快开发速度?


我为我创建了三个适用于 Cocoa 和 iPhone 的 JSON.Framework http://code.google.com/p/json-framework/。这些负责处理以下事项:

  • 创建带有动态嵌入式框架、自定义 iPhone SDK、API 文档和一些文档文件的发行磁盘映像。
  • 在源上运行 Doxygen 以创建与 Xcode 兼容的文档集并安装它。这意味着当您在 Xcode 文档搜索中搜索内容时,也可以找到您的文档。
  • 在源代码上运行 Doxygen 以更新源代码树本身中 API 文档的签入版本。如果您使用 Subversion(它假定),那么这非常简洁,因为您所在分支的文档始终是最新的。例如,如果您托管在 Google Code 上,那就太好了。

请注意下面一些硬编码的项目特定值。我不想通过编辑脚本来破坏脚本。这些是从 Xcode 中的自定义脚本阶段启动的。您可以看到它们如何集成到上面链接的项目的 Xcode 项目中。

创建磁盘映像.sh:

#!/bin/sh

set -x

# Determine the project name and version
VERS=$(agvtool mvers -terse1)

# Derived names
VOLNAME=${PROJECT}_${VERS}
DISK_IMAGE=$BUILD_DIR/$VOLNAME
DISK_IMAGE_FILE=$INSTALL_DIR/$VOLNAME.dmg

# Remove old targets
rm -f $DISK_IMAGE_FILE
test -d $DISK_IMAGE && chmod -R +w $DISK_IMAGE && rm -rf $DISK_IMAGE
mkdir -p $DISK_IMAGE

# Create the Embedded framework and copy it to the disk image.
xcodebuild -target JSON -configuration Release install || exit 1
cp -p -R $INSTALL_DIR/../Frameworks/$PROJECT.framework $DISK_IMAGE

IPHONE_SDK=2.2.1

# Create the iPhone SDK directly in the disk image folder.
xcodebuild -target libjson -configuration Release -sdk iphoneos$IPHONE_SDK install \
    ARCHS=armv6 \
    DSTROOT=$DISK_IMAGE/SDKs/JSON/iphoneos.sdk || exit 1
sed -e "s/%PROJECT%/$PROJECT/g" \
    -e "s/%VERS%/$VERS/g" \
    -e "s/%IPHONE_SDK%/$IPHONE_SDK/g" \
    $SOURCE_ROOT/Resources/iphoneos.sdk/SDKSettings.plist > $DISK_IMAGE/SDKs/JSON/iphoneos.sdk/SDKSettings.plist || exit 1

xcodebuild -target libjson -configuration Release -sdk iphonesimulator$IPHONE_SDK install \
    ARCHS=i386 \
    DSTROOT=$DISK_IMAGE/SDKs/JSON/iphonesimulator.sdk || exit 1
sed -e "s/%PROJECT%/$PROJECT/g" \
    -e "s/%VERS%/$VERS/g" \
    -e "s/%IPHONE_SDK%/$IPHONE_SDK/g" \
    $SOURCE_ROOT/Resources/iphonesimulator.sdk/SDKSettings.plist > $DISK_IMAGE/SDKs/JSON/iphonesimulator.sdk/SDKSettings.plist || exit 1    

# Allow linking statically into normal OS X apps
xcodebuild -target libjson -configuration Release -sdk macosx10.5 install \
    DSTROOT=$DISK_IMAGE/SDKs/JSON/macosx.sdk || exit 1

# Copy the source verbatim into the disk image.
cp -p -R $SOURCE_ROOT/Source $DISK_IMAGE/$PROJECT
rm -rf $DISK_IMAGE/$PROJECT/.svn

# Create the documentation
xcodebuild -target Documentation -configuration Release install || exit 1
cp -p -R $INSTALL_DIR/Documentation/html $DISK_IMAGE/Documentation
rm -rf $DISK_IMAGE/Documentation/.svn

cat <<HTML > $DISK_IMAGE/Documentation.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<script type="text/javascript">
<!--
window.location = "Documentation/index.html"
//-->
</script>
</head>
<body>
<p>Aw, shucks! I tried to redirect you to the <a href="Documentaton/index.html">api documentation</a> but obviously failed. Please find it yourself. </p>
</body>
</html>
HTML

cp -p $SOURCE_ROOT/README $DISK_IMAGE
cp -p $SOURCE_ROOT/Credits.rtf $DISK_IMAGE
cp -p $SOURCE_ROOT/Install.rtf $DISK_IMAGE
cp -p $SOURCE_ROOT/Changes.rtf $DISK_IMAGE

hdiutil create -fs HFS+ -volname $VOLNAME -srcfolder $DISK_IMAGE $DISK_IMAGE_FILE

安装文档.sh:

#!/bin/sh
# See also http://developer.apple.com/tools/creatingdocsetswithdoxygen.html 

set -x

VERSION=$(agvtool mvers -terse1)

DOXYFILE=$DERIVED_FILES_DIR/doxygen.config
DOXYGEN=/Applications/Doxygen.app/Contents/Resources/doxygen
DOCSET=$INSTALL_DIR/Docset

rm -rf $DOCSET
mkdir -p $DOCSET || exit 1
mkdir -p $DERIVED_FILES_DIR || exit 1

if ! test -x $DOXYGEN ; then
    echo "*** Install Doxygen to get documentation generated for you automatically ***"
    exit 1
fi

# Create a doxygen configuration file with only the settings we care about
$DOXYGEN -g - > $DOXYFILE

cat <<EOF >> $DOXYFILE

PROJECT_NAME           = $FULL_PRODUCT_NAME
PROJECT_NUMBER         = $VERSION
OUTPUT_DIRECTORY       = $DOCSET
INPUT                  = $SOURCE_ROOT/Source
FILE_PATTERNS          = *.h *.m

HIDE_UNDOC_MEMBERS     = YES
HIDE_UNDOC_CLASSES     = YES
HIDE_UNDOC_RELATIONS   = YES
REPEAT_BRIEF           = NO
CASE_SENSE_NAMES       = YES
INLINE_INHERITED_MEMB  = YES
SHOW_FILES             = NO
SHOW_INCLUDE_FILES     = NO
GENERATE_LATEX         = NO
GENERATE_HTML          = YES
GENERATE_DOCSET        = YES
DOCSET_FEEDNAME        = "$PROJECT.framework API Documentation"
DOCSET_BUNDLE_ID       = org.brautaset.$PROJECT

EOF

#  Run doxygen on the updated config file.
#  doxygen creates a Makefile that does most of the heavy lifting.
$DOXYGEN $DOXYFILE

#  make will invoke docsetutil. Take a look at the Makefile to see how this is done.
make -C $DOCSET/html install

#  Construct a temporary applescript file to tell Xcode to load a docset.
rm -f $TEMP_DIR/loadDocSet.scpt

cat <<EOF > $TEMP_DIR/loadDocSet.scpt
tell application "Xcode"
    load documentation set with path "/Users/$USER/Library/Developer/Shared/Documentation/DocSets/org.brautaset.${PROJECT}.docset/"
end tell
EOF

# Run the load-docset applescript command.
osascript $TEMP_DIR/loadDocSet.scpt

重新生成文档.sh:

#!/bin/sh
# See also http://developer.apple.com/tools/creatingdocsetswithdoxygen.html 

set -x

VERSION=$(agvtool mvers -terse1)

DOXYFILE=$DERIVED_FILES_DIR/doxygen.config
DOXYGEN=/Applications/Doxygen.app/Contents/Resources/doxygen
DOCSET=$INSTALL_DIR/Documentation
APIDOCDIR=$SOURCE_ROOT/documentation

rm -rf $DOCSET
mkdir -p $DOCSET || exit 1
mkdir -p $DERIVED_FILES_DIR || exit 1

if ! test -x $DOXYGEN ; then
    echo "*** Install Doxygen to get documentation generated for you automatically ***"
    exit 1
fi

# Create a doxygen configuration file with only the settings we care about
$DOXYGEN -g - > $DOXYFILE

cat <<EOF >> $DOXYFILE

PROJECT_NAME           = $FULL_PRODUCT_NAME
PROJECT_NUMBER         = $VERSION
OUTPUT_DIRECTORY       = $DOCSET
INPUT                  = $SOURCE_ROOT/Source
FILE_PATTERNS          = *.h *.m

HIDE_UNDOC_MEMBERS     = YES
HIDE_UNDOC_CLASSES     = YES
HIDE_UNDOC_RELATIONS   = YES
REPEAT_BRIEF           = NO
CASE_SENSE_NAMES       = YES
INLINE_INHERITED_MEMB  = YES
SHOW_FILES             = NO
SHOW_INCLUDE_FILES     = NO
GENERATE_LATEX         = NO
GENERATE_HTML          = YES
GENERATE_DOCSET        = NO

EOF

#  Run doxygen on the updated config file.
$DOXYGEN $DOXYFILE

# Replace the old dir with the newly generated one.
rm -f $APIDOCDIR/*
cp -p $DOCSET/html/* $APIDOCDIR
cd $APIDOCDIR

# Revert files that differ only in the timestamp.
svn diff *.html | diffstat | awk '$3 == 2 { print $1 }' | xargs svn revert

# Add/remove files from subversion.
svn st | awk '
    $1 == "?" { print "svn add", $2 }
    $1 == "!" { print "svn delete",  $2 }
' | sh -

svn propset svn:mime-type text/html *.html
svn propset svn:mime-type text/css *.css
svn propset svn:mime-type image/png *.png
svn propset svn:mime-type image/gif *.gif
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有哪些好的 Xcode 脚本可以加快开发速度? 的相关文章

  • NSDate 返回错误的年份

    在 MyappAppDelegate m 文件中的 application didFinishLaunchingWithOptions 方法中 我刚刚写道 NSDateFormatter df NSDateFormatter alloc i
  • 链接器命令失败,退出代码为 1 -- Firebase

    对 iOS 开发相当陌生 有些人在将 firebase 安装到我的 iOS 应用程序中时遇到了一些麻烦 本质上 该应用程序要做的就是从 Firebase 数据库中获取有关全国各地路线的信息 该信息将输出到表格视图 该表格视图将允许用户选择其
  • 学习在 Xcode 中编译 C++

    我已经开始在学校广泛使用 C 现在我的程序已经达到了拥有超过 1 个文件 即头文件 驱动程序 实现文件 的地步 我对软件开发了解不够 无法通过查看苹果的指南来理解或掌握如何设置构建过程 有人可以指导我如何在 xcode 中编译一个带有头文件
  • 归档时 XCode 挂起

    当我尝试归档某个项目时 Xcode 无法响应 如果不管他 他会在很长一段时间后设法打开组织者 档案就在那里 如果从library developer xcode archives中手动删除 Xcode会再次响应 这种情况只发生在这个项目中
  • Swift Joint:在可观察对象中使用计时器发布者

    在这个问题被标记为重复之前这另一个问题 https stackoverflow com questions 57199922 create a timer publisher using swift combine 我试图了解出版商是如何运
  • 在 Objective-C 中导入 Swift 类,-Swift.h 文件未找到

    我有一个用 Objective C 编写的 iOS 项目 我在项目中创建了一个Swift类 成功生成了Swift中访问objective c的桥接头文件 并且运行良好 我的问题是相反的 我想在 Objective C 代码中导入 Swift
  • 提交的代码签名应用程序无效

    我尝试向应用程序商店提交应用程序 但收到以下错误 我见过类似的问题 并提出了 2 个不同的解决方案 但都没有解决问题 无效的代码签名权利 您的应用程序包的签名包含不受支持的权利值 具体来说 不支持密钥 com apple developer
  • 使用 xcassets 中的 imageNamed 加载 NSImage 在旧版 osx 版本中崩溃

    所以 我有一个在很多应用程序之间共享的 xcassets 我正在 Mac Mini 中使用 Xcode8 进行开发 其中安装了 MacOs Sierra 如果我在开发机上编译运行 就没有任何问题 然而 当我尝试在装有 OSX Maveric
  • 与 UIActivityViewController 共享 PDF 文件

    我正在尝试使用共享 PDF 文件UIActivityViewController但是当我按下按钮时 我没有共享文件的选项 我怎样才能显示这些选项 https i stack imgur com ywDQw jpg https i stack
  • 收到断言失败错误

    加载其中包含 UITableView 的视图之一时 出现以下错误 有谁知道如何修理它 我已经尝试过删除 void tableView UITableView tableView commitEditingStyle UITableViewC
  • 无法在新的 Xcode 10.2 (iOS 12.2) 中构建 Alamofire 框架

    由于以下错误 我无法在 Xcode 10 2 iOS 12 2 中为 swift 5 构建 Alamofire SWIFT VERSION 3 0 is unsupported supported versions are 4 0 4 2
  • 在 iPhone 上使用 Xcode Auto Layout 处理不同的图像尺寸

    通过纵向 iPhone 的自动布局 我不希望 iPhone 6 上的游戏角色的 UIImageView 尺寸与 iPhone 4S 中的完全相同 4S 的角色需要更小一些 否则看起来会太大 使用自动布局如何更改 iPhone 之间的图像尺寸
  • iPhone——是否可以在 Xcode 调试器中检查 UIView 的框架?

    当调试器在断点处停止时 我在那里找不到任何 UIView 的框架 是否有可能做到这一点 编辑 由于缺乏回应而开始赏金 需要明确的是 我正在寻找一种在不添加额外调试代码的情况下查看框架的方法 另外 如果答案是 不 你不能这样做 赏金将用于解释
  • 如何将 Lua 粘合到 C++ 代码?

    您使用 Luabind toLua 或其他库 如果使用 是哪一个 还是根本不使用 每种方法都有哪些优点和缺点 我不太同意 自己投票 将基本类型和静态 C 函数绑定到 Lua 是微不足道的 是的 但是当你开始处理表和元表时 情况就会发生变化
  • Swift - 本地通知不会被触发

    我正在 Swift 3 中编码 我只是想发送通知now没有任何延迟或间隔 然而 通知永远不会被触发 这是我的代码 视图控制器代码 import UserNotifications class HomeViewController UIVie
  • iPad 照片选择器崩溃

    我正在使用以下函数根据 UIActionSheet 的结果激活设备相机或图像选择器 如果 fromCamera YES 那么它适用于 iPhone 和 iPad 如果 fromCamera NO 那么它可以在 iPhone 上运行并出现图像
  • 检查定位服务是否开启

    我一直在对 CoreLocation 进行一些研究 最近 我遇到了一个在其他地方 但在 Objective C 和 iOS 8 中 已经讨论过的问题 我觉得问这个问题有点傻 但是如何在 iOS 9 上使用 swift 检查是否启用了位置服务
  • 本地化现有的 iOS 应用程序

    我不敢相信以前没有人问过这个问题 要么是我的编码实践太无组织性 要么是我没有使用正确的关键字 How can I localize an existing iOS app that does not use NSLocalizedStrin
  • XCode 无法将 iPhone 应用程序部署到 iPhone 3GS

    因此 我构建了我的 iPhone 应用程序 它在模拟器中运行良好 因此我想将其部署到我的 iPhone 上进行最后一轮测试 然后再使用我的分发配置文件进行公开 Beta 测试 我已经这样做过很多次了 从来没有出现过问题 然而 自从上次测试运
  • 在 OS X 上创建和使用静态库

    好的 我正在尝试创建一个 Cocoa 库 静态 并使用 但我不断收到错误 我创建了一个超基本的静态库 TSXLib 其中仅包含一个额外的类 import

随机推荐

  • 在 Vaadin 14 应用程序的服务器端通过 Java 获取用户 Web 浏览器的 IP 地址

    In 瓦丁流 https en wikipedia org wiki Vaadin Vaadin Flow 比如14 1版本 如何获取IP地址 https en wikipedia org wiki IP address用户的网络浏览器通过
  • python:生成器对象的属性

    是否可以在生成器对象上创建属性 这是一个非常简单的例子 def filter x for line in myContent if line x yield x 现在假设我有很多这样的过滤器生成器对象漂浮在周围 也许其中一些是匿名的 我想稍
  • 使用 awk 将大型复杂的一列文件拆分为多列

    我有一个由某些商业软件生成的文本文件 如下所示 它由括号分隔的部分组成 每个部分都有数百万个元素 但具体值因情况而异 1 2 3 11 22 33 111 222 333 我需要实现如下输出 1 11 111 2 22 222 3 33 3
  • Request.UrlReferrer 在 Internet Explorer 7、8、9 浏览器中返回“null”

    在 Internet Explorer 7 8 9 浏览器中 C 的 Request UrlReferrer 返回 null 其原因何在 它的解决办法是什么 页面上有一些 单击此处 按钮 单击该按钮后 将在新选项卡中打开一个新的 url 页
  • 在 JQGrid 中映射 JSON 数据

    我正在使用 jqGrid 3 6 4 和 jquery 1 4 2 在我的示例中 我得到以下 json 数据格式 我想将这些 json 数据映射到 jqgrid 的行中 page 1 total 1 records 6 rows head
  • poll() 超时为 0 时会做什么?

    我正在看poll man page http man7 org linux man pages man2 poll 2 html 它告诉我的行为poll 当超时参数传入正值和负值时 它没有告诉我如果超时会发生什么0 有任何想法吗 看着epo
  • 在 Autofac 中注册异步工厂

    我有一个从存储库获取的 Wallet 类 我正在尝试在 Autofac 中正确注册两者 以便使用钱包的类可以注入正确的实例 问题是存储库使用异步方法 返回任务 Autofac 支持这种情况吗 这不起作用 cb RegisterType
  • Coverity有Rest API吗

    我想存储结果覆盖性 http www coverity com 到 InfluxDB 我想知道 Coverity 是否有 REST API 如果您只是尝试将数据转储到 InfluxDB 则可以从 REST API 卷曲数据并将生成的 jso
  • 批量将 PDF 转换为 XPS

    我正在寻找一种廉价的方法将 1300 个 PDF 文档批量转换为 XPS 文档 我知道我可以简单地以这种格式打印它们 但这需要很长时间 有没有办法在 C 中以编程方式执行此操作 根据您对廉价的定义 有以下几种选择 便宜 低于 1000 美元
  • gcc:如何正确使用 __attribute((__may_alias__)) 以避免“取消引用类型双关指针”警告

    我有一些代码使用类型双关来避免调用成员 对象 的构造函数和析构函数 除非 直到实际上需要使用该对象 它工作正常 但在 g 4 4 3 下 我收到这个可怕的编译器警告 jaf jeremy desktop g O3 Wall puns cpp
  • 汇编正确使用字/字节/字 ptr

    我正在编写一个用于汇编的小机器代码生成器 我有一个关于立即记忆指令的问题 让我们看一下这 3 个场景 add ebx 04 0x1 add ebx 04 0x4040 add ebx 04 0x401000 我所做的是通过立即常量 我检查它
  • Facebook Graph API:获取带有应用 ID 和密钥的访问令牌

    https developers facebook com docs facebook login access tokens https developers facebook com docs facebook login access
  • 无法解析 React Native 项目上的模块 redux

    自从新版本的react native 0 26 0 以来 当我初始化一个新项目时 我收到了这个错误 当我 npm 安装 redux 等其他模块时 我遇到了同样的错误 然后在运行时找不到这些依赖项 还有其他人遇到这样的问题或有任何想法吗 gt
  • 借助 TypeScript 将 Angular 2 与旧版浏览器一起使用?

    由于 Angular 2 团队使用 TypeScript 进行构建 因此是否可以假设他们可以编译可在旧浏览器上运行的 Angular 2 版本 Edit 2 Angular 团队似乎已决定支持一些非常绿浏览器 Per Brad Green
  • iPhone核心位置:计算总高程损失/增益

    我想在记录核心位置数据结束时计算总海拔损失和增益 我很难思考这个问题的数学原理 假设我从 600 英尺处开始 在跟踪过程中上下移动 我将如何计算海拔增益和损失 Ideas 如果您想分别跟踪增益和损失 请保留两个累积成员变量 netEleva
  • PreferredContentSize 不缩小

    我使用 UIPopoverController 弹出窗口 我使用 PreferredContentSize 来设置大小 然后 我使用 Push 一个更大尺寸的新视图控制器 当子视图弹出时 我喜欢将窗口恢复到原始大小 但好像不行 我已经把 s
  • ZetPDF - 有人知道这个产品的背景吗? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 问题 ZetPDF 只是伪装的 PDFSharp 吗 这个产品会继续存在吗 ZetPDF 是谁 我们目前正在使用 PDFSharp 从头开
  • 实体框架复杂类型与创建新实体

    我正在阅读有关实体框架 4 0 的内容 我想知道为什么我应该创建一个复杂类型而不是一个新的实体 表 以及它们之间的关系 完美的例子就是地址 使用复杂类型作为地址比处理新实体要容易得多 对于复杂类型 您不必处理主键 考虑访问一个地址 有多少种
  • 仅在 Firefox 上跨源请求和混合内容

    我正在开发一个需要 HTTPS 的项目 因此我使用自签名证书启动 HTTPS 服务器 我还有一个启用了 CORS 的 HTTP API 服务器 我能够在 Chrome 上获取 API 请求 这里是预检响应的标头 带有 HTTP 状态代码 2
  • 有哪些好的 Xcode 脚本可以加快开发速度?

    Xcode 允许您创建自动化脚本来执行重复任务 您编写了哪些脚本来加快开发速度 我为我创建了三个适用于 Cocoa 和 iPhone 的 JSON Framework http code google com p json framewor