我在Xcode中创建了一个静态库,我可以在其他项目中成功使用它.但是,对于像plists这样的资源,我发现必须在我的库中引用在项目所在的主项目中引用的任何plist.
在我的静态库项目中,我的plist包含在目标的"Copy Bundle Resources"阶段.在我的代码中,这是我正在做的事情:
NSBundle *mainBundle = [NSBundle mainBundle];
NSString *filePath = [mainBundle pathForResource:@"MyClassParams" ofType:@"plist"];
NSMutableDictionary* params = [[NSMutableDictionary alloc] initWithContentsOfFile:filePath];
Run Code Online (Sandbox Code Playgroud)
如果我使用mainBundle并且MyClassParams.plist包含在主项目中,那么一切都很好.如果MyClassParams.plist包含在库项目中,则它不起作用.
假设[NSBundle mainBundle]引用了错误的静态方法,我将其替换为:
NSBundle *mainBundle = [NSBundle bundleForClass:[MyClass class]];
Run Code Online (Sandbox Code Playgroud)
这也不起作用.
那么,是否可以将plist或任何其他资源包含在静态库中 - 或者我是否必须在使用lib的项目中包含我需要的内容?
我对iOS和编程比较陌生,之前我做了一个应用程序,但它使用了plist进行存储,我将其保存到文档文件夹中.现在,我正在考虑切换到Core Data,但它看起来有点复杂,我不确定它是否适用于我想要的东西.我将有一堆数据需要绘制,所以我不确定Core Data是否最适合这个,因为我似乎无法在.xcdatamodeld文件中创建数组类型.Core Data还有哪些其他优势?它更快吗?更容易使用(一旦你设置)?
更新:对于任何想知道的人,我完成了应用程序,了解如何使用Core Data是完全值得的,而且我原本以为它的复杂程度要低得多.用钳子做这件事本来就是地狱.他们开始做这件事的方式起初看起来有些神秘,但如果你刚开始使用它,你就会明白它.关系真是令人敬畏的关系.
我使用pkgbuild创建了一个默认的Component Property List文件.该文件看起来像:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList- 1.0.dtd">
<plist version="1.0">
<array>
<dict>
<key>BundleHasStrictIdentifier</key>
<true/>
<key>BundleIsRelocatable</key>
<true/>
<key>BundleIsVersionChecked</key>
<true/>
<key>BundleOverwriteAction</key>
<string>upgrade</string>
<key>RootRelativeBundlePath</key>
<string>MyApp.app</string>
</dict>
</array>
</plist>
Run Code Online (Sandbox Code Playgroud)
我想使用shell脚本修改此文件.我尝试使用默认值写但它没有做任何事情.
有什么办法呢?(例如:我想将BundleIsRelocatable设置为false)
我正在创建一个iPhone应用程序,在其中我获得所有国家/地区的名称,徽标和玩家名称.我想将数据保存在服务器.plist
而不是sqlite
服务器中.我不知道如何创建一个plist文件DocumentDirectory
并保存数据.
请有人建议我如何在plist文件中保存数据.
我正在使用launchd来运行一些自动化任务,我想知道'Day'和'Weekday'之间有什么区别.
根据http://discussions.apple.com/thread.jspa?threadID=1361809,有一个"微妙"的差异,可能导致launchd行为不端.
最后,我想在每个工作日(周一至周五)早上8点运行一个plist,但我不知道如何获得相当于
0 8 * * 1-5
Run Code Online (Sandbox Code Playgroud) 我从plist中的字典加载一个值但是当我将它打印到控制台时,它会打印:可选(星期一标题)而不仅仅是"星期一标题".
如何在打印时摆脱我的值的Optional()?
var plistPath = NSBundle.mainBundle().pathForResource("days", ofType: "plist")
var plistArray = NSArray(contentsOfFile: plistPath!) as NSArray!
for obj: AnyObject in plistArray {
if var dicInfo = obj as? NSDictionary {
let todayTitle: AnyObject? = dicInfo.valueForKey("Title")
println(todayTitle)
}
}
Run Code Online (Sandbox Code Playgroud) 字典和数组之间有什么区别,特别是在使用PLIST文件时?使用一个优于另一个有什么好处?谢谢!
目前我正在使用此代码
/usr/libexec/PlistBuddy -c "Set PreferenceSpecifiers:1:DefaultValue $productVersion" "Test/Settings.bundle/Root.plist"
Run Code Online (Sandbox Code Playgroud)
在构建阶段的脚本部分中,将产品版本放在应用程序设置的只读字段中.该字段具有首选项数组的位置1(从0开始).
我问是否有可能使用更强大的1来访问该字段,因为我或其他开发人员在开发过程中可能会意外地改变位置.
我可以访问该元素,指定它的标识符,无论其位置如何?
为了更好地解释我的需求,我写下了一个例子.我需要把像1.2.345
进入string
第2节点dict
的array
即我需要从改变0.0.0
到1.2.345
.是否可以访问dict
节点而不说明它是数组中的第二个?我要求在PlistBuddy中使用类似于xpath表达式的东西(如果有的话).
<?xml version="1.0" encoding="UTF-8"?>
<dict>
<key>PreferenceSpecifiers</key>
<array>
<dict>
<key>Title</key>
<string>Application info</string>
<key>Type</key>
<string>PSGroupSpecifier</string>
</dict>
<dict>
<key>DefaultValue</key>
<string>0.0.0</string>
<key>Key</key>
<string>version</string>
<key>Title</key>
<string>Version</string>
<key>Type</key>
<string>PSTitleValueSpecifier</string>
</dict>
<dict>
<key>DefaultValue</key>
<string>0</string>
<key>Key</key>
<string>build</string>
<key>Title</key>
<string>Build</string>
<key>Type</key>
<string>PSTitleValueSpecifier</string>
</dict>
...
Run Code Online (Sandbox Code Playgroud) 我正在尝试将我的xcarchive转换为IPA(XCode 7.1.1).以下命令
xcodebuild
-exportArchive -archivePath foo.xcarchive -exportPath . -exportFormat IPA
Run Code Online (Sandbox Code Playgroud)
失败了
路径'foo.xcarchive'中的存档不是单包存档
由于上面的命令在技术上已弃用,我还尝试了新的表单:
xcodebuild
-exportArchive -archivePath foo.xcarchive -exportPath .
-exportOptionsPlist ipa.plist
Run Code Online (Sandbox Code Playgroud)
凡ipa.plist
如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>method</key>
<string>app-store</string>
</dict>
</plist>
Run Code Online (Sandbox Code Playgroud)
然后导致错误:
错误:exportArchive:关键'方法'的exportOptionsPlist错误:预期{}之一,但找到了app-store
现在,尝试调试这个我打开了xcarchive文件夹并检查了它的结构.我注意到我在同一级别上有一个文件夹,Products\Applications\foo.app
因此我将其删除并再次尝试无效(相同的结果).然后我继续从foo.app中删除文件,直到我只剩下DWARF二进制文件 - 仍然没有雪茄(相同的结果),尽管这可能是因为我通过手动删除文件搞砸了应用程序签名.
我正在编写一个应用程序,它在启动时从包中的am xml plist读取信息.plist中的信息已通过多天的工作进行编译,我希望确保在分发后不能从另一方轻松地从应用程序包中提取它.有没有办法保护或加密包含在您的应用包中的xml plists?
任何帮助将不胜感激,请.