Best Practices

From iPhone Development Wiki
Revision as of 04:08, 28 May 2014 by Britta (talk | contribs) (adding a todo item)
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Use the following guidelines to avoid your package or app being fragile and to increase the chances of it being accepted by a community host.

Applications and Tweaks

  • Avoid referring to /var/mobile directly - use NSHomeDirectory() if your code is running as mobile!
    • If your code is running as root, use extra caution when writing files that mobile can access - you might break the file's access permissions.
  • See MobileSubstrate Pitfalls for additional guidelines regarding tweaks.
  • If you need the device's UDID, use LibMobileGestalt.dylib.
  • If you need to use singletons, see singleton pattern for advice.
  • To fill in here: the best way to cause a respring from a tweak

Packages

  • Do not create mobile-owned files and/or directories in your package. Stay out of mobile's home directory!
    • All package files are installed as root. Your software should create any required files or directories at runtime.
    • This is doubly important for preferences. A user's preferences do not belong in a package: if preferences are stored in the package, they will be overwritten when you release an update, and deleted when the user uninstalls your software (even temporarily!)
  • Do not use postinst/preinst/extrainst_ for file management purposes!
    • Do not store in the package files or directories that your software could create.
    • Do not enforce permissions that your package should contain. dpkg uses an expressive packaging format that has support for permissions, ownership, and links. Use that support!
  • Make sure your package doesn't include hidden .DS_Store, ._*, or thumbs.db files.