Dev:Best Practices

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  directly - use   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.
 * 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 - 7, kill backboardd instead of SpringBoard. Killing SpringBoard has been known to cause some issues regarding the backlight. For iOS 8 and newer, if possible, use  from libcephei for a more appropriate way to respring. Simply killing the processes can destroy battery usage data (the feature since iOS 8) of the user.

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.
 * will disable resource forks (._* files) being included on OS X with Theos.
 * Adding  to your package staging commands in Theos/DragonBuild will ensure they are deleted before packaging.