【问题标题】:Accessing contents from a remote plist从远程 plist 访问内容
【发布时间】:2016-07-16 19:32:29
【问题描述】:

在有人将我的问题标记为重复之前,让我告诉你,我已经浏览了所有答案,但我找不到解决方案。

所以这是我的问题,

一旦应用程序使用 key 启动,我会尝试设置用户默认值,例如 servername、serverport、UDID、languagepack 和 erid。

所有这些变量都是在服务器端设置的。

我知道我可以编写一个逻辑来下载该 plist 并访问数据,但在这里,我只能编写一个应用程序,并且服务器因我们拥有的所有不同客户端而异。

所以当这个应用程序从服务器推送到设备时,plist 也会被推送。

但是每当我尝试访问内容时,它都会返回 nil 并且应用程序崩溃(在 objective-c 中使用相同的逻辑可以正常工作,可能是因为 nil 被视为目标 c 中的值)。

我的问题是这怎么可能,因为当设备中安装了配置文件时,应用程序如何访问内容而无需在代码中编写任何逻辑。

这是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>CommandUUID</key>
<string>InstallApplication;Collection=302</string>
<key>Command</key>
<dict>
    <key>RequestType</key>
    <string>InstallApplication</string>
    <key>ManifestURL</key>
    <string>https://%ServerName%:%ServerPort%/MDM/apprepository/1/appupload/2/2/Manifest.plist</string>
    <key>ManagementFlags</key>
    <integer>1</integer>
    <key>ChangeManagementState</key>
    <string>Managed</string>
    <key>Configuration</key>
    <dict>
        <key>ServerName</key>
        <string>%ServerName%</string>
        <key>ServerPort</key>
        <string>%ServerPort%</string>
        <key>UDID</key>
        <string>%udid%</string>
        <key>ErID</key>
        <string>%erid%</string>
        <key>IsLanguagePackEnabled</key>
        <string>%license_pack_enabled%</string>
    </dict>

</dict>

提前谢谢你。

编辑:我尝试注册默认值,我尝试使用 DictionaryForKey 而不是 objectForKey,键为“com.apple.configuration.managed”(这两种情况都没有区别),我在 swift 中的代码是

let userDefaults : NSUserDefaults = NSUserDefaults.standardUserDefaults()
 if let dict = userDefaults.dictionaryForKey(mdmiosagent_Constants.MANAGED_APP_CONFIGURATION) {

        NSUserDefaults.standardUserDefaults().registerDefaults(dict)
 if let serverName = dict[mdmiosagent_Constants.SERVERNAMEKEY] as? String{
 }
        if let serverPort = dict[mdmiosagent_Constants.SERVERPORTKEY] as? String{
}
        if let UDID = dict[mdmiosagent_Constants.UDIDKEY] as? String{
}
        if let languagePack = dict[mdmiosagent_Constants.IS_LANG_PACK_ENABLED] as? String{
}
        if let ErID = dict[mdmiosagent_Constants.ERIDKEY] as? String{
}
        if let authToken = dict[mdmiosagent_Constants.AUTHTOKENKEY] as? String {
 }else {
            authToken = ""
        }


if let scope = dict[mdmiosagent_Constants.SCOPEKEY] as? String {

        } else {
            scope = ""
        }

    }

常量声明为

  static let SERVERNAMEKEY = "ServerName"
static let SERVERPORTKEY = "ServerPort"
static let ERIDKEY = "ErID"
static let UDIDKEY = "UDID"
static let AUTHTOKENKEY = "authtoken"
static let SCOPEKEY = "SCOPE"
static let MANAGED_APP_CONFIGURATION = "com.apple.configuration.managed"
static let IS_LANG_PACK_ENABLED = "IsLanguagePackEnabled"

【问题讨论】:

  • 请也向我们展示您的代码。

标签: ios objective-c swift plist


【解决方案1】:

查看您的代码,我在任何地方都看不到寄存器。我不能保证任何事情,但我至少会尝试改变:

let userDefaults : NSUserDefaults = NSUserDefaults.standardUserDefaults()

到:

let userDefaults : NSUserDefaults = NSUserDefaults.standardUserDefaults()
NSUserDefaults.standardUserDefaults().registerDefaults(userDefaults)

您还需要测试以确保您已正确加载它:

    if let path = NSBundle.mainBundle().pathForResource("Defaults", ofType: "plist")
        , defaults = NSDictionary(contentsOfFile:path) as? [String : AnyObject] {
        NSUserDefaults.standardUserDefaults().registerDefaults(defaults)

【讨论】:

  • 好的,退一步。 NSBundle.mainBundle().pathForResource("Defaults", ofType: "plist") 返回值还是 nil?这是默认文件的正确名称吗?查看捆绑包。
  • 好的,所以当你let path = NSBundle.mainBundle().pathForResource("install profile", ofType: "plist") 时你得到一个值?
  • 我的问题仍然存在:您是否真的在您的包中获得了一个文件,该文件是否在您期望的位置并具有您期望的名称?您不会从不存在的文件中读取许多默认值 :-) 建议:制作一个除了运行该行并在 NSTextField 中打印结果之外什么都不做的应用程序。将它从您的服务器推送到 iOS 设备,看看您是否可以找到该捆绑包。
【解决方案2】:

好吧,我尝试初始化用于将默认值存储为 NSDictionary 而不是 [String: AnyObject] 的字典,并且成功了!哇,没想到会是这个原因。感谢大家提供建议。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-26
    • 2019-06-11
    • 1970-01-01
    相关资源
    最近更新 更多