diff --git a/.github/workflows/integrate.yaml b/.github/workflows/integrate.yaml
index da67d66da..d64662ac4 100644
--- a/.github/workflows/integrate.yaml
+++ b/.github/workflows/integrate.yaml
@@ -82,7 +82,7 @@ jobs:
- run: ./flutter/bin/flutter build linux --target-platform linux-${{ matrix.arch }}
build_debug_ios:
- runs-on: macos-latest
+ runs-on: macos-15
steps:
- uses: actions/checkout@v5
- run: cat .github/workflows/versions.env >> $GITHUB_ENV
@@ -90,10 +90,8 @@ jobs:
with:
flutter-version: ${{ env.FLUTTER_VERSION }}
cache: true
- - name: Setup Xcode version
- uses: maxim-lobanov/setup-xcode@v1.6.0
- with:
- xcode-version: latest
+ - name: Use Xcode 16.4
+ run: sudo xcode-select --switch /Applications/Xcode_16.4.app
- run: brew install sqlcipher
- uses: moonrepo/setup-rust@v1
- name: Add Firebase Messaging
diff --git a/ios/Localizable.xcstrings b/ios/Localizable.xcstrings
new file mode 100644
index 000000000..4f594b190
--- /dev/null
+++ b/ios/Localizable.xcstrings
@@ -0,0 +1,32 @@
+{
+ "sourceLanguage" : "en",
+ "strings" : {
+ "%lld unread messages" : {
+ "comment" : "Default notification title",
+ "localizations" : {
+ "en" : {
+ "variations" : {
+ "plural" : {
+ "one" : {
+ "stringUnit" : {
+ "state" : "translated",
+ "value" : "Unread message"
+ }
+ },
+ "other" : {
+ "stringUnit" : {
+ "state" : "new",
+ "value" : "%lld unread messages"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "New message - open app to read" : {
+ "comment" : "Default notification body"
+ }
+ },
+ "version" : "1.0"
+}
\ No newline at end of file
diff --git a/ios/Notification Service Extension/Info.plist b/ios/Notification Service Extension/Info.plist
new file mode 100644
index 000000000..57421ebf9
--- /dev/null
+++ b/ios/Notification Service Extension/Info.plist
@@ -0,0 +1,13 @@
+
+
+
+
+ NSExtension
+
+ NSExtensionPointIdentifier
+ com.apple.usernotifications.service
+ NSExtensionPrincipalClass
+ $(PRODUCT_MODULE_NAME).NotificationService
+
+
+
diff --git a/ios/Notification Service Extension/Notification Service Extension.entitlements b/ios/Notification Service Extension/Notification Service Extension.entitlements
new file mode 100644
index 000000000..932f3e01e
--- /dev/null
+++ b/ios/Notification Service Extension/Notification Service Extension.entitlements
@@ -0,0 +1,10 @@
+
+
+
+
+ com.apple.security.application-groups
+
+ group.im.fluffychat.app
+
+
+
diff --git a/ios/Notification Service Extension/NotificationService.swift b/ios/Notification Service Extension/NotificationService.swift
new file mode 100644
index 000000000..9d464e127
--- /dev/null
+++ b/ios/Notification Service Extension/NotificationService.swift
@@ -0,0 +1,63 @@
+//
+// NotificationService.swift
+// Notification Extension
+//
+// Created by Christian Pauly on 26.08.25.
+//
+
+import UserNotifications
+import os
+
+class NotificationService: UNNotificationServiceExtension {
+
+ var contentHandler: ((UNNotificationContent) -> Void)?
+ var bestAttemptContent: UNMutableNotificationContent?
+
+ override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
+ self.contentHandler = contentHandler
+ bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)
+
+ if let bestAttemptContent = bestAttemptContent {
+ // Uncomment to read the push message payload:
+ // os_log("[FluffyChatPushHelper] New message received: %{public}@", log: .default, type: .error, bestAttemptContent.userInfo)
+ os_log("[FluffyChatPushHelper] New message received")
+
+ guard let roomId = bestAttemptContent.userInfo["room_id"] as? String,
+ let eventId = bestAttemptContent.userInfo["event_id"] as? String else {
+ os_log("[FluffyChatPushHelper] Room ID or Event ID is missing!")
+ let emptyContent = UNMutableNotificationContent()
+ contentHandler(emptyContent)
+ return
+ }
+ bestAttemptContent.threadIdentifier = roomId
+
+ if
+ let jsonString = bestAttemptContent.userInfo["counts"] as? String,
+ let jsonData = jsonString.data(using: .utf8),
+ let jsonMap = try? JSONSerialization.jsonObject(with: jsonData, options: []) as? [String: Any],
+ let unread = jsonMap["unread"] as? Int {
+ bestAttemptContent.title = String(
+ localized: "\(unread) unread messages",
+ comment: "Default notification title"
+ )
+ bestAttemptContent.badge = NSNumber(integerLiteral: unread)
+ }
+
+ // TODO: Download and decrypt event to display a better body:
+ bestAttemptContent.body = String(
+ localized: "New message - open app to read",
+ comment: "Default notification body"
+ )
+
+ contentHandler(bestAttemptContent)
+ }
+ }
+
+ override func serviceExtensionTimeWillExpire() {
+ // Called just before the extension will be terminated by the system.
+ // Use this as an opportunity to deliver your "best attempt" at modified content, otherwise the original push payload will be used.
+ if let contentHandler = contentHandler, let bestAttemptContent = bestAttemptContent {
+ contentHandler(bestAttemptContent)
+ }
+ }
+}
diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj
index a5b6eca36..50745c95c 100644
--- a/ios/Runner.xcodeproj/project.pbxproj
+++ b/ios/Runner.xcodeproj/project.pbxproj
@@ -19,6 +19,10 @@
C1005C48261071B5002F4F32 /* MainInterface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = C1005C46261071B5002F4F32 /* MainInterface.storyboard */; };
C1005C4C261071B5002F4F32 /* FluffyChat Share.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = C1005C42261071B5002F4F32 /* FluffyChat Share.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
C137635E2AD1446100A8F905 /* notification.caf in Resources */ = {isa = PBXBuildFile; fileRef = C137635D2AD1446100A8F905 /* notification.caf */; };
+ C14695592E642D400075F2F7 /* Notification Service Extension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = C14695522E642D400075F2F7 /* Notification Service Extension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
+ C14695662E642E450075F2F7 /* Localizable.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = C14695652E642E450075F2F7 /* Localizable.xcstrings */; };
+ C14695672E642E450075F2F7 /* Localizable.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = C14695652E642E450075F2F7 /* Localizable.xcstrings */; };
+ C14695682E642E450075F2F7 /* Localizable.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = C14695652E642E450075F2F7 /* Localizable.xcstrings */; };
C149567C25C7274F00A16396 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = C149567B25C7274F00A16396 /* GoogleService-Info.plist */; };
/* End PBXBuildFile section */
@@ -30,6 +34,13 @@
remoteGlobalIDString = C1005C41261071B5002F4F32;
remoteInfo = "FluffyChat Share";
};
+ C14695572E642D400075F2F7 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 97C146E61CF9000F007C117D /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = C14695512E642D400075F2F7;
+ remoteInfo = "Notification Service Extension";
+ };
/* End PBXContainerItemProxy section */
/* Begin PBXCopyFilesBuildPhase section */
@@ -50,6 +61,7 @@
dstSubfolderSpec = 13;
files = (
C1005C4C261071B5002F4F32 /* FluffyChat Share.appex in Embed App Extensions */,
+ C14695592E642D400075F2F7 /* Notification Service Extension.appex in Embed App Extensions */,
);
name = "Embed App Extensions";
runOnlyForDeploymentPostprocessing = 0;
@@ -81,6 +93,8 @@
C1005C49261071B5002F4F32 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
C1005C53261072D4002F4F32 /* FluffyChat Share.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "FluffyChat Share.entitlements"; sourceTree = ""; };
C137635D2AD1446100A8F905 /* notification.caf */ = {isa = PBXFileReference; lastKnownFileType = file; path = notification.caf; sourceTree = ""; };
+ C14695522E642D400075F2F7 /* Notification Service Extension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = "Notification Service Extension.appex"; sourceTree = BUILT_PRODUCTS_DIR; };
+ C14695652E642E450075F2F7 /* Localizable.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; path = Localizable.xcstrings; sourceTree = ""; };
C149567B25C7274F00A16396 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; };
C149567D25C7276200A16396 /* Runner.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Runner.entitlements; sourceTree = ""; };
C9EB6E6475A19949A37A2634 /* Pods_FluffyChat_Share.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_FluffyChat_Share.framework; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -88,6 +102,27 @@
F3778959E67CDA0CDB0D97BC /* Pods-FluffyChat Share.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FluffyChat Share.release.xcconfig"; path = "Target Support Files/Pods-FluffyChat Share/Pods-FluffyChat Share.release.xcconfig"; sourceTree = ""; };
/* End PBXFileReference section */
+/* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */
+ C146955D2E642D400075F2F7 /* Exceptions for "Notification Service Extension" folder in "Notification Service Extension" target */ = {
+ isa = PBXFileSystemSynchronizedBuildFileExceptionSet;
+ membershipExceptions = (
+ Info.plist,
+ );
+ target = C14695512E642D400075F2F7 /* Notification Service Extension */;
+ };
+/* End PBXFileSystemSynchronizedBuildFileExceptionSet section */
+
+/* Begin PBXFileSystemSynchronizedRootGroup section */
+ C14695532E642D400075F2F7 /* Notification Service Extension */ = {
+ isa = PBXFileSystemSynchronizedRootGroup;
+ exceptions = (
+ C146955D2E642D400075F2F7 /* Exceptions for "Notification Service Extension" folder in "Notification Service Extension" target */,
+ );
+ path = "Notification Service Extension";
+ sourceTree = "";
+ };
+/* End PBXFileSystemSynchronizedRootGroup section */
+
/* Begin PBXFrameworksBuildPhase section */
97C146EB1CF9000F007C117D /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
@@ -105,6 +140,13 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
+ C146954F2E642D400075F2F7 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
@@ -131,9 +173,11 @@
97C146E51CF9000F007C117D = {
isa = PBXGroup;
children = (
+ C14695652E642E450075F2F7 /* Localizable.xcstrings */,
9740EEB11CF90186004384FC /* Flutter */,
97C146F01CF9000F007C117D /* Runner */,
C1005C43261071B5002F4F32 /* FluffyChat Share */,
+ C14695532E642D400075F2F7 /* Notification Service Extension */,
97C146EF1CF9000F007C117D /* Products */,
E89DCAC000D371640E94E65B /* Pods */,
075EE1BE25359E34308E0B78 /* Frameworks */,
@@ -145,6 +189,7 @@
children = (
97C146EE1CF9000F007C117D /* Runner.app */,
C1005C42261071B5002F4F32 /* FluffyChat Share.appex */,
+ C14695522E642D400075F2F7 /* Notification Service Extension.appex */,
);
name = Products;
sourceTree = "";
@@ -213,6 +258,7 @@
);
dependencies = (
C1005C4B261071B5002F4F32 /* PBXTargetDependency */,
+ C14695582E642D400075F2F7 /* PBXTargetDependency */,
);
name = Runner;
productName = Runner;
@@ -237,13 +283,33 @@
productReference = C1005C42261071B5002F4F32 /* FluffyChat Share.appex */;
productType = "com.apple.product-type.app-extension";
};
+ C14695512E642D400075F2F7 /* Notification Service Extension */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = C146955E2E642D400075F2F7 /* Build configuration list for PBXNativeTarget "Notification Service Extension" */;
+ buildPhases = (
+ C146954E2E642D400075F2F7 /* Sources */,
+ C146954F2E642D400075F2F7 /* Frameworks */,
+ C14695502E642D400075F2F7 /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ fileSystemSynchronizedGroups = (
+ C14695532E642D400075F2F7 /* Notification Service Extension */,
+ );
+ name = "Notification Service Extension";
+ productName = "Notification Service Extension";
+ productReference = C14695522E642D400075F2F7 /* Notification Service Extension.appex */;
+ productType = "com.apple.product-type.app-extension";
+ };
/* End PBXNativeTarget section */
/* Begin PBXProject section */
97C146E61CF9000F007C117D /* Project object */ = {
isa = PBXProject;
attributes = {
- LastSwiftUpdateCheck = 1240;
+ LastSwiftUpdateCheck = 1640;
LastUpgradeCheck = 1510;
ORGANIZATIONNAME = "";
TargetAttributes = {
@@ -254,10 +320,12 @@
C1005C41261071B5002F4F32 = {
CreatedOnToolsVersion = 12.4;
};
+ C14695512E642D400075F2F7 = {
+ CreatedOnToolsVersion = 16.4;
+ };
};
};
buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */;
- compatibilityVersion = "Xcode 9.3";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
@@ -265,12 +333,14 @@
Base,
);
mainGroup = 97C146E51CF9000F007C117D;
+ preferredProjectObjectVersion = 77;
productRefGroup = 97C146EF1CF9000F007C117D /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
97C146ED1CF9000F007C117D /* Runner */,
C1005C41261071B5002F4F32 /* FluffyChat Share */,
+ C14695512E642D400075F2F7 /* Notification Service Extension */,
);
};
/* End PBXProject section */
@@ -285,6 +355,7 @@
C149567C25C7274F00A16396 /* GoogleService-Info.plist in Resources */,
C137635E2AD1446100A8F905 /* notification.caf in Resources */,
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
+ C14695672E642E450075F2F7 /* Localizable.xcstrings in Resources */,
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
@@ -293,10 +364,19 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
+ C14695682E642E450075F2F7 /* Localizable.xcstrings in Resources */,
C1005C48261071B5002F4F32 /* MainInterface.storyboard in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
+ C14695502E642D400075F2F7 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ C14695662E642E450075F2F7 /* Localizable.xcstrings in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
@@ -429,6 +509,13 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
+ C146954E2E642D400075F2F7 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
@@ -437,6 +524,11 @@
target = C1005C41261071B5002F4F32 /* FluffyChat Share */;
targetProxy = C1005C4A261071B5002F4F32 /* PBXContainerItemProxy */;
};
+ C14695582E642D400075F2F7 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = C14695512E642D400075F2F7 /* Notification Service Extension */;
+ targetProxy = C14695572E642D400075F2F7 /* PBXContainerItemProxy */;
+ };
/* End PBXTargetDependency section */
/* Begin PBXVariantGroup section */
@@ -512,6 +604,7 @@
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
+ SWIFT_EMIT_LOC_STRINGS = YES;
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
};
@@ -604,6 +697,7 @@
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
+ SWIFT_EMIT_LOC_STRINGS = YES;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Debug;
@@ -654,6 +748,7 @@
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_OPTIMIZATION_LEVEL = "-O";
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
@@ -832,6 +927,126 @@
};
name = Profile;
};
+ C146955A2E642D400075F2F7 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
+ CLANG_ENABLE_OBJC_WEAK = YES;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CODE_SIGN_ENTITLEMENTS = "Notification Service Extension/Notification Service Extension.entitlements";
+ CODE_SIGN_IDENTITY = "Apple Development";
+ CODE_SIGN_STYLE = Automatic;
+ CURRENT_PROJECT_VERSION = 1;
+ DEVELOPMENT_TEAM = 4NXF6Z997G;
+ ENABLE_USER_SCRIPT_SANDBOXING = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu17;
+ GENERATE_INFOPLIST_FILE = YES;
+ INFOPLIST_FILE = "Notification Service Extension/Info.plist";
+ INFOPLIST_KEY_CFBundleDisplayName = "Notification Service Extension";
+ INFOPLIST_KEY_NSHumanReadableCopyright = "";
+ IPHONEOS_DEPLOYMENT_TARGET = 18.5;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@executable_path/../../Frameworks",
+ );
+ LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
+ MARKETING_VERSION = 1.0;
+ MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
+ MTL_FAST_MATH = YES;
+ PRODUCT_BUNDLE_IDENTIFIER = "im.fluffychat.app.Notification-Service-Extension";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SKIP_INSTALL = YES;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
+ SWIFT_EMIT_LOC_STRINGS = YES;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = Debug;
+ };
+ C146955B2E642D400075F2F7 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
+ CLANG_ENABLE_OBJC_WEAK = YES;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CODE_SIGN_ENTITLEMENTS = "Notification Service Extension/Notification Service Extension.entitlements";
+ CODE_SIGN_IDENTITY = "Apple Development";
+ CODE_SIGN_STYLE = Automatic;
+ CURRENT_PROJECT_VERSION = 1;
+ DEVELOPMENT_TEAM = 4NXF6Z997G;
+ ENABLE_USER_SCRIPT_SANDBOXING = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu17;
+ GENERATE_INFOPLIST_FILE = YES;
+ INFOPLIST_FILE = "Notification Service Extension/Info.plist";
+ INFOPLIST_KEY_CFBundleDisplayName = "Notification Service Extension";
+ INFOPLIST_KEY_NSHumanReadableCopyright = "";
+ IPHONEOS_DEPLOYMENT_TARGET = 18.5;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@executable_path/../../Frameworks",
+ );
+ LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
+ MARKETING_VERSION = 1.0;
+ MTL_FAST_MATH = YES;
+ PRODUCT_BUNDLE_IDENTIFIER = "im.fluffychat.app.Notification-Service-Extension";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SKIP_INSTALL = YES;
+ SWIFT_EMIT_LOC_STRINGS = YES;
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = Release;
+ };
+ C146955C2E642D400075F2F7 /* Profile */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
+ CLANG_ENABLE_OBJC_WEAK = YES;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CODE_SIGN_ENTITLEMENTS = "Notification Service Extension/Notification Service Extension.entitlements";
+ CODE_SIGN_IDENTITY = "Apple Development";
+ CODE_SIGN_STYLE = Automatic;
+ CURRENT_PROJECT_VERSION = 1;
+ DEVELOPMENT_TEAM = 4NXF6Z997G;
+ ENABLE_USER_SCRIPT_SANDBOXING = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu17;
+ GENERATE_INFOPLIST_FILE = YES;
+ INFOPLIST_FILE = "Notification Service Extension/Info.plist";
+ INFOPLIST_KEY_CFBundleDisplayName = "Notification Service Extension";
+ INFOPLIST_KEY_NSHumanReadableCopyright = "";
+ IPHONEOS_DEPLOYMENT_TARGET = 18.5;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@executable_path/../../Frameworks",
+ );
+ LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
+ MARKETING_VERSION = 1.0;
+ MTL_FAST_MATH = YES;
+ PRODUCT_BUNDLE_IDENTIFIER = "im.fluffychat.app.Notification-Service-Extension";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SKIP_INSTALL = YES;
+ SWIFT_EMIT_LOC_STRINGS = YES;
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = Profile;
+ };
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
@@ -865,6 +1080,16 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
+ C146955E2E642D400075F2F7 /* Build configuration list for PBXNativeTarget "Notification Service Extension" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ C146955A2E642D400075F2F7 /* Debug */,
+ C146955B2E642D400075F2F7 /* Release */,
+ C146955C2E642D400075F2F7 /* Profile */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
/* End XCConfigurationList section */
};
rootObject = 97C146E61CF9000F007C117D /* Project object */;
diff --git a/scripts/add-firebase-messaging.sh b/scripts/add-firebase-messaging.sh
index af7ce0259..bed5d0751 100755
--- a/scripts/add-firebase-messaging.sh
+++ b/scripts/add-firebase-messaging.sh
@@ -1,6 +1,6 @@
#!/usr/bin/env bash
-flutter pub add fcm_shared_isolate
+flutter pub add fcm_shared_isolate:0.1.0
flutter pub get
if [[ "$OSTYPE" == "darwin"* ]]; then