(→Packages: note about COPYFILE_DISABLE) |
(→Applications and Tweaks: Respringing on iOS 8+.) |
||
Line 2: | Line 2: | ||
== Applications and Tweaks == | == Applications and Tweaks == | ||
* Avoid referring to /var/mobile directly - use NSHomeDirectory() if your code is running as mobile! | * Avoid referring to <code>/var/mobile</code> directly - use <code>NSHomeDirectory()</code> 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(). | ** App Store apps will return their sandbox data path from <code>NSHomeDirectory()</code>. | ||
* See [[MobileSubstrate Pitfalls]] for additional guidelines regarding tweaks. | * 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]]. | * 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 | * 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 <code>-[HBRespringController respring]</code> from [https://github.com/hbang/libcephei/blob/master/HBRespringController.x 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 == | == Packages == |
Revision as of 07:15, 22 October 2018
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 - useNSHomeDirectory()
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 - 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
-[HBRespringController respring]
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.
export COPYFILE_DISABLE=1
will disable resource forks (._* files) being included on OS X.