配置文件的命令行更新
Posted
技术标签:
【中文标题】配置文件的命令行更新【英文标题】:Command line Update of Provisioning Profiles 【发布时间】:2011-06-12 07:28:19 【问题描述】:我在这方面找不到任何东西(也许我只是使用了错误的搜索词..): 我们正在尝试为我们的应用程序构建一个合理的持续集成设置。为了有一个真正明智的实现,构建服务器应该能够自动从苹果刷新使用的配置文件。类似于 X-Code 管理器的功能,但通过命令行自动执行。 任何线索,如果这可能吗?
【问题讨论】:
看看下面的网址;***.com/questions/4369119/…我觉得会有帮助的。 感谢您提出这个问题。到目前为止,我的命令行解决方案是$ open vnc://server
;-)
【参考方案1】:
这是我的 bash 脚本,其中脚本的第一个参数 ($1) 是新配置文件的位置。
rm -Rf ~/Library/MobileDevice/Provisioning\ Profiles/*
cp "$1"/*.* ~/Library/MobileDevice/Provisioning\ Profiles/
基本上,该 ~/Library/MobileDevice/Provisioning Profiles/ 文件夹中的任何内容都可用于构建(并将显示在 Xcode 中)。
如果您希望建立一个 CI 系统,我最近发表了一个关于使用 Hudson 的演讲,并提供了一些幻灯片和注释over here。如果您对此有任何疑问,我的电子邮件在我的网站上。
【讨论】:
酷,感谢您的回答。但是您知道如何获得 1 美元吗?首先,您如何将配置文件放到您的构建机器上? 我的工作主要是承包,每个客户都有自己的 iTunes Connect 帐户,所以我已将其委托给他们。对他们进行了如何使用新的 UDID 更新配置文件的培训,并且我与每个人共享了一个 Dropbox.com 文件夹,他们在其中保存了特定的配置文件。我构建过程的第一步是使用 Dropbox 上的客户端特定配置文件更新配置文件,因此构建始终使用最新的。上传新的配置文件也是一个构建触发器,因此他们可以添加新设备并获得新的构建,而无需我的干预。 好的,这是有道理的。如何使用 Dropbox 触发新构建?文件夹操作?或者是否有特定的选项可以做到这一点? 我在 Hudson 安装了一个插件,忘记了名称,它检查文件夹的内容是否已更改。这是逐个项目配置的,Hudson 中的每个项目都会检查 Dropbox 中特定于项目的文件夹是否有更改(即新的配置文件)。 这个解决方案对我来说值得注意的是它说明你不需要将文件重命名为<provid>.mobileprovision
,当你使用 XCode 时会发生这种情况(我在 4.2 上)导入文件。这意味着xcrun ... PackageApplication
的--embed
参数可以是稳定的,这使得自动化变得更加容易。【参考方案2】:
更新:Cupertino 将不再适用于最新的 iTunes。考虑改用sigh
听起来像这个命令行界面会很有帮助:
https://github.com/nomad/cupertino
它允许您像这样下载所有分发配置文件(感谢@tdubik):
ios profiles:download:all --type distribution
另一种方法是使用企业开发许可证(每年 300 美元),让您在配置的情况下为设备构建!因此,您可以构建您的应用程序并将其发送到设备,而无需前往 Apple 开发中心或注册任何新设备。
请注意,这不允许您将应用分发到应用商店,但如果您是一家为客户构建大量应用的开发公司,它可能会大大简化您的“构建并发送给客户”流程!我不确定这是否在 Apple 的合法使用政策中,因此请在考虑该选项之前检查一下。但这可能是原型等需要考虑的事情,当他们真正想要发布它时,你让他们获得自己的开发者计划许可证。
【讨论】:
企业许可证不适用于 App Store 分发,因此您必须拥有另一个 Apple 开发者帐户才能有效地使用它(假设您计划将您的应用程序发布到 App Store)。跨度> 感谢 github 链接!最佳答案在这里。但是,我不建议使用 Enterprise 为客户构建应用程序——Apple 不喜欢这样。 Enterprise 是“仅用于公司内部部署”,我相信协议规定您必须控制与 Enterprise 一起使用的所有设备。 是的,我不确定这是否属实......我期望的一样多,并认为有人比我知道的更知情......感谢您的澄清! 与 cupertino 一样简单ios profiles:download:all --distribution
这里是sigh
的链接,Fastlane
开发的用于管理配置文件(创建、下载、更新、修复)的工具:github.com/fastlane/fastlane/tree/master/sigh#readme【参考方案3】:
尝试使用来自https://github.com/lacostej/apple-dev的apple_dev_center.rb
它会解析来自苹果开发者网站的信息并下载配置文件供您自动将它们复制到正确的位置。
【讨论】:
【参考方案4】:一段时间以来,我一直在努力完成这项工作。终于成功了!!
可以使用 fastlane sigh 仅下载和安装您需要的临时配置文件。
fastlane sigh renew --adhoc -n "provisional_profile_name"
--app_identifier "your_app_identifier" -u "apple_login _username" --ignore_profiles_with_different_name
注意:此命令需要应用程序的任何临时配置文件 安装在系统中。否则它会为我抛出错误。
provisional_profile_name = 只是配置文件的名称,不是 需要扩展。
【讨论】:
【参考方案5】:Sigh
可以为您管理配置文件。但是,它不支持安装您已经获取的配置文件。但是,我仍然觉得看看他们的source for how they actually install a profile once they've downloaded it 很有价值。
谢天谢地,它与James J's answer 非常相似:
def self.install_profile(profile)
UI.message "Installing provisioning profile..."
profile_path = File.expand_path("~") + "/Library/MobileDevice/Provisioning Profiles/"
uuid = ENV["SIGH_UUID"] || ENV["SIGH_UDID"]
profile_filename = uuid + ".mobileprovision"
destination = profile_path + profile_filename
# If the directory doesn't exist, make it first
unless File.directory?(profile_path)
FileUtils.mkdir_p(profile_path)
end
# copy to Xcode provisioning profile directory
FileUtils.copy profile, destination
if File.exist? destination
UI.success "Profile installed at \"#destination\""
else
UI.user_error!("Failed installation of provisioning profile at location: #destination")
end
end
我有一个脚本可以为我执行这个本地安装:
#!/bin/bash -euo pipefail
BASH_SOURCE_DIR="$( cd "$( dirname "$BASH_SOURCE[0]" )" && pwd )"
cd "$BASH_SOURCE_DIR"
# by default bash passes the glob characters if nothing matched the glob
# disable that
# http://***.com/a/18887210/9636
shopt -s nullglob
# this creates a proper bash array, which we need since our profiles
# have funny characters in them
MOBILE_PROVISIONS=(*.mobileprovision)
# re-enable default nullglob behavior
shopt -u nullglob
# On a brand new machine that has never run any app on a development device
# the ~/Library/MobileDevice/"Provisioning Profiles" directory doesn't exist
mkdir -p ~/Library/MobileDevice/"Provisioning Profiles"
for mobileprovision in "$MOBILE_PROVISIONS[@]"
do
uuid=$( ./uuid-from-mobileprovision.bash "$mobileprovision" )
cp "$mobileprovision" ~/Library/MobileDevice/"Provisioning Profiles"/"$uuid".mobileprovision
done
这取决于另一个uuid-from-mobileprovision.bash
脚本:
#!/bin/bash -euo pipefail
if [ ! -f "$1" ]
then
echo "Usage: $0 <path/to/mobileprovision/file>" 1>&2
exit 1
fi
UUID=$( grep --text --after-context=1 UUID "$1" | grep --ignore-case --only-matching "[-A-Z0-9]\36\" )
if [ -z "$UUID" ]
then
echo "Invalid mobileprovision file: $1" 1>&2
exit 2
else
echo "$UUID"
fi
【讨论】:
fastlane 可以使用免费的开发帐户吗?它一直给我一个错误,我没有user_details_data
的权限以上是关于配置文件的命令行更新的主要内容,如果未能解决你的问题,请参考以下文章
pytestconfig--获取命令行参数及pytest.ini文件配置