371 Commits
Author SHA1 Message Date
Nick Cooke 5459ee5603 chore: prep 815 release (#256) CocoaPods-8.1.5 8.1.5 2026-10-13 14:32:55 -04:00
Nick Cooke 0aabc8f2e9 fix: address Objective-C -O1 ARC lifetime issue in GULNetworkURLSession (#255)
* fix: address Objective-C -O1 ARC lifetime issue in GULNetworkURLSession

* changelog
2026-10-13 12:24:12 -04:00
Wojtek Mandrysz 79b3766eb5 Deliver callbacks to App Delegates that use fast forwarding (#247)
* Deliver callbacks to App Delegates that use fast forwarding

Proxying a delegate that handles a selector via forwardingTargetForSelector:
instead of implementing it caused the callback to be dropped silently.

createSubclassWithObject: records the original implementation with
class_getInstanceMethod(realClass, sel), which is NULL for such a delegate.
Adding the donor method then makes message lookup succeed, so the runtime no
longer consults the forwarding target, and each donor's trailing
`if (realIMP)` is false. The message is neither delivered nor diagnosed.

This is the shape of the delegate SwiftUI installs for
UIApplicationDelegateAdaptor: SwiftUI.AppDelegate implements only a handful of
selectors -- didFinishLaunchingWithOptions:, configurationForConnecting:options:,
handleEventsForBackgroundURLSession:, respondsToSelector: and
forwardingTargetForSelector: -- and forwards the rest to the app's own delegate.
An app using that adaptor together with FirebaseMessaging or FirebaseAuth
therefore stops receiving the APNS callbacks on its own delegate, and any app
using a GoogleUtilities-based SDK stops receiving continueUserActivity: and
openURL:options:.

Each donor now falls back to the forwarding target when the original
implementation is NULL, so the behaviour is unchanged for delegates that
implement the selector themselves.

* Address review: forward via NSInvocation, add tests and changelog

Forward through NSInvocation rather than by messaging the target directly, so
that the APNS App Delegate selectors are not referenced as symbols. Referencing
them directly triggers an Apple review warning about a missing Push Notification
Entitlement even when the code never runs, which is why the surrounding code
builds those selectors from strings.

Adds tests for the value returned by a forwarded selector, for the completion
handlers of application:handleEventsForBackgroundURLSession:completionHandler:
and application:didReceiveRemoteNotification:fetchCompletionHandler:, and for a
forwarding delegate whose target does not implement the selector at all.

Adds the changelog entry.

* Guard iOS/tvOS-only selectors in forwarding delegate tests

Fixes the macOS build: openURL:options:, handleEventsForBackgroundURLSession:
and the fetchCompletionHandler: variant aren't part of NSApplicationDelegate.

* Fix unused variable warning in macOS pod lib lint

* Address review: balance dispatch group, harden forwarding tests

- Enter the callback group and call forwardSelector: once, leaving the group
  if nothing was forwarded, so the system completion handler always runs.
- Guard stored completion handlers against nil in tests and assert the
  forwarded fetch result.
- Add a test merging an interceptor's fetch result with a forwarding delegate.
- Wrap the CHANGELOG entry at 80 columns.
2026-10-13 12:20:23 -04:00
Paul Beusterien 34314b8f75 fix(environment): cache App Store environment checks (#254)
`+[GULAppEnvironmentUtil isAppStoreReceiptSandbox]` read
`-[NSBundle appStoreReceiptURL]` on every call. That property makes a
synchronous XPC call to the LaunchServices daemon, which can block the
calling thread for seconds when the daemon is busy. `+isFromAppStore`
repeated the call because it only cached `IsAppEncrypted()`. Firebase
calls these from the main thread (heartbeat user agent, Messaging APNs
token handling), which caused hangs and watchdog terminations.

Compute both values once per process with `dispatch_once`. Their inputs
(receipt type, bundle contents, Mach-O encryption info, and the
Info.plist opt-out key) can't change while the app is running. The
original bodies move unchanged into file-local helpers.

Part of firebase/firebase-ios-sdk#16726
2026-10-13 11:56:14 -04:00
Paul Beusterien cc31f5ed46 Harden GULUserDefaults getters and GULNetworkURLSession response handling (#252)
* fix(userdefaults): check stored value types in typed getters

The typed getters sent NSNumber selectors (integerValue, boolValue, ...)
to whatever object was stored, so a persisted value of an unexpected type
(e.g. an array or data written from a server response) crashed with an
unrecognized selector. stringForKey:, arrayForKey: and dictionaryForKey:
returned the stored object unchecked, handing callers the wrong type.

Mirror NSUserDefaults: numeric getters accept NSNumber or NSString,
stringForKey: converts an NSNumber to its stringValue, and the collection
getters return nil for other types.

* fix(network): handle non-HTTP responses and nil request URLs

URLSession:task:didCompleteWithError: asserted that the task response is
an NSHTTPURLResponse. The assertion is compiled out of release builds, so
a non-HTTP response (possible when a custom NSURLProtocol intercepts the
request) was cast and passed to callers, who then crash calling
statusCode or allHeaderFields. Replace the assertion with a runtime check
and report a GULErrorCodeNetworkInvalidResponse error instead.

Also avoid inserting a nil request URL into the array literal used to log
a server trust evaluation error.

* fix(logger): look up cached os_log objects by category

GULOSLogBasic stored os_log objects under the category key but looked
them up by subsystem, so the cache never hit and os_log_create ran for
every log message.

* docs(changelog): note userdefaults, network and logger fixes

* fix(network): keep system errors for non-HTTP responses

When a task finished with a non-HTTP response and an error, the error
was replaced with GULErrorCodeNetworkInvalidResponse. Pass the more
specific system error through and only create an invalid-response error
when there is none.

Also fall back to the task's original request URL when logging a server
trust evaluation error, so the log still names the host if _request is
unset.
8.1.4 CocoaPods-8.1.4
2026-09-29 16:38:45 -07:00
Paul Beusterien 4f96b51a1c Reject invalid input in GULKeychainStorage and GULUserDefaults instead of crashing (#250)
* fix(keychain): reject nil objects and invalid keys in GULKeychainStorage

Validate arguments on the caller's thread and report an error through the
completion handler, instead of dispatching them to the internal queues.

Previously, a nil object made NSCache throw inside a dispatch_async block
on the in-memory cache queue. The caller could not catch the exception, so
the app crashed with a stack attributed to GoogleUtilities, the same
pattern as #248. A nil key did not throw, but it removed kSecAttrAccount
from the keychain query, so get/remove could match other items stored for
the same service.

Add GULKeychainStorageInvalidInputTests. The rejected input never reaches
the keychain, so these tests run under SwiftPM and on macOS, unlike
GULKeychainStorageTests.

* fix(userdefaults): validate entire value graph in GULUserDefaults

Use NSPropertyListSerialization to validate the whole value before writing
it to NSUserDefaults, instead of checking only the top-level class.

Previously, a collection containing non-property-list content, such as an
NSNull decoded from a JSON null or a dictionary with non-string keys,
passed the check. NSUserDefaults then aborted the process, which callers
cannot catch. Such values are now rejected with the existing warning log
and the stored value is left unchanged.

* test(keychain): avoid capturing self in GULKeychainStorage completion blocks

Record results in __block variables inside the completion handlers and
assert after waiting for the expectation. The blocks are retained by
self.storage, and capturing self in them (directly or through XCTAssert*
macros) triggered -Warc-retain-cycles in the CocoaPods lint.

* fix(keychain): report exceptions from decoding keychain items as errors

+[NSKeyedUnarchiver unarchivedObjectOfClass:fromData:error:] returns an
error for malformed archives, but an exception raised by the decoded
class's -initWithCoder: (for example while decoding corrupted keychain
data), or by a nil objectClass, still propagates. GULKeychainStorage
decodes on keychainQueue, where the caller cannot catch the exception, so
the app crashed.

Decode through a helper that catches the exception and returns an NSError,
which is passed to the completion handler.

* fix(keychain): allow empty string keys

An empty string is a valid, distinct keychain account: it does not throw
in NSCache and keeps kSecAttrAccount in the query, so it is not a
wildcard like a nil key. Rejecting it would make items already stored
under @"" unreadable and undeletable, and turn previously working saves
into errors. Only reject nil and non-string keys.
2026-09-29 16:27:18 -07:00
Nick Cooke 1599dd9c14 test(network): add failing tests for GULMutableDictionary key copying (#253)
* test(network): add failing tests for GULMutableDictionary key copying

GULMutableDictionary's setters capture the caller's key in an async block,
and NSMutableDictionary copies the key only when the block runs on the
internal queue. A mutable key changed right after the call is stored under
the changed value. Add regression tests for setObject:forKey: and keyed
subscripting that mutate the key right after the set.

These tests fail until the fix in the next commit.

* fix(network): copy GULMutableDictionary keys before dispatching writes

setObject:forKey: and setObject:forKeyedSubscript: passed the caller's key
into an async block, so NSMutableDictionary copied it only when the write
ran on the internal queue. A mutable key changed right after the call was
stored under the changed value.

Copy the key on the caller's thread before dispatching. NSMutableDictionary
already copies keys, so this only moves the copy earlier. If a key's copy is
nil, ignore the write and log a warning so the internal queue doesn't
throw.

removeObjectForKey: is unchanged: its key is `id`, not `id<NSCopying>`, and
NSMutableDictionary doesn't copy keys on removal.

Also add CHANGELOG entries for this fix and for the Swift-visible
nullability changes to the getters and the subscript setter.
2026-09-29 16:20:05 -07:00
Paul BeusterienandNick Cooke 537b79836b Log ignored GULMutableDictionary writes and document nil handling (#251)
* fix(network): log ignored GULMutableDictionary writes and document nil handling

Follow-up to the nil-key fix in #249.

- Log a warning (I-NET902000 for a nil key, I-NET902001 for a nil object)
  when a write is ignored. Silently dropping the write hid the caller's bug;
  the log keeps it visible without crashing.
- Mark the object parameter of -setObject:forKeyedSubscript: as nullable. A
  nil object removes the key, as with NSMutableDictionary, and the tests rely
  on this. It also lets Swift callers write `dict[key] = nil`.
- Document the nil handling in the header.
- Make testNilObjectIsIgnored check that an existing entry is kept, and pass
  nil directly in testKeyedNilObjectRemovesKey.

* fix(network): move GULMutableDictionary log codes to 903xxx

I-NET902000-I-NET902006 are already used by GULReachabilityMessageCode, so
the new GULMutableDictionary warnings collided with reachability messages.
Use 903000/903001, which are unused in GoogleUtilities and
firebase-ios-sdk, and note the reserved reachability range next to the
enum.

* add more nil key tests

* fix(network): return nil early for nil keys in GULMutableDictionary getters

NSDictionary happens to return nil for a nil key, but this is not
documented. Return early from -objectForKey: and
-objectForKeyedSubscript: so the behavior does not depend on Foundation
and matches the nil-key guards on the write paths.

- Document the nil-key behavior of both getters in the header.
- Add tests that a nil-key lookup returns nil when the dictionary has
  entries.

* test(network): add defensive GULMutableDictionary tests

- Check that -dictionary returns a snapshot that later writes don't change.
- Split the nil-key write test into one test per write path so a failure
  names the method that caused it, and cover `dict[nil] = nil`.
- Cover removing a missing key, -removeAllObjects on an empty dictionary,
  and -description.

* changelog and spec

* test(network): assert empty precondition in testRemoveAllWhenEmpty

* test(network): verify setup in GULMutableDictionary tests

Several tests could pass even if their setup silently failed. Check that
the setup took effect:

- testDictionaryReturnsSnapshot: the later writes changed the live
  dictionary, so the snapshot assertions are meaningful.
- testKeyedNilObjectRemovesKey: the entry exists before it is removed.
- testObjectForNilKey(KeyedSubscript): the entry exists, so the tests
  show a nil key does not match it.

* fix(network): mark GULMutableDictionary getters as returning nullable

objectForKey: and objectForKeyedSubscript: are documented to return nil for a missing or nil key, but were declared non-null, so Swift imported objectForKey(_:) as Any. Declare both as nullable id so the signatures match the documented behavior. Swift callers of objectForKey(_:) now get Any?; the subscript already read as Any? because its setter is nullable.

* test(network): add GULMutableDictionary concurrent access stress test

GULMutableDictionary is documented as providing atomic accessors and
mutators and is shared across threads by GULNetwork and the app delegate
swizzlers, but no test exercised it concurrently. Mix reads, writes,
removes, and nil-key calls across threads with dispatch_apply and check
that the final state is consistent.

Passed 200 repeated runs and a Thread Sanitizer run on the iOS simulator
with no reports.

---------

Co-authored-by: Nick Cooke <nickcooke@google.com>
2026-09-29 16:11:36 -07:00
Rok Gregorič 96cff77e50 Ignore nil keys in GULMutableDictionary instead of crashing (#249)
GULMutableDictionary forwards writes to NSMutableDictionary asynchronously,
so a nil key (or nil object in setObject:forKey:) throws on the internal
queue and crashes the app instead of the caller. This took down apps using
Firebase Analytics when a malformed experiment response produced a nil key
(firebase/firebase-ios-sdk#16728).
2026-09-29 13:44:47 -07:00
Nick Cookeandgoogle-labs-jules[bot] 92c8f6dc3a Release version 8.1.3 (#246)
Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
8.1.3 CocoaPods-8.1.3
2026-08-25 18:49:49 -04:00
Tejas Deshpande ce4e5306ec nit: fix CHANGELOG (#245) 2026-08-25 21:15:40 +00:00
Tejas Deshpande 262046d19a Update [GULSwizzler ivarObjectForObjects] and add unit tests (#244)
* Update [GULSwizzler ivarObjectsForObject] to correctly get the class to fetch ivars from and update logic to exclude weak ivars

* Add unit tests for [GULSwizzler ivarObjectsForObject]
2026-08-25 16:21:27 -04:00
Nick Cooke e4035cf5d3 infra: remove OCMock dependency (#243)
* test: migrate away from OCMock

Replace dynamic OCMock mocks with handwritten fake classes across the test suite to improve Swift interoperability, address concurrency issues, and reduce test brittleness. Removed OCMock from podspec and SPM dependencies.

* gemfile

* Remove other files and deps

* Apply suggestion from @ncooke3

* Apply suggestion from @ncooke3
2026-08-04 14:49:15 -04:00
Nick Cooke 9f183ae842 chore: bump podspec versiona and add changelog note (#241) 8.1.2 CocoaPods-8.1.2 2026-06-25 15:48:35 -04:00
agustindeleon7 616d800897 Resolve EXC_BAD_ACCESS in GULNetworkURLSession via O(1) passive memory lifecycle cleanup (#233)
* Fix EXC_BAD_ACCESS in GULNetworkURLSession cleanup

This commit replaces the manual O(N) cleanup loop in `setSessionInFetcherMap:forSessionID:` with an O(1) passive self-cleanup mechanism using Associated Objects.

It introduces `GULSessionDeallocTracker`, which is tied to the lifecycle of the `NSURLSession`. To prevent `objc_loadWeakRetained` crashes when the session is being destroyed, the tracker holds a strong reference to the `GULNetworkURLSessionWeakHolder` wrapper and uses direct pointer comparison during `dealloc` instead of reading the weak reference. It also ensures old trackers are deallocated outside of the `NSLock` to prevent deadlocks.

* Refactor: explicitly nil out old tracker to silence potential unused variable warnings

* Refactor: remove redundant comment

* Fixing linter and style

* Fix dead store warning for static analysis in GULNetworkURLSession

* Fix nil key exception in GULRuntimeSnapshot by verifying classString

* Address PR feedback: Add deadlock prevention comment and parameter assert

* Increase timeout for testSessionMapStress to 60s

* Refactor: remove misplaced stress test and add explicit test for passive ARC cleanup in GULNetworkURLSession

* Increase Keychain test expectation timeouts to reduce CI flakiness
2026-06-25 13:33:14 -04:00
Nick Cooke ff03f3ea7d chore(ci): set workflow permissions to read-only (#240) 2026-06-24 13:52:18 -07:00
Nick Cooke 9bbfeb395c chore: update faraday, activesupport, and danger gems (#239) 2026-06-24 16:12:29 -04:00
Nick Cooke caf32bf4c0 chore: update ruby version in google-utilities.yml (#238)
* Update google-utilities.yml

* updates

* Update google-utilities.yml

* Apply suggestion from @ncooke3
2026-06-24 14:46:04 -04:00
Paul Beusterien c753282e17 Update SPM CI job to Xcode 26 (#236)
* Update SPM CI job to Xcode 26

* pinned hashes and no quotes

* fix

* runs on macos-26

* more pinned hashes
2026-06-23 19:28:45 -07:00
dependabot[bot] 26e2c089e9 Bump concurrent-ruby in the bundler group across 1 directory (#235)
Bumps the bundler group with 1 update in the / directory: [concurrent-ruby](https://github.com/ruby-concurrency/concurrent-ruby).


Updates `concurrent-ruby` from 1.2.3 to 1.3.7
- [Release notes](https://github.com/ruby-concurrency/concurrent-ruby/releases)
- [Changelog](https://github.com/ruby-concurrency/concurrent-ruby/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ruby-concurrency/concurrent-ruby/compare/v1.2.3...v1.3.7)

---
updated-dependencies:
- dependency-name: concurrent-ruby
  dependency-version: 1.3.7
  dependency-type: indirect
  dependency-group: bundler
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-23 15:44:00 -04:00
Paul Beusterien 5b06944b4b Remove no-longer-supported test coverage CI (#234) 2026-06-23 11:53:02 -07:00
Paul Beusterien c46e5f8b7c Update podspec for 8.1.1 (#231) 8.1.1 CocoaPods-8.1.1 2026-04-10 08:36:48 -07:00
Paul Beusterien 4780540980 Fix NSMapTable crash (#230) 2026-04-10 07:31:49 -07:00
Paul Beusterien 5d06b17529 Update style (#229) 2026-04-10 10:03:41 -04:00
dependabot[bot] 5f2a543edb Bump addressable in the bundler group across 1 directory (#227)
Bumps the bundler group with 1 update in the / directory: [addressable](https://github.com/sporkmonger/addressable).


Updates `addressable` from 2.8.4 to 2.9.0
- [Changelog](https://github.com/sporkmonger/addressable/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sporkmonger/addressable/compare/addressable-2.8.4...addressable-2.9.0)

---
updated-dependencies:
- dependency-name: addressable
  dependency-version: 2.9.0
  dependency-type: indirect
  dependency-group: bundler
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-09 20:50:51 -07:00
dependabot[bot]andNick Cooke 699e8f9873 Bump faraday from 1.10.2 to 1.10.5 in the bundler group across 1 directory (#226)
* Bump faraday in the bundler group across 1 directory

Bumps the bundler group with 1 update in the / directory: [faraday](https://github.com/lostisland/faraday).


Updates `faraday` from 1.10.2 to 1.10.5
- [Release notes](https://github.com/lostisland/faraday/releases)
- [Changelog](https://github.com/lostisland/faraday/blob/main/CHANGELOG.md)
- [Commits](https://github.com/lostisland/faraday/compare/v1.10.2...v1.10.5)

---
updated-dependencies:
- dependency-name: faraday
  dependency-version: 1.10.5
  dependency-type: indirect
  dependency-group: bundler
...

Signed-off-by: dependabot[bot] <support@github.com>

* Update google-utilities.yml

* Apply suggestions from code review

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Nick Cooke <36927374+ncooke3@users.noreply.github.com>
2026-02-12 17:41:00 -05:00
dependabot[bot] d8b685c0a2 Bump rexml from 3.3.9 to 3.4.2 in the bundler group across 1 directory (#224)
Bumps the bundler group with 1 update in the / directory: [rexml](https://github.com/ruby/rexml).


Updates `rexml` from 3.3.9 to 3.4.2
- [Release notes](https://github.com/ruby/rexml/releases)
- [Changelog](https://github.com/ruby/rexml/blob/master/NEWS.md)
- [Commits](https://github.com/ruby/rexml/compare/v3.3.9...v3.4.2)

---
updated-dependencies:
- dependency-name: rexml
  dependency-version: 3.4.2
  dependency-type: indirect
  dependency-group: bundler
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-29 12:15:30 -04:00
Nick Cooke f8fdc1346a fix(ci): install missing iOS 18.2 simulator runtime (#225)
The macos-15 runner image lacks the iOS 18.2 simulator runtime for Xcode 16.2, causing CI jobs to fail.

  This adds a workflow step to explicitly download the required simulator, ensuring tests can run with the minimum supported Xcode version.
2025-09-29 11:37:44 -04:00
Nick Cooke 60da361632 [Release] Add changelog and bump podspec bump following #220 (#222) CocoaPods-8.1.0 8.1.0 2025-05-01 15:39:12 -04:00
Harlan Haskins c18f2e1f56 Add a utility to detect App Clips and make a semantic check for background URL sessions (#220) 2025-05-01 14:47:48 -04:00
Morgan Chen 18c852efcb use explicit xcode 16 in runners (#221) 2025-04-30 16:53:07 -07:00
Nick Cooke 43a8dd1b40 [Infra] Update README.md code formatting docs (#219) 2025-03-05 13:44:51 -08:00
Nick Cooke 670fc1cf88 [Infra] Prefer setup_check.sh over manual config (#218)
* [Infra] Prefer `setup_check.sh` over manual config

* bump actions/cache to v4

* Style
2025-03-05 13:40:17 -08:00
Morgan Chen ba8e711dc0 add analyze to pod lib lint (#215) 2024-12-27 17:46:42 -08:00
dependabot[bot] c97127f6cf Bump rexml from 3.3.6 to 3.3.9 in the bundler group (#214)
Bumps the bundler group with 1 update: [rexml](https://github.com/ruby/rexml).


Updates `rexml` from 3.3.6 to 3.3.9
- [Release notes](https://github.com/ruby/rexml/releases)
- [Changelog](https://github.com/ruby/rexml/blob/master/NEWS.md)
- [Commits](https://github.com/ruby/rexml/compare/v3.3.6...v3.3.9)

---
updated-dependencies:
- dependency-name: rexml
  dependency-type: indirect
  dependency-group: bundler
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-28 14:32:29 -07:00
Paul Beusterien f0656f56eb Fix doc generation warning (#213) 2024-10-01 14:33:47 -04:00
dependabot[bot] 417788f82f Bump actions/download-artifact (#211)
Bumps the github_actions group with 1 update in the /.github/workflows directory: [actions/download-artifact](https://github.com/actions/download-artifact).


Updates `actions/download-artifact` from 2 to 4.1.7
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](https://github.com/actions/download-artifact/compare/v2...v4.1.7)

---
updated-dependencies:
- dependency-name: actions/download-artifact
  dependency-type: direct:production
  dependency-group: github_actions
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-09-03 14:19:57 -07:00
dependabot[bot] d6cf51c461 Bump rexml from 3.2.8 to 3.3.6 in the bundler group (#210)
Bumps the bundler group with 1 update: [rexml](https://github.com/ruby/rexml).


Updates `rexml` from 3.2.8 to 3.3.6
- [Release notes](https://github.com/ruby/rexml/releases)
- [Changelog](https://github.com/ruby/rexml/blob/master/NEWS.md)
- [Commits](https://github.com/ruby/rexml/compare/v3.2.8...v3.3.6)

---
updated-dependencies:
- dependency-name: rexml
  dependency-type: indirect
  dependency-group: bundler
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-08-22 14:34:30 -07:00
Andrew Heard 53156c7ec2 [v8.0.2] Update GoogleUtilities.podspec version (#209) CocoaPods-8.0.2 8.0.2 2024-08-09 11:41:53 -04:00
Andrew Heard bf6e0c5258 Set default logger level to GULLoggerLevelNotice (#207) 2024-08-08 18:17:17 -04:00
Andrew Heard e24b5c4137 Move SwiftFormat options to a config file (#208) 2024-08-08 18:14:40 -04:00
Nick Cooke 66dd81c729 [v8.0.1] Update GoogleUtilities.podspec (#206)
* [v8.0.1] Update GoogleUtilities.podspec

* Add copyright to GoogleUtilities/Privacy/Empty.swift

* Add changelog entry

skip-ci
8.0.1 CocoaPods-8.0.1
2024-07-25 15:16:38 -04:00
Andrew Heard 9b3e8d4615 Remove leftover undef GUL_LOGGING_FUNCTION (#205) 2024-07-25 15:15:05 -04:00
Andrew Heard 6ba4fa9ff3 Revert "Add OSLog to podspec (#201)" (#204)
This reverts commit 493b5a0d33.
8.0.0 CocoaPods-8.0.0
2024-07-11 13:18:17 -07:00
Paul Beusterien 3057f5d508 Update oslog import (#203) 2024-07-11 12:39:00 -07:00
Paul Beusterien 32d8a9eb53 Remove deprecated logger APIs and update Changelog (#202) 2024-07-11 11:17:10 -07:00
Paul Beusterien 493b5a0d33 Add OSLog to podspec (#201) 2024-07-11 10:34:14 -07:00
Andrew Heard 3cd2e3dc57 Migrate from ASL to OSLog (#192) 2024-07-10 21:10:56 -04:00
Andrew Heard 41bf68bcda Remove Promises dependency in SPM (#200) 2024-07-10 19:18:12 -04:00
Nick Cooke e70da7c48a Merge branch 'nc/merge-release-11.0' 2024-07-09 11:38:58 -04:00