openid / AppAuth-iOS

iOS and macOS SDK for communicating with OAuth 2.0 and OpenID Connect providers.
https://openid.github.io/AppAuth-iOS
Apache License 2.0
1.77k stars 774 forks source link

AppAuth cannot be integrated as static libraries with CocoaPods because it does not define a module (`DEFINES_MODULE`) #844

Closed jmagman closed 7 months ago

jmagman commented 7 months ago

Describe the bug AppAuth cannot be added as a transitive dependency of a CocoaPods pod, when built as a static library.

To Reproduce

  1. Install CocoaPods.
  2. In Xcode, make new iOS app project.
  3. cd into the directory and pod init to initialize CocoaPods.
  4. In the generated Podfile comment out use_frameworks! to embed as static libs. Add a pod that depends on AppAuth, for example, GTMAppAuth:
    # Comment the next line if you don't want to use dynamic frameworks
    # use_frameworks!
    pod 'GTMAppAuth', '4.1.1'
  5. Run pod install, which fails:
    
    $ pod install
    Analyzing dependencies
    Downloading dependencies
    Installing AppAuth (1.7.3)
    Installing GTMAppAuth (4.1.1)
    Installing GTMSessionFetcher (3.3.2)
    [!] The following Swift pods cannot yet be integrated as static libraries:

The Swift pod GTMAppAuth depends upon GTMSessionFetcher and AppAuth, which do not define modules. To opt into those targets generating module maps (which is necessary to import them from Swift when building as static libraries), you may set use_modular_headers! globally in your Podfile, or specify :modular_headers => true for particular dependencies.


**Expected behavior**
`pod install` should succeed when adding a pod with a dependency on `AppAuth`.

**Environment**
macOS 14.4.1
CocoaPods 1.14.3

**Additional context**
`AppAuth` is not setting up a module, and doesn't have `DEFINES_MODULE` for that to be done automatically.

This can be fixed by adding `DEFINES_MODULE` to [AppAuth.podspec](https://github.com/openid/AppAuth-iOS/blob/master/AppAuth.podspec).  See [CocoaPods documentation about modular headers](https://blog.cocoapods.org/CocoaPods-1.5.0/#modular-headers).
```ruby
  s.xcconfig = {
     'DEFINES_MODULE' => 'YES',
  }
mdmathias commented 7 months ago

Related issue: https://github.com/openid/AppAuth-iOS/issues/559

jmagman commented 7 months ago

Related issue: #559

Ah, yes this issue is a duplicate of that, I missed it. Fortunately you likely don't need to tackle creating a manual modulemap, adding that DEFINES_MODULE build setting to the xcconfig in the podspec should be enough. See also https://github.com/flutter/flutter/issues/41007 and linked PRs for additional details about this problem.

jmagman commented 7 months ago

GoogleSignIn just released 7.1.1, which updated the dependency 'GTMAppAuth', '>= 1.3', '< 3.0' to 'GTMAppAuth', '>= 4.1.1', '< 5.0'. That bumped GTMAppAuth from 2.0.0 (on my machine, but presumably on CI as well) to 4.1.1. And between those versions, GTMAppAuth migrated from Objective-C to Swift https://github.com/google/GTMAppAuth/compare/2.0.0...4.1.1.

So it might be freshly complaining with that particular set of dependencies because the newly swift-ified Swift pod wants the Objective-C pod to define modules.