We got a (single) report that storing the anonymous UUID to the keychain can take multiple seconds causing the launch process to be locked and causing iOS to kill the app.
Storing in a background thread doesn't do any harm in our case, and if it fails, it would simply cause the next app start to produce another UUID which is fine.
Hardcode the iOS 6.1 and iOS 7.1 NSFoundationVersionNumber values, so the checks also work when compiling the source with iOS 6.1 or iOS 7.1 as base iOS version.
- Added simple detection method to check wether the SDK runs in an extension
- BITCrashManager will send crash reports without UI (UIAlertViews aren't allowed in extensions anyway)
- Don't start BITUpdateManager, BITStoreUpdateManager, BITFeedbackManager and BITAuthenticator in app extensions
In iOS 8 the app is not moved to background once the users accepts the iOS install alert button. Without this, the install process doesn't start. So for now we exit the app once that alert disappears.
Important: The iOS dialog offers the user to deny installation, we can't find out which button was tapped, so we assume the user agreed.
All mehotds in BITFeedbackManager that are screenshot releated are changed to include an option that defines wether the screenshot should include the statusbar (if present) or not:
- `- (UIImage *)screenshot` has been changed to `- (UIImage *)screenshotWithStatusBar:(BOOL)includeStatusBar)`
- `- (void)showFeedbackComposeViewWithGeneratedScreenshot` has been changed to `- (void)showFeedbackComposeViewWithGeneratedScreenshotWithStatusBar:(BOOL)includeStatusBar`
The values are used by the `BITCrashManager` to attach to a crash report and`BITFeedbackManager for assigning the user to a discussion thread.
The value can be set at any time and will be stored in the keychain on the current device only! To delete the value from the keychain set the value to `nil`.
These properties are optional and alternatives to the delegates. If you want to define specific values for each component, use the delegate instead which do overwrite the values set by these properties.
Also fixed a typo in the delegates documentation.
- Only get the UUID once per app runtime
- Cache the UUID in the keychain
- Gracefully fall back if some mechanisms won't work
TODO: In theory we could simply only ever use our own generated UUID and keep that via the keychain over the app lifetime instead of trying iOS 6 deviceIdentifier and alternatively the apps pathname
Uses iOS 6 ASIdentifierManager class or identifierForVendor if the class is not available. Fallback on iOS 5 is to use app path UUID which is generated by iOS when installing the app
- Use one common static lib target
- create embeddedFramework as binary distribution including docset in one zip
- Add HockeySDK.xcconfig for easier build setting setup
- Move everything into a single directory, too many problems making binary and subproject work without requing recursive header search paths
- Documentation update pending
- First implementation on feedback, not finished yet!
- Move all components into their own subdirectory
- Restructure common delegates into BITHockeyManagerDelegate
- Restructure common component methods into new superclass (not finished yet)
The flag shouldn't be required, and worked in the demo project absolutely fine. But from now to then there was an Xcode bug that made it required again and some non reproducible scenarios where reported by users where it doesn't work without the flag. To fix this for always and forever, we don't use categories any more.