Best Practices: Difference between revisions

From iPhone Development Wiki
m (Add info about respringing from a tweak)
(→‎Applications and Tweaks: using a deprecated identifier is not a best practise :()
Line 4: Line 4:
* Avoid referring to /var/mobile directly - use NSHomeDirectory() if your code is running as mobile!
* 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.
** 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.
** App Store apps will return their sandbox data path from NSHomeDirectory().
* See [[MobileSubstrate Pitfalls]] for additional guidelines regarding tweaks.
* See [[MobileSubstrate Pitfalls]] for additional guidelines regarding tweaks.
* If you need the device's UDID, use [[LibMobileGestalt.dylib]].
* You should consider the UDID deprecated like Apple has for some time, but if you need the device's UDID, use [[libMobileGestalt.dylib]].
* If you need to use singletons, see [[singleton pattern]] for advice.
* If you need to use singletons, see [[singleton pattern]] for advice.
* If you need to respring from a tweak and you are targeting iOS 6+, kill backboardd instead of SpringBoard. Killing SpringBoard has been known to cause some issues regarding the backlight.
* If you need to respring from a tweak and you are targeting iOS 6+, kill backboardd instead of SpringBoard. Killing SpringBoard has been known to cause some issues regarding the backlight.

Revision as of 20:51, 11 February 2015

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.
    • App Store apps will return their sandbox data path from NSHomeDirectory().
  • See MobileSubstrate Pitfalls for additional guidelines regarding tweaks.
  • You should consider the UDID deprecated like Apple has for some time, but if you need the device's UDID, use libMobileGestalt.dylib.
  • If you need to use singletons, see singleton pattern for advice.
  • If you need to respring from a tweak and you are targeting iOS 6+, kill backboardd instead of SpringBoard. Killing SpringBoard has been known to cause some issues regarding the backlight.

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.