Paul Beusterien před 5 roky
rodič
revize
f3b8461157
45 změnil soubory, kde provedl 247 přidání a 91 odebrání
  1. 29 0
      .github/workflows/messaging.yml
  2. 48 0
      .swiftpm/xcode/xcshareddata/xcschemes/Firebase-Package.xcscheme
  3. 52 0
      .swiftpm/xcode/xcshareddata/xcschemes/MessagingUnit.xcscheme
  4. 1 0
      FirebaseCore/CHANGELOG.md
  5. 4 3
      FirebaseMessaging.podspec
  6. 2 2
      FirebaseMessaging/Sources/FIRMessaging.m
  7. 1 1
      FirebaseMessaging/Sources/FIRMessagingAnalytics.m
  8. 1 1
      FirebaseMessaging/Sources/FIRMessagingExtensionHelper.m
  9. 1 1
      FirebaseMessaging/Sources/FIRMessagingLogger.h
  10. 1 1
      FirebaseMessaging/Sources/FIRMessagingPendingTopicsList.h
  11. 1 1
      FirebaseMessaging/Sources/FIRMessagingPubSub.h
  12. 1 1
      FirebaseMessaging/Sources/FIRMessagingPubSub.m
  13. 1 1
      FirebaseMessaging/Sources/FIRMessagingTopicOperation.h
  14. 1 1
      FirebaseMessaging/Sources/FIRMessaging_Private.h
  15. 1 1
      FirebaseMessaging/Sources/FirebaseMessaging.h
  16. 1 1
      FirebaseMessaging/Sources/NSDictionary+FIRMessaging.m
  17. 1 1
      FirebaseMessaging/Sources/NSError+FIRMessaging.m
  18. 0 0
      FirebaseMessaging/Sources/Public/FirebaseMessaging/FIRMessaging.h
  19. 0 0
      FirebaseMessaging/Sources/Public/FirebaseMessaging/FIRMessagingExtensionHelper.h
  20. 2 2
      FirebaseMessaging/Sources/Public/FirebaseMessaging/FirebaseMessaging.h
  21. 2 2
      FirebaseMessaging/Tests/UnitTests/FIRInstanceIDWithFCMTest.m
  22. 4 1
      FirebaseMessaging/Tests/UnitTests/FIRMessagingAnalyticsTest.m
  23. 1 1
      FirebaseMessaging/Tests/UnitTests/FIRMessagingContextManagerServiceTest.m
  24. 3 3
      FirebaseMessaging/Tests/UnitTests/FIRMessagingExtensionHelperTest.m
  25. 4 2
      FirebaseMessaging/Tests/UnitTests/FIRMessagingHandlingTest.m
  26. 2 2
      FirebaseMessaging/Tests/UnitTests/FIRMessagingLinkHandlingTest.m
  27. 1 1
      FirebaseMessaging/Tests/UnitTests/FIRMessagingPendingTopicsListTest.m
  28. 1 1
      FirebaseMessaging/Tests/UnitTests/FIRMessagingPubSubTest.m
  29. 5 2
      FirebaseMessaging/Tests/UnitTests/FIRMessagingRemoteNotificationsProxyTest.m
  30. 3 3
      FirebaseMessaging/Tests/UnitTests/FIRMessagingRmqManagerTest.m
  31. 2 2
      FirebaseMessaging/Tests/UnitTests/FIRMessagingServiceTest.m
  32. 4 1
      FirebaseMessaging/Tests/UnitTests/FIRMessagingSyncMessageManagerTest.m
  33. 2 2
      FirebaseMessaging/Tests/UnitTests/FIRMessagingTest.m
  34. 1 1
      FirebaseMessaging/Tests/UnitTests/FIRMessagingTestUtilities.h
  35. 2 2
      FirebaseMessaging/Tests/UnitTests/FIRMessagingTestUtilities.m
  36. 1 1
      FirebaseMessaging/Tests/UnitTests/FIRTestsAssertionHandler.m
  37. 0 26
      FirebaseMessaging/Tests/UnitTests/Info.plist
  38. 1 1
      FirebaseMessaging/Tests/UnitTests/XCTestCase+FIRMessagingRmqManagerTests.m
  39. 0 0
      FirebaseMessaging/Tests/UnitTestsSwift/FIRMessagingInstanceTest.swift
  40. 54 16
      Package.swift
  41. 2 0
      SwiftPMTests/objc-import-test/objc-header.m
  42. 1 0
      SwiftPMTests/objc-import-test/objc-module.m
  43. 1 1
      SwiftPMTests/swift-test/main.swift
  44. 1 1
      scripts/change_headers.swift
  45. 0 1
      scripts/check_imports.swift

+ 29 - 0
.github/workflows/messaging.yml

@@ -53,6 +53,35 @@ jobs:
     - name: Build and test
       run: scripts/third_party/travis/retry.sh scripts/pod_lib_lint.rb FirebaseMessaging.podspec --platforms=${{ matrix.target }}
 
