我正在尝试为 iOS 项目的持续build设置构建服务器。 由于我需要经常重新创建 Xcode 项目(它是统一构建的),iCloud 将被重置为 OFF。
我可以通过脚本复制授权文件(使用 iCloud key ),但我仍然需要单击实际的复选框来打开 iCloud。
我设法手动更改了 XC 项目,但它不是很安全,因为 XC 项目结构可能会发生变化。
您知道更好的方法吗? 干杯!
最佳答案
显然 TO 解决了这个问题,但由于似乎有更多人对此感兴趣,这里有一个可能的解决方案。
您可以编写一个脚本来编辑您的 xcodeproj 文件中的 project.pbxproj(例如,可以使用 finder 中的“显示包内容”选项进行查看)。
在此文件中有一个项目设置部分,称为 PBXProject 部分。在那里,您可以为目标添加功能。您可能需要编写自定义解析逻辑,因为此文件是在 XCode config format 中编写的。 ,没有像 XML 或 JSON 这样流行的东西。
您要更新的部分如下所示:
/* Begin PBXProject section */
EB1DDE9C1A3334EC00D778DE /* Project object */ = {
isa = PBXProject;
attributes = {
LastSwiftUpdateCheck = 0700;
LastUpgradeCheck = 0610;
/* ...more settings */
TargetAttributes = {
EB1DDEA31A3334EC00D778DE = {/* this is one target */
CreatedOnToolsVersion = 6.1.1;
DevelopmentTeam = 37QAPDY2PR;
/* ...more settings */
};
EB9F6CE11A8812550038355B = {/* another possible target */
CreatedOnToolsVersion = 6.2;
DevelopmentTeam = 37QAPDY2PR;
/* ...more settings */
};
};
};
/* ...more settings */
};
/* End PBXProject section */
您想将 iCloud 功能添加到目标。这看起来像这样:
SystemCapabilities = {
com.apple.iCloud = {
enabled = 1;
};
};
假设您想将 iCloud 功能添加到目标 EB1DDEA31A3334EC00D778DE,那么 TargetAttributes 条目将如下所示:
TargetAttributes = {
EB1DDEA31A3334EC00D778DE = {/* this is one target */
CreatedOnToolsVersion = 6.1.1;
DevelopmentTeam = 37QAPDY2PR;
SystemCapabilities = {
com.apple.iCloud = {
enabled = 1;
};
};
};
EB9F6CE11A8812550038355B = {/* another possible target */
CreatedOnToolsVersion = 6.2;
DevelopmentTeam = 37QAPDY2PR;
/* ...more settings */
};
};
现在你需要确定一些事情才能做到这一点:
1.识别部分
我会让脚本查找字符串“Begin PBXProject section”,然后查找“TargetAttributes”,这两个字符串在文件中都是唯一的。从理论上讲,“TargetAttributes”应该足够了,但更好的是安全......并记住向脚本添加适当的日志记录并验证结果,因为这些字符串在未来的 XCode 版本中很容易更改(不过,我已经看到它们没有改变,有一段时间已经)。
<强>2。确定目标
此文件中有多个部分,您可以在其中看到与名称关联的目标的 id。我只是自己查找并在脚本中对其进行硬编码,因为除非您重新创建目标,否则此 ID 不会更改。如果您真的需要它,您还可以自动执行此操作...通过查找目标的名称及其与 id 关联的格式。应该还有其他配置文件出现此关联(在此文件中,名称仅显示为注释)。
3.处理目标已经有 SystemCapabilities 条目,并且已经有 iCloud 条目的情况。
如果您的目标具有其他功能,则此条目可能已经存在。此外,如果您已经启用了 iCloud,或者您曾经启用和禁用了 iCloud,则该条目也将存在(值为 0)。这必须在脚本中处理(如果项目文件是新的,那么最新的应该不是问题)。
除此之外,您可能还必须添加对权利文件的引用。您必须将其添加到相应目标的构建配置中。为此:
4.查找构建配置 ID
您的目标可能有多个构建配置,例如调试和发布。您必须找到要为其添加对权利文件的引用的构建配置的 ID。为此,有一个名为 XCConfigurationList 的部分(查找/* Begin XCConfigurationList section */)。在那里寻找我们在 1. 中得到的目标 id,然后找到您需要的配置的配置 id。
5.在 XCBuildConfiguration 部分中查找构建配置 ID
转到/* Begin XCBuildConfiguration 部分 */并查找在 5. 中找到的 id,然后将路径添加到它的 buildSettings。例如:
例如你有这样的东西
EB9F6CF33A861055BB38355B /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = B82B36921BDRI3622B0EC99 /* Pods-mytargetname.debug.xcconfig */;
buildSettings = {
/* build settings... */
CODE_SIGN_ENTITLEMENTS = mytargetname/myentitlements.entitlements; /* <-- add this */
};
name = Debug;
};
请注意,XCode 应该“知道”权利文件(就像您的项目文件的其余部分一样)。
强>关于ios - 通过脚本在 Xcode 项目上启用 iCloud,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25011644/
我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚
如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby
尝试通过RVM将RubyGems升级到版本1.8.10并出现此错误:$rvmrubygemslatestRemovingoldRubygemsfiles...Installingrubygems-1.8.10forruby-1.9.2-p180...ERROR:Errorrunning'GEM_PATH="/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/ruby-1.9.2-p180@global:/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/rub
我正在使用puppet为ruby程序提供一组常量。我需要提供一组主机名,我的程序将对其进行迭代。在我之前使用的bash脚本中,我只是将它作为一个puppet变量hosts=>"host1,host2"我将其提供给bash脚本作为HOSTS=显然这对ruby不太适用——我需要它的格式hosts=["host1","host2"]自从phosts和putsmy_array.inspect提供输出["host1","host2"]我希望使用其中之一。不幸的是,我终其一生都无法弄清楚如何让它发挥作用。我尝试了以下各项:我发现某处他们指出我需要在函数调用前放置“function_”……这
我正在编写一个gem,我必须在其中fork两个启动两个webrick服务器的进程。我想通过基类的类方法启动这个服务器,因为应该只有这两个服务器在运行,而不是多个。在运行时,我想调用这两个服务器上的一些方法来更改变量。我的问题是,我无法通过基类的类方法访问fork的实例变量。此外,我不能在我的基类中使用线程,因为在幕后我正在使用另一个不是线程安全的库。所以我必须将每个服务器派生到它自己的进程。我用类变量试过了,比如@@server。但是当我试图通过基类访问这个变量时,它是nil。我读到在Ruby中不可能在分支之间共享类变量,对吗?那么,还有其他解决办法吗?我考虑过使用单例,但我不确定这是
我有一个在Linux服务器上运行的ruby脚本。它不使用rails或任何东西。它基本上是一个命令行ruby脚本,可以像这样传递参数:./ruby_script.rbarg1arg2如何将参数抽象到配置文件(例如yaml文件或其他文件)中?您能否举例说明如何做到这一点?提前谢谢你。 最佳答案 首先,您可以运行一个写入YAML配置文件的独立脚本:require"yaml"File.write("path_to_yaml_file",[arg1,arg2].to_yaml)然后,在您的应用中阅读它:require"yaml"arg
我的最终目标是安装当前版本的RubyonRails。我在OSXMountainLion上运行。到目前为止,这是我的过程:已安装的RVM$\curl-Lhttps://get.rvm.io|bash-sstable检查已知(我假设已批准)安装$rvmlistknown我看到当前的稳定版本可用[ruby-]2.0.0[-p247]输入命令安装$rvminstall2.0.0-p247注意:我也试过这些安装命令$rvminstallruby-2.0.0-p247$rvminstallruby=2.0.0-p247我很快就无处可去了。结果:$rvminstall2.0.0-p247Search
我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘
我实际上是在尝试使用RVM在我的OSX10.7.5上更新ruby,并在输入以下命令后:rvminstallruby我得到了以下回复:Searchingforbinaryrubies,thismighttakesometime.Checkingrequirementsforosx.Installingrequirementsforosx.Updatingsystem.......Errorrunning'requirements_osx_brew_update_systemruby-2.0.0-p247',pleaseread/Users/username/.rvm/log/138121
我已经像这样安装了一个新的Rails项目:$railsnewsite它执行并到达:bundleinstall但是当它似乎尝试安装依赖项时我得到了这个错误Gem::Ext::BuildError:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcheckingforlibkern/OSAtomic.h...yescreatingMakefilemake"DESTDIR="cleanmake"DESTDIR="