命令行更新供应配置文件

时间:2011-01-20 08:41:02

标签: iphone xcode provisioning

我找不到任何相关内容(也许我只是使用了错误的搜索条件..):
我们正在尝试为我们的应用程序构建合理的持续集成设置。为了实现真正合理的实现,构建服务器应该能够从apple自动刷新使用的配置文件。与X-Code组织者的工作类似,但通过命令行自动完成 任何线索,如果可能的话?

5 个答案:

答案 0 :(得分:54)

这是我的bash脚本,其中脚本的第一个参数($ 1)是新配置文件的位置。

rm -Rf ~/Library/MobileDevice/Provisioning\ Profiles/*
cp "$1"/*.* ~/Library/MobileDevice/Provisioning\ Profiles/

基本上,〜/ Library / MobileDevice / Provisioning Profiles /文件夹中的任何内容都可用于构建(并将显示在Xcode中)。

如果你想建立一个CI系统,我最近就Hudson使用它进行了讨论,并提出了一些幻灯片和注释over here。如果您对此有任何疑问,我的电子邮件将在我的网站上。

答案 1 :(得分:16)

更新:Cupertino将不再使用最新的iTunes。请考虑使用sigh代替


这个命令行界面听起来很有帮助:

https://github.com/nomad/cupertino

允许您下载所有分发配置文件(感谢@tdubik):

ios profiles:download:all --type distribution

另一种方法是使用企业开发许可证(300美元/年),允许您在没有配置的情况下为设备构建!因此,您可以构建应用程序,并将其发送到设备,而无需前往Apple Dev中心或注册任何新设备。

请注意,这不允许您将应用程序分发到appstore,但如果您是一个为客户构建大量应用程序的开发人员,它可以简化您的“构建并发送给客户”流程相当一块!我不确定这是否属于Apple的合法使用政策,所以请在考虑该选项之前检查一下。但它可能需要考虑原型等,当他们真正想要发货时,你可以让他们获得自己的开发者计划许可。

答案 2 :(得分:1)

尝试使用https://github.com/lacostej/apple-dev

中的apple_dev_center.rb

它解析苹果开发者网站上的信息并下载配置文件,以便将它们自动复制到正确的位置。

答案 3 :(得分:1)

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://stackoverflow.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

答案 4 :(得分:0)

我一直试图让这项工作有效。终于做到了!!

可以使用fastlane叹息下载并仅安装您需要的临时配置文件。

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 =只是个人资料名称的名称,不是   需要延期。