+  spm:
+    # Don't run on private repo unless it is a PR.
+    if: github.repository != 'FirebasePrivate/firebase-ios-sdk' || github.event_name == 'pull_request'
+    runs-on: macOS-latest
+    steps:
+    - uses: actions/checkout@v2
+    - name: Xcode 12
+      run: sudo xcode-select -s /Applications/Xcode_12.app/Contents/Developer
+    - name: Initialize xcodebuild
+      run: xcodebuild -list
+    - name: iOS Unit Tests
+      run: scripts/third_party/travis/retry.sh ./scripts/build.sh MessagingUnit iOS spm
+
+  spm-cron:
+    # Don't run on private repo.
+    if: github.event_name == 'schedule' && github.repository != 'FirebasePrivate/firebase-ios-sdk'
+    runs-on: macOS-latest
+    strategy:
+      matrix:
+        target: [tvOS, macOS, catalyst]
+    steps:
+    - uses: actions/checkout@v2
+    - name: Xcode 12
+      run: sudo xcode-select -s /Applications/Xcode_12.app/Contents/Developer
+    - name: Initialize xcodebuild
+      run: xcodebuild -list
+    - name: Unit Tests
+      run: scripts/third_party/travis/retry.sh ./scripts/build.sh MessagingUnit ${{ matrix.target }} spm
+
   catalyst:
     # Don't run on private repo unless it is a PR.
     if: github.repository != 'FirebasePrivate/firebase-ios-sdk' || github.event_name == 'pull_request'

+ 48 - 0
.swiftpm/xcode/xcshareddata/xcschemes/Firebase-Package.xcscheme

@@ -482,6 +482,34 @@
                ReferencedContainer = "container:">
             </BuildableReference>
          </BuildActionEntry>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "FirebaseInstanceID"
+               BuildableName = "FirebaseInstanceID"
+               BlueprintName = "FirebaseInstanceID"
+               ReferencedContainer = "container:">
+            </BuildableReference>
+         </BuildActionEntry>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "FirebaseMessaging"
+               BuildableName = "FirebaseMessaging"
+               BlueprintName = "FirebaseMessaging"
+               ReferencedContainer = "container:">
+            </BuildableReference>
+         </BuildActionEntry>
       </BuildActionEntries>
    </BuildAction>
    <TestAction
@@ -630,6 +658,26 @@
                ReferencedContainer = "container:">
             </BuildableReference>
          </TestableReference>
+         <TestableReference
+            skipped = "NO">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "analytics-import-test"
+               BuildableName = "analytics-import-test"
+               BlueprintName = "analytics-import-test"
+               ReferencedContainer = "container:">
+            </BuildableReference>
+         </TestableReference>
+         <TestableReference
+            skipped = "NO">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "MessagingUnit"
+               BuildableName = "MessagingUnit"
+               BlueprintName = "MessagingUnit"
+               ReferencedContainer = "container:">
+            </BuildableReference>
+         </TestableReference>
       </Testables>
    </TestAction>
    <LaunchAction

+ 52 - 0
.swiftpm/xcode/xcshareddata/xcschemes/MessagingUnit.xcscheme

@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "1200"
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+   </BuildAction>
+   <TestAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES">
+      <Testables>
+         <TestableReference
+            skipped = "NO">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "MessagingUnit"
+               BuildableName = "MessagingUnit"
+               BlueprintName = "MessagingUnit"
+               ReferencedContainer = "container:">
+            </BuildableReference>
+         </TestableReference>
+      </Testables>
+   </TestAction>
+   <LaunchAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "YES"
+      debugServiceExtension = "internal"
+      allowLocationSimulation = "YES">
+   </LaunchAction>
+   <ProfileAction
+      buildConfiguration = "Release"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      debugDocumentVersioning = "YES">
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>

+ 1 - 0
FirebaseCore/CHANGELOG.md

