Files

332 lines
12 KiB
Markdown

# 8.1.5
- [fixed] Deliver App Delegate callbacks to delegates that handle them by
forwarding rather than by implementing them, such as the one SwiftUI installs
for `UIApplicationDelegateAdaptor`. (#247)
- [fixed] `GULAppEnvironmentUtil` now computes `isAppStoreReceiptSandbox` and
`isFromAppStore` once per process and caches the results. Previously every
call read `-[NSBundle appStoreReceiptURL]`, which makes a synchronous XPC call
to the LaunchServices daemon and could block the calling thread, often the
main thread, for seconds. (firebase/firebase-ios-sdk#16726)
- [fixed] Fix an ARC-related deadlock in `GULNetworkURLSession` under -O1
optimization. (#255)
# 8.1.4
- [fixed] `GULMutableDictionary` now ignores a `nil` key (and a `nil` object in
`setObject:forKey:`) instead of throwing on its internal queue, which crashed
apps when Analytics received a malformed experiment response. A warning
(`I-NET903000`/`I-NET903001`) is logged when a write is ignored.
(firebase/firebase-ios-sdk#16728)
- [fixed] `GULMutableDictionary` setters now copy the key before returning.
Previously the key was copied when the write ran on the internal queue, so a
mutable key changed right after the call was stored under the changed value.
- [changed] `GULMutableDictionary` getters are now declared `nullable`, and the
subscript setter accepts a `nil` object. In Swift, `object(forKey:)` now
returns `Any?`, and `dict[key] = nil` removes the key.
- [fixed] `GULKeychainStorage` now reports an error through the completion
handler for a `nil` object or a `nil` or non-string key. Previously a `nil`
object threw on an internal queue and crashed the app, and a `nil` key built a
keychain query without an account, which could read or remove other items
stored for the same service.
- [fixed] `GULKeychainStorage` now reports an exception raised while decoding a
keychain item (for example, from a class's `-initWithCoder:` on corrupted
data) as an error through the completion handler, instead of crashing the app
on its internal queue.
- [fixed] `GULUserDefaults` now validates the entire value before saving it and
ignores values that are not property lists, such as a collection containing
`NSNull`. Previously only the top-level class was checked, and
`NSUserDefaults` aborted the app when given such values.
- [fixed] `GULUserDefaults` typed getters (`integerForKey:`, `stringForKey:`,
`arrayForKey:`, etc.) now check the type of the stored value, like
`NSUserDefaults`, instead of crashing or returning an object of the wrong type.
- [fixed] `GULNetworkURLSession` now reports a non-HTTP response as an error
instead of passing it to callers as an `NSHTTPURLResponse`.
- [fixed] `GULNetworkURLSession` no longer throws when logging a server trust
evaluation error for a request with a `nil` URL.
- [fixed] `GULLogger` now reuses cached `os_log` objects instead of creating
one for every log message.
# 8.1.3
- [fixed] Fixed [GULSwizzler ivarObjectsForObject] to correctly query instance variables
of an NSProxy and to exclude weak instances in the returned array. (#244)
# 8.1.2
- [fixed] Resolve EXC_BAD_ACCESS in GULNetworkURLSession via O(1) passive memory
lifecycle cleanup. (#233)
# 8.1.1
- [fixed] Prevent race condition crashes in GULNetworkURLSession by replacing
NSMapTable with thread-safe NSMutableDictionary and locking. (#228)
# 8.1.0
- Add a utility to detect App Clips and make a semantic check for background
URL sessions. (#220)
# 8.0.2
- Fix default logging level regression introduced in 8.0.0 (no value set);
default value is restored to `GULLoggerLevelNotice`. (#207)
# 8.0.1
- Add missing copyright to source file. (#206)
- Removed an extraneous `#undef GUL_LOGGING_FUNCTION`. (#205)
# 8.0.0
- Remove swizzling support for `application:didReceiveRemoteNotification:`.
Use `application:didReceiveRemoteNotification:fetchCompletionHandler:` instead. (#162)
- Remove `GULHeartbeatDateStorable`, `GULHeartbeatDateStorage`,
`GULHeartbeatDateStorageUserDefaults` APIs. (#164)
- Remove '+ [GULAppEnvironmentUtil isIOS7OrHigher]' API. (#165)
- Remove '+ [GULAppEnvironmentUtil hasSwiftRuntime]' API. (#166)
- Fix an issue where ObjC associated objects were sometimes set with a
non-const key, potentially resulting in undefined behavior. (#141)
- Add nullabilty annotations to public headers. (#169)
- Remove references to deprecated CTCarrier. (#106)
- [changed] **Breaking change**: Minimum supported versions have
updated for the following platforms:
- | Platform | GoogleUtilities 8.0|
| ------------- | ------------- |
| iOS | **12.0** |
| tvOS | **13.0** |
| macOS | **10.15** |
| watchOS | 7.0 |
- Remove dependency on `FBLPromises`. The following public API have
been removed:
- `- [NSURLSession gul_dataTaskPromiseWithRequest:]`
- `GULURLSessionDataResponse`
The following promise-based public API have been replaced with
completion handler-based alternatives.
- `- [GULKeychainStorage getObjectForKey:objectClass:accessGroup:]`
- `- [GULKeychainStorage setObject:forKey:accessGroup:]`
- `- [GULKeychainStorage removeObjectForKey:accessGroup:]`
- Update underlying GULLogger implementation from `asl` to `os_log`.
- Remove `GULLoggerEnableSTDERR` API.
# 7.13.3
- Rename parameter placeholder in `GULSecureCoding` unarchiving API to avoid
conflict with keyword. (#152)
- Reorganize privacy manifests for SwiftPM so that each library target has its
own privacy manifest, as opposed to transitively depending on a common one.
(#150)
# 7.13.2
- Remove synchronization delay for `GULUserDefaults` to better match
`NSUserDefaults` behavior. (#148)
# 7.13.1 (SwiftPM Only)
- Attempt to fix validation error due to invalid module name. (#146)
# 7.13.0
- Add privacy manifest. (#128)
# 7.12.1 (SwiftPM Only)
- Fix improperly formatted target name that blocks App Store submission. (#140)
# 7.12.0
- Added a logging level getter, `GULGetLoggerLevel`. (#138)
# 7.11.6
- Fix visionOS build on Xcode 15.1 Beta 1.
# 7.11.5
- Replace 'TARGET_OS_XR' with 'TARGET_OS_VISION' for compatibility with
Xcode 15 Beta 5.
# 7.11.4
- Fix Xcode 15 Beta 4 runtime warning. (#114)
# 7.11.3 (SwiftPM Only)
- Calling `+[GULAppEnvironmentUtil applePlatform]` now returns 'visionos' when
running on visionOS.
# 7.11.2 (SwiftPM Only)
- Fix build errors on the visionOS platform. (#108)
# 7.11.1
- Fix Xcode 14.3 build warnings.
# 7.11.0
- Add a new POST API in GULNetwork to support HTTP headers. (#99)
- Fix iOS 12 deprecation warnings. (#98)
# 7.10.0
- Added Network Utility. (#91)
- Added a few utility functions for Firebase Performance and FirebaseSession SDKs. (#89, #90)
# 7.9.0 (Swift PM)
- Don't use underscores in SPM target names. This fixes an App Store submission
issue for SPM builds that dynamically link (firebase-ios-sdk/#9912). (#83)
# 7.8.0
- Update `+ [GULAppEnvironmentUtil deploymentType]` API to fall back to
`unknown` instead of `cocoapods`. (#79)
- Prevent keychain access from prompting user for permissions on macOS. Using
GoogleUtilities's keychain wrapper API **on macOS** now requires that the
target be signed with a provisioning profile that has the Keychain Sharing
capability enabled. (#75)
# 7.7.1
- Swift Package Manager only release. Unify OCMock dependency with Firebase
repo. (https://github.com/firebase/firebase-ios-sdk/issues/9591)
# 7.7.0
- Do not dispose a swizzler's generated class when `GULGeneratedClassDisposeDisabled`
environment variable is set. (#66)
# 7.6.0
- Add proper device model parsing for macOS and Catalyst. (#59)
- Deprecate `hasSwiftRuntime` method. (#62)
# 7.5.2
- Do not dispose a swizzler's generated class when using the Zombies instrument. (#57)
# 7.5.1
- `GULHeartbeatDateStorage`: replace `NSFileCoordinator` with in-process synchronization mechanism. (#51)
# 7.5.0
- Bump Promises dependency. (#8334)
# 7.4.3
- Include all object classes when using archiver. (#42)
# 7.4.2 (Swift PM)
- Fix warnings in Xcode 13 beta 1. (#41)
# 7.4.1
- Improve heartbeat date storage's version compatability. (#37)
# 7.4.0
- Change heartbeat directory name and refactor file. (#19)
- Introduce user defaults based heartbeat storage. (#23)
- Support iOS 9 with Swift Package Manager.
# 7.3.1
- Add explicit dependency on Security framework to Environment subspec. (#12)
# 7.3.0
- Fix conflicting internal constant name and move it out of the public header. (#7635)
# 7.2.2
- Fix warnings introduced with Xcode 12.5. (#8)
# 7.2.1
- Fix GoogleUtilities namespacing (SPM only release). (#7)
# 7.2.0
- `NSURLSession` promise extension public API. (#7097)
# 7.1.1
- Fix `unrecognized selector` for isiOSAppOnMac on early iOS 14 betas. (#6969)
# 7.1.0
- Added `NSURLSession` promise extension. (#6753)
- `ios_on_mac` option added to `GULAppEnvironmentUtil.applePlatform()`. (#6799)
- Fixed completion handler issue in `GULAppDelegateSwizzler` for
`application(_:didReceiveRemoteNotification:fetchCompletionHandler:)` method. (#6863)
# 7.0.0
- All APIs are now public. All CocoaPods private headers are transitioned to public. Note that
GoogleUtilities may have more frequent breaking changes than Firebase. (#6588)
- Fixed writing heartbeat to disk on tvOS devices. (#6658)
- Refactor `GULSwizzledObject` to ARC to unblock SwiftPM support. (#5862)
# 6.7.1
- Fix import regression when mixing 6.7.0 with earlier Firebase versions. (#6047)
# 6.7.0 -- M75
- Lazily access filesystem outside of `GULHeartbeatDateStorage` initializer. (#5969)
- Update source imports to use repo-relative headers. (#5824)
- Source cleanups to remove pre-iOS 8 code. (#5841)
# 6.6.0 -- M69
- Keychain utilities and Keychain based key-value storage added to
`GoogleUtilities/Environment`. (#5329)
# 6.5.2
- Fixed an issue where GoogleUtilities misidentified Catalyst as a
simulator runtime environment. (#5048)
# 6.5.1
- Standardized import paths. (#4655)
# 6.5.0
- Swizzler changes.
# 6.4.0
- Add function to gul secure encoding to encode multiple classes. (#4282)
- Add heartbeat feature. (#4098)
- Support UISceneDelegate changes in Auth. (#4380)
# 6.3.1
- Fix GULMutableDictionary keyed subscript methods. (#3882)
- Update Networking to receive data for POST requests. (#3940)
- Fix crash in GULLogBasic. (#3928)
# 6.3.0
- GULSecureCoding introduced. (#3707)
- Mark unused variables. (#3854)
# 6.2.5
- Remove test-only method and update tests to include Catalyst. (#3544)
# 6.2.4
- Fix `GULObjectSwizzler` dealloc thread-safety. (#3300, #3183)
# 6.2.3
- Revert "Fix `GULMutableDictionary` thread-safety." (#3322)
# 6.2.2
- Add explicit Foundation import for headers.
- Fix headers import. (#3277)
- Fix README. (#3305)
- Fix `GULMutableDictionary` thread-safety. (#3322)
# 6.2.1
- Fix Xcode 11 build warning. (#3133)
# 6.2.0
- Stop conditional compilation for GoogleUtilities testing. (#3058)
# 6.1.0
- Added `GULAppDelegateSwizzler` macOS support. (#2911)
# 6.0.0
- GULAppDelegateSwizzler - proxy APNS methods separately. (#2835)
- Cocoapods 1.7.0 multiproject support. (#2751)
- Bump minimum iOS version to iOS 8. (#2876)
# 5.7.0
- Restore to 5.5.0 tag after increased App Store warnings. (#2807)
# 5.6.0
- `GULAppDelegateSwizzler`: support of remote notification methods. (#2698)
- `GULAppDelegateSwizzler`: tvOS support. (#2698)
# 5.5.0
- Revert 5.4.x changes restoring 5.3.7 version.
# 5.4.1
- Fix GULResetLogger API breakage. (#2551)
# 5.4.0
- Update GULLogger to use os_log instead of asl_log on iOS 9 and later. (#2374, #2504)
# 5.3.7
- Fixed `pod lib lint GoogleUtilities.podspec --use-libraries` regression. (#2130)
- Fixed macOS conditional check in UserDefaults. (#2245)
- Migrate to clang-format 8.0.0. (#2222)
# 5.3.6
- Fix nullability issues. (#2079)
# 5.3.5
- Fixed an issue where GoogleUtilities would leak non-background URL sessions.
(#2061)
- Fixed a crash caused due to `NSURLConnection` delegates being wrapped in an
`NSProxy`. (#1936)
# 5.3.4
- Fixed a crash caused by unprotected access to sessions in
`GULNetworkURLSession`. (#1964)
# 5.3.3
- Fixed an issue where GoogleUtilities would leak instances of `NSURLSession`.
(#1917)