2016-03-29 24 views
0

Bevor jemand meine Frage als Duplikat markiert, lassen Sie mich Ihnen sagen, dass ich alle Antworten durchgegangen bin und ich keine Lösung finden konnte.Zugriff auf Inhalte von einem Remote-Gerät

So, hier ist meine Frage,

Ich versuche, die userdefaults wie serverserver, UDID, und Language erid so schnell einzustellen, wie die App eine Taste startet mit.

Alle diese Variablen werden auf der Serverseite festgelegt.

Ich weiß, dass ich eine Logik schreiben kann, um diese pliste herunterzuladen und auf die Daten zuzugreifen, aber hier kann ich nur eine App schreiben und der Server variiert für alle verschiedenen Kunden, die wir haben.

Also, wenn diese App von einem Server auf ein Gerät geschoben wird, wird diese Plist auch gedrückt.

Aber immer wenn ich versuche, auf den Inhalt zuzugreifen, gibt es null zurück und die App stürzt ab (was mit der gleichen Logik in objective-c funktionierte, möglicherweise aufgrund der Tatsache, dass nil als Wert in Ziel c genommen wird) .

Meine Frage ist, wie ist das möglich, weil, wenn ein Profil in dem Gerät installiert ist, wie die App auf den Inhalt ohne Logik in den Code geschrieben zugreifen.

Und das ist die 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> 

Vielen Dank im Voraus.

Edit: Ich habe versucht, die Standardwerte registriert, habe ich versucht DictionaryForKey statt objectForKey mit dem Schlüssel Wesen „com.apple.configuration.managed“ (beide Fälle machen keinen Unterschied) und meinen Code in schnellen Verwendung ist

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 = "" 
     } 

    } 

wobei die Konstanten deklariert werden als

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" 
+0

Bitte zeigen Sie uns Ihren Code auch. –

Antwort

0

Nun, ich habe versucht, das Wörterbuch zu initialisieren, das zum Speichern der Standardwerte als NSDictionary anstelle von [String: AnyObject] verwendet wird, und es hat funktioniert !! Woah, hätte nie erwartet, dass dies der Grund sein würde. Vielen Dank für die Bereitstellung von Vorschlägen.

1

über Ihren Code sehen, sehe ich nicht ein Register überall. Ich kann nichts versprechen, aber ich würde zumindest versuchen zu ändern:

let userDefaults : NSUserDefaults = NSUserDefaults.standardUserDefaults() 

zu:

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

Sie auch sicher sein, testen wollen, dass Sie es richtig geladen haben:

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

Ok, ein Schritt zurück. Gibt NSBundle.mainBundle(). PathForResource ("Defaults", ofType: "plist") einen Wert oder Nil zurück? Ist das der richtige Name für die Standarddatei? Schau in das Bündel. –

+0

Ok, also, wenn Sie 'Pfad = NSBundle.mainBundle(). PathForResource (" Profil installieren ", vonTyp:" Plist ")' Sie erhalten einen Wert? –

+1

Meine Frage bleibt: Erhalten Sie tatsächlich eine Datei in Ihrem Bundle, und ist diese Datei an der Stelle, die Sie erwarten, und haben Sie den Namen, den Sie erwarten? Sie werden nicht viele Standardwerte aus einer nicht existierenden Datei lesen :-) Vorschlag: Erstellen Sie eine App, die nichts tut, außer diese Zeile auszuführen und die Ergebnisse in einem NSTextField auszugeben. Schieben Sie das von Ihrem Server auf das iOS-Gerät und sehen Sie, ob Sie das Paket finden können. –

Verwandte Themen