@@ -1,6 +1,7 @@
 # Firebase 7.0.0
 - [changed] Update minimum iOS version to iOS 10 except for Analytics which is now iOS 9. (#4847)
 - [changed] Update minimum macOS version to 10.12.
+- [added] Swift Package Manager support for Firebase Messaging. (#5641)
 
 # Firebase 6.33.0
 - [fixed] Swift Package Manager - Define system framework and system library dependencies. This

+ 4 - 3
FirebaseMessaging.podspec

@@ -33,6 +33,8 @@ device, and it is completely free.
     base_dir + 'Sources/**/*.[mh]',
     'Interop/Analytics/Public/*.h',
     'FirebaseCore/Sources/Private/*.h',
+    'Firebase/InstanceID/Private/*.h',
+    'Firebase/InstanceID/Public/*.h',
     'FirebaseInstallations/Source/Library/Private/*.h',
     'GoogleUtilities/AppDelegateSwizzler/Private/*.h',
     'GoogleUtilities/Environment/Private/*.h',
@@ -40,12 +42,11 @@ device, and it is completely free.
     'GoogleUtilities/UserDefaults/Private/*.h',
   ]
   s.requires_arc = base_dir + 'Sources/*.m'
-  s.public_header_files = base_dir + 'Sources/Public/*.h'
+  s.public_header_files = base_dir + 'Sources/Public/FirebaseMessaging/*.h'
   s.library = 'sqlite3'
   s.pod_target_xcconfig = {
     'GCC_C_LANGUAGE_STANDARD' => 'c99',
     'GCC_PREPROCESSOR_DEFINITIONS' =>
-      'GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS=1 ' +
       'FIRMessaging_LIB_VERSION=' + String(s.version),
     # Unit tests do library imports using repo-root relative paths.
     'HEADER_SEARCH_PATHS' => '"${PODS_TARGET_SRCROOT}"',
@@ -63,7 +64,7 @@ device, and it is completely free.
 
   s.test_spec 'unit' do |unit_tests|
     unit_tests.platforms = {:ios => '10.0', :osx => '10.12', :tvos => '10.0'}
-    unit_tests.source_files = 'FirebaseMessaging/Tests/UnitTests/*.{m,h,swift}'
+    unit_tests.source_files = 'FirebaseMessaging/Tests/UnitTests*/*.{m,h,swift}'
     unit_tests.requires_app_host = true
     unit_tests.pod_target_xcconfig = {
      'CLANG_ENABLE_OBJC_WEAK' => 'YES'

+ 2 - 2
FirebaseMessaging/Sources/FIRMessaging.m

@@ -18,12 +18,12 @@
 #error FIRMessagingLib should be compiled with ARC.
 #endif
 
-#import <FirebaseMessaging/FIRMessaging.h>
-#import <FirebaseMessaging/FIRMessagingExtensionHelper.h>
+#import "FirebaseMessaging/Sources/Public/FirebaseMessaging/FIRMessaging.h"
 #import "Firebase/InstanceID/Private/FIRInstanceID_Private.h"
 #import "Firebase/InstanceID/Public/FirebaseInstanceID.h"
 #import "FirebaseCore/Sources/Private/FirebaseCoreInternal.h"
 #import "FirebaseMessaging/Sources/Interop/FIRMessagingInterop.h"
+#import "FirebaseMessaging/Sources/Public/FirebaseMessaging/FIRMessagingExtensionHelper.h"
 #import "GoogleUtilities/AppDelegateSwizzler/Private/GULAppDelegateSwizzler.h"
 #import "GoogleUtilities/Reachability/Private/GULReachabilityChecker.h"
 #import "GoogleUtilities/UserDefaults/Private/GULUserDefaults.h"

+ 1 - 1
FirebaseMessaging/Sources/FIRMessagingAnalytics.m

@@ -188,7 +188,7 @@ static NSString *const kAnalyticsTrackConversions = @"google.c.a."
 
 + (void)logMessage:(NSDictionary *)notification
        toAnalytics:(id<FIRAnalyticsInterop> _Nullable)analytics {
-  // iOS onlly because Analytics doesn't support tvOS.
+  // iOS only because Analytics doesn't support other platforms.
 #if TARGET_OS_IOS
   if (![self canLogNotification:notification]) {
     return;

+ 1 - 1
FirebaseMessaging/Sources/FIRMessagingExtensionHelper.m

@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-#import <FirebaseMessaging/FIRMessagingExtensionHelper.h>
+#import "FirebaseMessaging/Sources/Public/FirebaseMessaging/FIRMessagingExtensionHelper.h"
 
 #import "FirebaseMessaging/Sources/FIRMMessageCode.h"
 #import "FirebaseMessaging/Sources/FIRMessagingLogger.h"

+ 1 - 1
FirebaseMessaging/Sources/FIRMessagingLogger.h

@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-#import "FIRMMessageCode.h"
+#import "FirebaseMessaging/Sources/FIRMMessageCode.h"
 
 // The convenience macros are only defined if they haven't already been defined.
 #ifndef FIRMessagingLoggerInfo

+ 1 - 1
FirebaseMessaging/Sources/FIRMessagingPendingTopicsList.h

@@ -16,7 +16,7 @@
 
 #import <Foundation/Foundation.h>
 
-#import <FirebaseMessaging/FIRMessaging.h>
+#import "FirebaseMessaging/Sources/Public/FirebaseMessaging/FIRMessaging.h"
 
 #import "FirebaseMessaging/Sources/FIRMessagingTopicsCommon.h"
 

+ 1 - 1
FirebaseMessaging/Sources/FIRMessagingPubSub.h

@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-#import <FirebaseMessaging/FIRMessaging.h>
+#import "FirebaseMessaging/Sources/Public/FirebaseMessaging/FIRMessaging.h"
 
 NS_ASSUME_NONNULL_BEGIN
 

+ 1 - 1
FirebaseMessaging/Sources/FIRMessagingPubSub.m

@@ -16,8 +16,8 @@
 
 #import "FirebaseMessaging/Sources/FIRMessagingPubSub.h"
 
-#import <FirebaseMessaging/FIRMessaging.h>
 #import "Firebase/InstanceID/Private/FIRInstanceID_Private.h"
+#import "FirebaseMessaging/Sources/Public/FirebaseMessaging/FIRMessaging.h"
 #import "GoogleUtilities/Environment/Private/GULSecureCoding.h"
 #import "GoogleUtilities/UserDefaults/Private/GULUserDefaults.h"
 

+ 1 - 1
FirebaseMessaging/Sources/FIRMessagingTopicOperation.h

@@ -16,7 +16,7 @@
 
 #import <Foundation/Foundation.h>
 
-#import <FirebaseMessaging/FIRMessaging.h>
+#import "FirebaseMessaging/Sources/Public/FirebaseMessaging/FIRMessaging.h"
 
 #import "FirebaseMessaging/Sources/FIRMessagingTopicsCommon.h"
 

+ 1 - 1
FirebaseMessaging/Sources/FIRMessaging_Private.h

@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-#import <FirebaseMessaging/FIRMessaging.h>
+#import "FirebaseMessaging/Sources/Public/FirebaseMessaging/FIRMessaging.h"
 
 @class FIRMessagingClient;
 @class FIRMessagingPubSub;

+ 1 - 1
FirebaseMessaging/Sources/FirebaseMessaging.h

@@ -14,4 +14,4 @@
  * limitations under the License.
  */
 
-#import <FirebaseMessaging/FIRMessaging.h>
+#import "FirebaseMessaging/Sources/Public/FirebaseMessaging/FIRMessaging.h"

+ 1 - 1
FirebaseMessaging/Sources/NSDictionary+FIRMessaging.m

@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-#import "NSDictionary+FIRMessaging.h"
+#import "FirebaseMessaging/Sources/NSDictionary+FIRMessaging.h"
 
 @implementation NSDictionary (FIRMessaging)
 

+ 1 - 1
FirebaseMessaging/Sources/NSError+FIRMessaging.m

@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-#import "NSError+FIRMessaging.h"
+#import "FirebaseMessaging/Sources/NSError+FIRMessaging.h"
 
 NSString *const kFIRMessagingDomain = @"com.google.fcm";
 

+ 0 - 0
FirebaseMessaging/Sources/Public/FIRMessaging.h → FirebaseMessaging/Sources/Public/FirebaseMessaging/FIRMessaging.h


+ 0 - 0
FirebaseMessaging/Sources/Public/FIRMessagingExtensionHelper.h → FirebaseMessaging/Sources/Public/FirebaseMessaging/FIRMessagingExtensionHelper.h


+ 2 - 2
FirebaseMessaging/Sources/Public/FirebaseMessaging.h → FirebaseMessaging/Sources/Public/FirebaseMessaging/FirebaseMessaging.h

@@ -14,5 +14,5 @@
  * limitations under the License.
  */
 
-#import <FirebaseMessaging/FIRMessaging.h>
-#import <FirebaseMessaging/FIRMessagingExtensionHelper.h>
+#import "FIRMessaging.h"
+#import "FIRMessagingExtensionHelper.h"

+ 2 - 2
FirebaseMessaging/Tests/UnitTests/FIRInstanceIDWithFCMTest.m

@@ -14,14 +14,14 @@
  * limitations under the License.
  */
 
-#import <OCMock/OCMock.h>
 #import <XCTest/XCTest.h>
+#import "OCMock.h"
 
 #import "Firebase/InstanceID/Public/FirebaseInstanceID.h"
 #import "FirebaseCore/Sources/Private/FirebaseCoreInternal.h"
 #import "GoogleUtilities/UserDefaults/Private/GULUserDefaults.h"
 
-#import <FirebaseMessaging/FIRMessaging.h>
+#import "FirebaseMessaging/Sources/Public/FirebaseMessaging/FIRMessaging.h"
 
 #import "FirebaseMessaging/Sources/FIRMessaging_Private.h"
 #import "FirebaseMessaging/Tests/UnitTests/FIRMessagingTestUtilities.h"

+ 4 - 1
FirebaseMessaging/Tests/UnitTests/FIRMessagingAnalyticsTest.m

@@ -14,8 +14,8 @@
  * limitations under the License.
  */
 
-#import <OCMock/OCMock.h>
 #import <XCTest/XCTest.h>
+#import "OCMock.h"
 
 #import "Interop/Analytics/Public/FIRInteropEventNames.h"
 #import "Interop/Analytics/Public/FIRInteropParameterNames.h"
@@ -424,6 +424,8 @@ static FakeAnalyticsLogEventHandler _userPropertyHandler;
   [FIRMessagingAnalytics logUserPropertyForConversionTracking:notification toAnalytics:analytics];
 }
 
+#if !SWIFT_PACKAGE
+// This test depends on a sharedApplication which is not available in the Swift PM test env.
 - (void)testLogMessage {
   NSDictionary *notification = @{
     @"google.c.a.e" : @"1",
@@ -431,6 +433,7 @@ static FakeAnalyticsLogEventHandler _userPropertyHandler;
   [FIRMessagingAnalytics logMessage:notification toAnalytics:nil];
   OCMVerify([self.logClassMock logEvent:OCMOCK_ANY withNotification:notification toAnalytics:nil]);
 }
+#endif
 
 - (void)testLogOpenNotification {
   NSDictionary *notification = @{

+ 1 - 1
FirebaseMessaging/Tests/UnitTests/FIRMessagingContextManagerServiceTest.m

@@ -18,8 +18,8 @@
     __WATCH_OS_VERSION_MAX_ALLOWED >= __WATCHOS_3_0 || TARGET_OS_MACCATALYST
 #import <UserNotifications/UserNotifications.h>
 #endif
-#import <OCMock/OCMock.h>
 #import <XCTest/XCTest.h>
+#import "OCMock.h"
 
 #import "FirebaseMessaging/Sources/FIRMessagingContextManagerService.h"
 

+ 3 - 3
FirebaseMessaging/Tests/UnitTests/FIRMessagingExtensionHelperTest.m

@@ -14,11 +14,11 @@
  * limitations under the License.
  */
 
-#import <OCMock/OCMock.h>
 #import <XCTest/XCTest.h>
+#import "OCMock.h"
 
-#import <FirebaseMessaging/FIRMessaging.h>
-#import <FirebaseMessaging/FIRMessagingExtensionHelper.h>
+#import "FirebaseMessaging/Sources/Public/FirebaseMessaging/FIRMessaging.h"
+#import "FirebaseMessaging/Sources/Public/FirebaseMessaging/FIRMessagingExtensionHelper.h"
 
 API_AVAILABLE(macos(10.14), ios(10.0))
 typedef void (^FIRMessagingContentHandler)(UNNotificationContent *content);

+ 4 - 2
FirebaseMessaging/Tests/UnitTests/FIRMessagingHandlingTest.m

@@ -16,11 +16,11 @@
 
 #import <XCTest/XCTest.h>
 
-#import <OCMock/OCMock.h>
+#import "OCMock.h"
 
-#import <FirebaseMessaging/FIRMessaging.h>
 #import "Firebase/InstanceID/Public/FirebaseInstanceID.h"
 #import "FirebaseCore/Sources/Private/FirebaseCoreInternal.h"
+#import "FirebaseMessaging/Sources/Public/FirebaseMessaging/FIRMessaging.h"
 #import "GoogleUtilities/UserDefaults/Private/GULUserDefaults.h"
 #import "Interop/Analytics/Public/FIRAnalyticsInterop.h"
 
@@ -168,8 +168,10 @@ static NSString *const kFIRMessagingDefaultsTestDomain = @"com.messaging.tests";
   OCMReject([_testUtil.mockMessaging handleIncomingLinkIfNeededFromMessage:notificationPayload]);
   OCMReject([_mockMessagingAnalytics logMessage:notificationPayload toAnalytics:[OCMArg any]]);
 
+#if !(SWIFT_PACKAGE && TARGET_OS_TV)  // Not enough space.
   XCTAssertEqualObjects(@(FIRMessagingMessageStatusNew),
                         @([_testUtil.messaging appDidReceiveMessage:notificationPayload].status));
+#endif
   OCMVerifyAll(_testUtil.mockMessaging);
 }
 

+ 2 - 2
FirebaseMessaging/Tests/UnitTests/FIRMessagingLinkHandlingTest.m

@@ -14,13 +14,13 @@
  * limitations under the License.
  */
 
-#import <OCMock/OCMock.h>
 #import <XCTest/XCTest.h>
+#import "OCMock.h"
 
 #import "Firebase/InstanceID/Public/FIRInstanceID.h"
 #import "GoogleUtilities/UserDefaults/Private/GULUserDefaults.h"
 
-#import <FirebaseMessaging/FIRMessaging.h>
+#import "FirebaseMessaging/Sources/Public/FirebaseMessaging/FIRMessaging.h"
 
 #import "FirebaseMessaging/Sources/FIRMessagingConstants.h"
 #import "FirebaseMessaging/Tests/UnitTests/FIRMessagingTestNotificationUtilities.h"

+ 1 - 1
FirebaseMessaging/Tests/UnitTests/FIRMessagingPendingTopicsListTest.m

@@ -14,8 +14,8 @@
  * limitations under the License.
  */
 
-#import <OCMock/OCMock.h>
 #import <XCTest/XCTest.h>
+#import "OCMock.h"
 
 #import "FirebaseMessaging/Tests/UnitTests/FIRMessagingTestUtilities.h"
 

+ 1 - 1
FirebaseMessaging/Tests/UnitTests/FIRMessagingPubSubTest.m

@@ -14,8 +14,8 @@
  * limitations under the License.
  */
 
-#import <OCMock/OCMock.h>
 #import <XCTest/XCTest.h>
+#import "OCMock.h"
 
 #import "GoogleUtilities/Reachability/Private/GULReachabilityChecker.h"
 

+ 5 - 2
FirebaseMessaging/Tests/UnitTests/FIRMessagingRemoteNotificationsProxyTest.m

@@ -18,10 +18,10 @@
     __TV_OS_VERSION_MAX_ALLOWED >= __TV_10_0 || __MAC_OS_X_VERSION_MAX_ALLOWED >= __MAC_10_14
 #import <UserNotifications/UserNotifications.h>
 #endif
-#import <OCMock/OCMock.h>
 #import <XCTest/XCTest.h>
+#import "OCMock.h"
 
-#import <FirebaseMessaging/FIRMessaging.h>
+#import "FirebaseMessaging/Sources/Public/FirebaseMessaging/FIRMessaging.h"
 #import "GoogleUtilities/AppDelegateSwizzler/Private/GULAppDelegateSwizzler.h"
 
 #import "FirebaseMessaging/Sources/FIRMessagingRemoteNotificationsProxy.h"
@@ -195,6 +195,8 @@
       didReceiveRemoteNotification:@{}];
 }
 
+#if !SWIFT_PACKAGE
+// The next 3 tests depend on a sharedApplication which is not available in the Swift PM test env.
 - (void)testSwizzledIncompleteAppDelegateRemoteNotificationMethod {
   IncompleteAppDelegate *incompleteAppDelegate = [[IncompleteAppDelegate alloc] init];
   [[GULAppDelegateSwizzler sharedApplication] setDelegate:incompleteAppDelegate];
@@ -284,6 +286,7 @@
 
   XCTAssertEqual(appDelegate.registerForRemoteNotificationsError, error);
 }
+#endif
 
 - (void)testListeningForDelegateChangesOnInvalidUserNotificationCenter {
   if (@available(macOS 10.14, iOS 10.0, *)) {

+ 3 - 3
FirebaseMessaging/Tests/UnitTests/FIRMessagingRmqManagerTest.m

@@ -16,10 +16,10 @@
 
 #import <XCTest/XCTest.h>
 
-#import <OCMock/OCMock.h>
+#import "OCMock.h"
 
-#import "FIRTestsAssertionHandler.h"
-#import "XCTestCase+FIRMessagingRmqManagerTests.h"
+#import "FirebaseMessaging/Tests/UnitTests/FIRTestsAssertionHandler.h"
+#import "FirebaseMessaging/Tests/UnitTests/XCTestCase+FIRMessagingRmqManagerTests.h"
 
 #import "FirebaseMessaging/Sources/FIRMessagingPersistentSyncMessage.h"
 #import "FirebaseMessaging/Sources/FIRMessagingRmqManager.h"

+ 2 - 2
FirebaseMessaging/Tests/UnitTests/FIRMessagingServiceTest.m

@@ -14,16 +14,16 @@
  * limitations under the License.
  */
 
-#import <OCMock/OCMock.h>
 #import <XCTest/XCTest.h>
+#import "OCMock.h"
 
 #import "Firebase/InstanceID/Public/FirebaseInstanceID.h"
 #import "GoogleUtilities/UserDefaults/Private/GULUserDefaults.h"
 
-#import <FirebaseMessaging/FIRMessaging.h>
 #import "FirebaseMessaging/Sources/FIRMessagingPubSub.h"
 #import "FirebaseMessaging/Sources/FIRMessagingTopicsCommon.h"
 #import "FirebaseMessaging/Sources/NSError+FIRMessaging.h"
+#import "FirebaseMessaging/Sources/Public/FirebaseMessaging/FIRMessaging.h"
 #import "FirebaseMessaging/Tests/UnitTests/FIRMessagingTestUtilities.h"
 
 static NSString *const kFakeToken =

+ 4 - 1
FirebaseMessaging/Tests/UnitTests/FIRMessagingSyncMessageManagerTest.m

@@ -16,7 +16,7 @@
 
 #import <XCTest/XCTest.h>
 
-#import "XCTestCase+FIRMessagingRmqManagerTests.h"
+#import "FirebaseMessaging/Tests/UnitTests/XCTestCase+FIRMessagingRmqManagerTests.h"
 
 #import "FirebaseMessaging/Sources/FIRMessagingConstants.h"
 #import "FirebaseMessaging/Sources/FIRMessagingPersistentSyncMessage.h"
@@ -72,6 +72,8 @@ static NSString *const kRmqSqliteFilename = @"rmq-sync-manager-test";
 
   XCTAssertFalse([self.syncMessageManager didReceiveAPNSSyncMessage:newMessage]);
 }
+
+#if !(SWIFT_PACKAGE && TARGET_OS_TV)  // Not enough space.
 /**
  *  Test receiving a duplicate message via APNS.
  */
@@ -182,5 +184,6 @@ static NSString *const kRmqSqliteFilename = @"rmq-sync-manager-test";
   XCTAssertNil([self.rmqManager querySyncMessageWithRmqID:expiredMessageID]);
   XCTAssertNotNil([self.rmqManager querySyncMessageWithRmqID:noTTLMessageID]);
 }
+#endif  // #if !(SWIFT_PACKAGE && TARGET_OS_TV)
 
 @end

+ 2 - 2
FirebaseMessaging/Tests/UnitTests/FIRMessagingTest.m

@@ -16,14 +16,14 @@
 
 #import <XCTest/XCTest.h>
 
-#import <OCMock/OCMock.h>
+#import "OCMock.h"
 
 #import "Firebase/InstanceID/Public/FirebaseInstanceID.h"
 #import "FirebaseCore/Sources/Private/FirebaseCoreInternal.h"
 #import "GoogleUtilities/UserDefaults/Private/GULUserDefaults.h"
 #import "Interop/Analytics/Public/FIRAnalyticsInterop.h"
 
-#import <FirebaseMessaging/FIRMessaging.h>
+#import "FirebaseMessaging/Sources/Public/FirebaseMessaging/FIRMessaging.h"
 #import "Interop/Analytics/Public/FIRAnalyticsInterop.h"
 
 #import "FirebaseMessaging/Sources/FIRMessaging_Private.h"

+ 1 - 1
FirebaseMessaging/Tests/UnitTests/FIRMessagingTestUtilities.h

@@ -16,8 +16,8 @@
 
 #import <Foundation/Foundation.h>
 
-#import <FirebaseMessaging/FIRMessaging.h>
 #import "Firebase/InstanceID/Public/FIRInstanceID.h"
+#import "FirebaseMessaging/Sources/Public/FirebaseMessaging/FIRMessaging.h"
 
 #import "FirebaseMessaging/Sources/FIRMessagingPendingTopicsList.h"
 #import "FirebaseMessaging/Sources/FIRMessagingTopicsCommon.h"

+ 2 - 2
FirebaseMessaging/Tests/UnitTests/FIRMessagingTestUtilities.m

@@ -14,9 +14,9 @@
  * limitations under the License.
  */
 
-#import <OCMock/OCMock.h>
+#import "OCMock.h"
 
-#import "XCTestCase+FIRMessagingRmqManagerTests.h"
+#import "FirebaseMessaging/Tests/UnitTests/XCTestCase+FIRMessagingRmqManagerTests.h"
 
 #import "FirebaseMessaging/Tests/UnitTests/FIRMessagingTestUtilities.h"
 

+ 1 - 1
FirebaseMessaging/Tests/UnitTests/FIRTestsAssertionHandler.m

@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-#import "FIRTestsAssertionHandler.h"
+#import "FirebaseMessaging/Tests/UnitTests/FIRTestsAssertionHandler.h"
 
 @interface FIRTestsAssertionHandler ()
 

+ 0 - 26
FirebaseMessaging/Tests/UnitTests/Info.plist

@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>en</string>
-	<key>CFBundleExecutable</key>
-	<string>$(EXECUTABLE_NAME)</string>
-	<key>CFBundleIdentifier</key>
-	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundleName</key>
-	<string>$(PRODUCT_NAME)</string>
-	<key>CFBundlePackageType</key>
-	<string>BNDL</string>
-	<key>CFBundleShortVersionString</key>
-	<string>1.0</string>
-	<key>CFBundleSignature</key>
-	<string>????</string>
-	<key>CFBundleVersion</key>
-	<string>1</string>
-        <key>FirebaseMessagingAutoInitEnabled</key>
-        <false/>
-</dict>
-</plist>

+ 1 - 1
FirebaseMessaging/Tests/UnitTests/XCTestCase+FIRMessagingRmqManagerTests.m

@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-#import "XCTestCase+FIRMessagingRmqManagerTests.h"
+#import "FirebaseMessaging/Tests/UnitTests/XCTestCase+FIRMessagingRmqManagerTests.h"
 
 #import <Foundation/Foundation.h>
 

+ 0 - 0
FirebaseMessaging/Tests/UnitTests/FIRMessagingInstanceTest.swift → FirebaseMessaging/Tests/UnitTestsSwift/FIRMessagingInstanceTest.swift


+ 54 - 16
Package.swift

@@ -68,10 +68,10 @@ let package = Package(
       name: "FirebaseInstallations",
       targets: ["FirebaseInstallations"]
     ),
-    // .library(
-    //   name: "FirebaseInstanceID",
-    //   targets: ["FirebaseInstanceID"]
-    // ),
+    .library(
+      name: "FirebaseMessaging",
+      targets: ["FirebaseMessaging"]
+    ),
     .library(
       name: "FirebaseRemoteConfig",
       targets: ["FirebaseRemoteConfig"]
@@ -492,17 +492,21 @@ let package = Package(
       ]
     ),
 
-    // .target(
-    //   name: "FirebaseInstanceID",
-    //   dependencies: ["FirebaseCore", "FirebaseInstallations",
-    //                  "GoogleUtilities_Environment", "GoogleUtilities_UserDefaults"],
-    //   path: "Firebase/InstanceID",
-    //   publicHeadersPath: "Public",
-    //   cSettings: [
-    //     .headerSearchPath("../../"),
-    //     .define("FIRInstanceID_LIB_VERSION", to: firebaseVersion),
-    //   ]
-    // ),
+    .target(
+      name: "FirebaseInstanceID",
+      dependencies: ["FirebaseCore", "FirebaseInstallations",
+                     "GoogleUtilities_Environment", "GoogleUtilities_UserDefaults"],
+      path: "Firebase/InstanceID",
+      exclude: [
+        "CHANGELOG.md",
+      ],
+      publicHeadersPath: "Public",
+      cSettings: [
+        .headerSearchPath("../../"),
+        .define("FIRInstanceID_LIB_VERSION", to: firebaseVersion),
+      ]
+    ),
+
     .target(
       name: "FirebaseInstallations",
       dependencies: ["FirebaseCore", .product(name: "FBLPromises", package: "Promises"),
@@ -516,6 +520,39 @@ let package = Package(
         .linkedFramework("Security"),
       ]
     ),
+
+    .target(
+      name: "FirebaseMessaging",
+      dependencies: [
+        "FirebaseCore",
+        "FirebaseInstanceID",
+        "GoogleUtilities_AppDelegateSwizzler",
+        "GoogleUtilities_Environment",
+        "GoogleUtilities_Reachability",
+        "GoogleUtilities_UserDefaults",
+      ],
+      path: "FirebaseMessaging/Sources",
+      publicHeadersPath: "Public",
+      cSettings: [
+        .headerSearchPath("../../"),
+        .define("FIRMessaging_LIB_VERSION", to: firebaseVersion),
+      ],
+      linkerSettings: [
+        .linkedFramework("SystemConfiguration"),
+      ]
+    ),
+    .testTarget(
+      name: "MessagingUnit",
+      dependencies: ["FirebaseMessaging", "OCMock"],
+      path: "FirebaseMessaging/Tests/UnitTests",
+      exclude: [
+        "FIRMessagingContextManagerServiceTest.m", // TODO: Adapt its NSBundle usage to SPM.
+      ],
+      cSettings: [
+        .headerSearchPath("../../.."),
+      ]
+    ),
+
     .target(
       name: "SharedTestUtilities",
       dependencies: ["FirebaseCore"],
@@ -641,7 +678,7 @@ let package = Package(
         "FirebaseFunctions",
         "FirebaseInAppMessaging",
         "FirebaseInstallations",
-        // "FirebaseInstanceID",
+        "FirebaseMessaging",
         "FirebaseRemoteConfig",
         "FirebaseStorage",
         "FirebaseStorageSwift",
@@ -673,6 +710,7 @@ let package = Package(
         "FirebaseFunctions",
         "FirebaseInAppMessaging",
         "FirebaseInstallations",
+        "FirebaseMessaging",
         "FirebaseRemoteConfig",
         "FirebaseStorage",
       ],

+ 2 - 0
SwiftPMTests/objc-import-test/objc-header.m

@@ -23,6 +23,7 @@
 #import "FirebaseFunctions/FirebaseFunctions.h"
 #import "FirebaseInAppMessaging/FirebaseInAppMessaging.h"
 #import "FirebaseInstallations/FirebaseInstallations.h"
+#import "FirebaseMessaging/FirebaseMessaging.h"
 #import "FirebaseRemoteConfig/FirebaseRemoteConfig.h"
 #import "FirebaseStorage/FirebaseStorage.h"
 
@@ -37,5 +38,6 @@
 #import <FirebaseFunctions/FirebaseFunctions.h>
 #import <FirebaseInAppMessaging/FirebaseInAppMessaging.h>
 #import <FirebaseInstallations/FirebaseInstallations.h>
+#import <FirebaseMessaging/FirebaseMessaging.h>
 #import <FirebaseRemoteConfig/FirebaseRemoteConfig.h>
 #import <FirebaseStorage/FirebaseStorage.h>

+ 1 - 0
SwiftPMTests/objc-import-test/objc-module.m

@@ -22,5 +22,6 @@
 @import FirebaseFirestore;
 @import FirebaseFunctions;
 @import FirebaseInstallations;
+@import FirebaseMessaging;
 @import FirebaseRemoteConfig;
 @import FirebaseStorage;

+ 1 - 1
SwiftPMTests/swift-test/main.swift

@@ -24,7 +24,7 @@ import FirebaseFirestoreSwift
 import FirebaseFunctions
 import FirebaseInAppMessaging
 import FirebaseInstallations
-// import FirebaseInstanceID
+import FirebaseMessaging
 import FirebaseRemoteConfig
 import FirebaseStorage
 import FirebaseStorageSwift

+ 1 - 1
scripts/change_headers.swift

@@ -20,7 +20,7 @@
 import Foundation
 
 // Update with directories in which to find headers.
-let findHeaders = ["Firebase/InstanceID", "Example/InstanceID"]
+let findHeaders = ["FirebaseMessaging"]
 
 // Update with directories in which to change imports.
 let changeImports = ["GoogleUtilities", "FirebaseAuth", "FirebaseCore", "Firebase",

+ 0 - 1
scripts/check_imports.swift

@@ -42,7 +42,6 @@ let skipDirPatterns = ["/Sample/", "/Pods/", "FirebaseStorage/Tests/Integration"
     "FirebaseDatabase/Sources/third_party/Wrap-leveldb", // Pending SwiftPM for leveldb.
     "Example",
     "FirebaseInstallations/Source/Tests/Unit/",
-    "FirebaseMessaging",
     "Firestore",
     "GoogleUtilitiesComponents",
   ]