Re: [Pyobjc-dev] Using bundlebuilder on PB projects
Brought to you by:
ronaldoussoren
From: Just v. R. <ju...@le...> - 2003-09-06 16:40:53
|
Dinu Gherman wrote: > > Multi-doc app: make sure you either create an Info.plist file or > > manually create a plist object in your buildapp.py script. > > I've tried that, but I still don't get it. It's not clear what kind > of entries I need for what kind of file (file types?)? You example > has too much of a font context for me... Well, check what you get when you do Plist.fromFile("yourplist"). You only need to fill in those values that bundlebuilder can fill in for you, in many cases you only need to worry about CFBundleDocumentTypes. I can't be bothered to compare directory structures, but I'll do you the favor of translating the relevant portion of your Info.plist to Python. See below. > I can safely remove the pbdevelopment.plist and the app still launches > ok. So I guess all your plist magic deals with generating the > Info.plist, > right? Ok, let's keep going. Why do you think it's magic? The "plist" argument of buildapp is indeed for Info.plist, it does nothing else. Read the source, it's pretty simple. Bundlebuilder usually creates one for you, but you can give it one for stuff it can't guess, such as CFBundleDocumentTypes. > As expected this application doesn't work as it should. It starts up, > but doesn't show any window! But... drumrolls...! If you replace its > top Info.plist with the one previously saved the app runs just fine!! Which is why (drumroll!) I pointed you towards buildapp's plist to begin with. Snipping those entries filled in by bundlebuilder if not given: > <?xml version="1.0" encoding="UTF-8"?> > <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" > "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> > <plist version="1.0"> > <dict> [ ... ] > <key>CFBundleDocumentTypes</key> > <array> > <dict> > <key>CFBundleTypeExtensions</key> > <array> > <string>????</string> > </array> > <key>CFBundleTypeName</key> > <string>DocumentType</string> > <key>CFBundleTypeOSTypes</key> > <array> > <string>????</string> > </array> > <key>CFBundleTypeRole</key> > <string>Editor</string> > <key>NSDocumentClass</key> > <string>MyDocument</string> > </dict> > </array> [ ... ] > </dict> > </plist> plist = Plist( CFBundleDocumentTypes = [ Dict( CFBundleTypeExtensions = ["????"], CFBundleTypeName = "DocumentType", CFBundleTypeOSTypes = ["???"], CFBundleTypeRole = "Editor", NSDocumentClass = "MyDocument", ), ] ) Instead of plistlib's Dict() you can also use 2.3's dict(), it also accepts keyword args to construct the dict. The following is equivalent to the above: plist = Plist() plist.update({ "CFBundleDocumentTypes": [ { "CFBundleTypeExtensions": ["????"], "CFBundleTypeName": "DocumentType", "CFBundleTypeOSTypes": ["???"], "CFBundleTypeRole": "Editor", "NSDocumentClass": "MyDocument", }, ] }) Just |