It took a while to make xcode happy with my custom built Python for iOS framework for enaml native.
Most of it was pretty straightforward (they describe it in their Anatomy of Frameworks docs). You need to simply create the directory structure they give.
Ok, `Info.plist` missing. Create a Resources folder, add an Info.plist file with what?
If you create a new Cocoa project with xcode it generates this for you. With content like this:
So now, create `Info.plist` in the Resrouces of the framework with the above variables filled in. If your using python you can use the `plistlib` built into the standard library to create this for you.
Now copy it to your framework and xcode is happy as a clam!
Most of it was pretty straightforward (they describe it in their Anatomy of Frameworks docs). You need to simply create the directory structure they give.
MyFramework.framework/ |
MyFramework -> Versions/Current/MyFramework |
Resources -> Versions/Current/Resources |
Versions/ |
A/ |
MyFramework |
Resources/ |
English.lproj/ |
InfoPlist.strings |
Info.plist |
Current -> A |
Simple enough. Make a few folders add a few symlinks. Resources is optional, so skip that. Add it into xcode, link it, then either add it as embedded executable or create a copy files rule. Click run, all looks good. Then boom!
Failed to load Info.plist from bundle at path /Users/jrm/Library/Developer/CoreSimulator/Devices/76...FC/data/Library/Caches/com.apple.mobile.installd.staging/temp.zziu4R/extracted/Payload/demo.app/Frameworks/Python.framework
Key
|
Description
|
---|---|
CFBundleName |
The framework display name
|
CFBundleIdentifier |
The framework identifier (as a Java-style package name)
|
CFBundleVersion |
The framework version
|
CFBundleExecutable |
The framework shared library
|
CFBundleSignature |
The framework signature
|
CFBundlePackageType |
The framework package type (which is always
'FMWK' ) |
NSHumanReadableCopyright |
Copyright information for the framework
|
CFBundleGetInfoString |
A descriptive string for the Finder
|
If you create a new Cocoa project with xcode it generates this for you. With content like this:
<?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>CFBundleDevelopmentRegion</key> <string>en</string> <key>CFBundleExecutable</key> <string>$(EXECUTABLE_NAME)</string> <key>CFBundleIdentifier</key> <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string> <key>CFBundleInfoDictionaryVersion</key> <string>6.0</string> <key>CFBundleName</key> <string>$(PRODUCT_NAME)</string> <key>CFBundlePackageType</key> <string>FMWK</string> <key>CFBundleShortVersionString</key> <string>1.0</string> <key>CFBundleVersion</key> <string>$(CURRENT_PROJECT_VERSION)</string> <key>NSPrincipalClass</key> <string></string> </dict> </plist>
#: Create new Info.plistplist = dict( CFBundleDevelopmentRegion="en", #: Shouldn't hard code.. CFBundleExecutable=self.name, CFBundleIdentifier=self.bundle_id or self.name, CFBundleInfoDictionaryVersion="6.0", CFBundleName=self.name, CFBundlePackageType="FMWK", CFBundleShortVersionString=self.version, CFBundleVersion=self.version, NSPrincipalClass="",) #: Update with any customized paramsplist.update(self.plist) #: Save itplistlib.writePlist(plist,'Info.plist')
The Python for iOS toolchain I modified for enaml-native allows you to create or add to frameworks in python using one of the recipes. Once done it's really simple to add python support to an iOS project (WITH compiled extensions)!
Happy coding!
P.S. Sorry that blogger has pretty terrible support for code! Anyone at blogger heard of markdown?
Comments
Post a Comment