Swift

Swift:Plistで行き詰っていました。

ここ2日間、Plistがどうしてもわからなくて、ほんの数行なのですが、Swiftに変換できないで右往左往していました。

Plistは次のようにして取り出します。

var wPlist:[NSDictionary]   = [ NSBundle.mainBundle().infoDictionary! ]

それで、Plistの構造はどうなっているかですが、プリントすると次のようになっています。

wPlist =[{ BuildMachineOSBuild = 14A379b; CFBundleDevelopmentRegion = en; CFBundleExecutable = MesaClipper; CFBundleIdentifier = “Mesa-Network-Japan.MesaClipper”; CFBundleInfoDictionaryVersion = “6.0”; CFBundleInfoPlistURL = “Contents/Info.plist — file:///Users/hk/Library/Developer/Xcode/DerivedData/MesaClipper-eyreefpvosnynygudlzzywzivbnf/Build/Products/Debug/MesaClipper.app/”; CFBundleName = MesaClipper; CFBundleNumericVersion = 16809984; CFBundlePackageType = APPL; CFBundleShortVersionString = “2.102”;     CFBundleURLTypes =     ( { CFBundleTypeRole = Editor; CFBundleURLName = “”;           CFBundleURLSchemes =             ( “db-appキー” //Dropboxに登録したものをPlistに手入力したもの ); } ); CFBundleVersion = 1; DTCompiler = “com.apple.compilers.llvm.clang.1_0”; DTPlatformBuild = 6A1042b; DTPlatformVersion = GM; DTSDKBuild = 14A373; DTSDKName = “macosx10.10”; DTXcode = 0610; DTXcodeBuild = 6A1042b; LSMinimumSystemVersion = “10.9”; NSHumanReadableCopyright = “Copyright \U00a9 2014\U5e74 Mesa Network Japan. All rights reserved.”; NSMainNibFile = MainMenu; NSPrincipalClass = NSApplication; }]

たとえば、バージョンは次のようにして取り出せます。CFBundleShortVersionStringの値を変えれば、ほかの項目も取り出すことができます。

var wWinTitle:String    = “MesaClipper” wWinTitle += NSBundle.mainBundle().objectForInfoDictionaryKey(“CFBundleShortVersionString“) as String

しかし、CFBundleURLTypesは配列になっています。また、メソッドによってはnilが返ってきてエラーになってしまいます。 他方、Objective-Cのサンプルコードはとても簡単なものです。たったの2行です。

NSDictionary *plist     = [[NSBundle mainBundle] infoDictionary]; NSString    *actualScheme = [[[[plist objectForKey:@”CFBundleURLTypes”] objectAtIndex:0] objectForKey:@”CFBundleURLSchemes”] objectAtIndex:0];

  • なかなか分からなかったのは、objectAtIndexは[  ]で修飾すればいいということでした。
  • 次に何を修飾するかですが、wPlist[0].objectForKey(“CFBundleURLTypes”)でした。
  • その次に、CFBundleURLTypesの取り出し方ですが、NSDictionaryはダメ(nilが返ってくる)で、NSArrayならOKでした。
  • 今、ここまでわかりました。先に進んだら、この後に追記します。
  • 要は、ここでは、Plistにappキーがちゃんと登録されているかチェックしている箇所でそんなに重要ではなかったのですが、簡単に終わると思ったのがいつもの通り、実に浅はかでした。

Categories: Swift, 技術