diff --git a/.cursor/rules/pr-conventions.mdc b/.cursor/rules/pr-conventions.mdc
deleted file mode 100644
index cd953b17..00000000
--- a/.cursor/rules/pr-conventions.mdc
+++ /dev/null
@@ -1,32 +0,0 @@
----
-description: Conventions for pull request titles and body content
-alwaysApply: true
----
-
-# Pull Request Conventions
-
-## PR Title
-
-Use semantic/conventional commit prefixes in PR titles:
-
-- `fix:` for bug fixes
-- `feat:` for new features
-- `chore:` for maintenance tasks (deps, CI, tooling)
-- `refactor:` for code restructuring without behavior changes
-- `docs:` for documentation-only changes
-- `test:` for test-only changes
-
-Example: `fix: resolve notification grouping on Android 14`
-
-## PR Body
-
-Follow the repo's PR template at `.github/pull_request_template.md`. Every PR body must include:
-
-1. **One Line Summary** (required)
-2. **Motivation** (required) explaining why the change is being made
-3. **Scope** (recommended) describing what is and isn't affected
-4. **Testing** section with manual and/or unit testing details
-5. **Affected code checklist** with relevant items checked
-6. **Checklist** sections confirmed
-
-Remove the instructional header block (between `` and ``) before submitting.
diff --git a/.github/workflows/asana-add-comment.yml b/.github/workflows/asana-add-comment.yml
deleted file mode 100644
index 1235c8f1..00000000
--- a/.github/workflows/asana-add-comment.yml
+++ /dev/null
@@ -1,47 +0,0 @@
-name: Github --> Asana Add Comment Workflow
-
-on:
- issue_comment:
- types: [created]
- workflow_dispatch:
-
-jobs:
- build:
- runs-on: ubuntu-latest
- permissions:
- issues: read
- steps:
- - name: Get Asana Task Corresponding to Issue
- env:
- ISSUE_ID: ${{ github.event.issue.id }}
- REPO_FULL_NAME: ${{ github.event.repository.full_name }}
- WORKSPACE_ID: "780103692902078"
- run: |
- REPO_SCOPED_ISSUE_ID="$REPO_FULL_NAME#$ISSUE_ID"
-
- curl --request GET \
- --url "https://app.asana.com/api/1.0/workspaces/$WORKSPACE_ID/tasks/search?opt_fields=notes&text=$REPO_SCOPED_ISSUE_ID&sort_by=modified_at&sort_ascending=false" \
- --header 'accept: application/json' \
- --header 'authorization: Bearer ${{ secrets.ASANA_PAT }}' \
- --output response.json
- TASK_GID=$(jq -r '.data[0].gid' response.json)
- echo "TASK_GID=$TASK_GID" >> $GITHUB_ENV
- - name: Comment on Asana Task
- env:
- ISSUE_COMMENT: ${{ github.event.comment.body }}
- COMMENTER_NAME: ${{ github.event.comment.user.login }}
- run: |
- BODY_DATA=$(jq -n \
- --arg text "$ISSUE_COMMENT" \
- --arg commenter_name "$COMMENTER_NAME" \
- '{
- "data": {
- "text": "\($commenter_name) left a comment:\n\n\($text)",
- }
- }')
- curl --request POST \
- --url https://app.asana.com/api/1.0/tasks/$TASK_GID/stories \
- --header 'accept: application/json' \
- --header 'authorization: Bearer ${{ secrets.ASANA_PAT }}' \
- --header 'content-type: application/json' \
- --data "$BODY_DATA"
\ No newline at end of file
diff --git a/.github/workflows/asana-create-task.yml b/.github/workflows/asana-create-task.yml
deleted file mode 100644
index e6a444ec..00000000
--- a/.github/workflows/asana-create-task.yml
+++ /dev/null
@@ -1,119 +0,0 @@
-name: Github --> Asana Create Task Workflow
-
-on:
- issues:
- types: [opened]
- workflow_dispatch:
-
-jobs:
- build:
- runs-on: ubuntu-latest
- permissions:
- issues: read
- steps:
- - name: Create Asana task
- env:
- ISSUE_TITLE: ${{ github.event.issue.title }}
- ISSUE_BODY: ${{ github.event.issue.body }}
- ISSUE_HTML_URL: ${{ github.event.issue.html_url }}
- ISSUE_ID: ${{ github.event.issue.id }}
- ISSUE_NUMBER: ${{ github.event.issue.number }}
- REPO_FULL_NAME: ${{ github.event.repository.full_name }}
- SDK_PLATFORM_GROUP: "1208961704779581"
- SDK_PLATFORM_GROUP_CROSS_PLATFORM: "1208961704779584"
- SDK_PLATFORM: "1208961704779592"
- SDK_PLATFORM_FLUTTER: "1208961704779607"
- DSA_PRIORITY: "1208779519954980"
- DSA_PRIORITY_NO_PRIORITY: "1208779521616959"
- DSA_STATUS: "1210103546117753"
- DSA_STATUS_TRIAGE: "1210103546117756"
- DSA_REPO_TICKET_URL: "1210347857768758"
- WORKSPACE_ID: "780103692902078"
- PROJECT_ID_GITHUB_AND_IMPORTANT_SDK_ISSUES: "1208970714650308"
- PROJECT_ID_SDK_BACKLOG: "1208777198342772"
- run: |
- DATA_BODY=$(jq -n \
- --arg title "$ISSUE_TITLE" \
- --arg body "$ISSUE_BODY" \
- --arg url "$ISSUE_HTML_URL" \
- --arg id "$ISSUE_ID" \
- --arg number "$ISSUE_NUMBER" \
- --arg repo_full_name "$REPO_FULL_NAME" \
- --arg sdk_platform_group "$SDK_PLATFORM_GROUP" \
- --arg sdk_platform_group_cross_platform "$SDK_PLATFORM_GROUP_CROSS_PLATFORM" \
- --arg sdk_platform "$SDK_PLATFORM" \
- --arg sdk_platform_flutter "$SDK_PLATFORM_FLUTTER" \
- --arg dsa_priority "$DSA_PRIORITY" \
- --arg dsa_priority_no_priority "$DSA_PRIORITY_NO_PRIORITY" \
- --arg dsa_status "$DSA_STATUS" \
- --arg dsa_status_triage "$DSA_STATUS_TRIAGE" \
- --arg dsa_repo_ticket_url "$DSA_REPO_TICKET_URL" \
- --arg workspace_id "$WORKSPACE_ID" \
- --arg project_id_github_and_important_sdk_issues "$PROJECT_ID_GITHUB_AND_IMPORTANT_SDK_ISSUES" \
- --arg project_id_sdk_backlog "$PROJECT_ID_SDK_BACKLOG" \
- '{
- "data": {
- "custom_fields": {
- $sdk_platform_group: $sdk_platform_group_cross_platform,
- $sdk_platform: $sdk_platform_flutter,
- $dsa_priority: $dsa_priority_no_priority,
- $dsa_status: $dsa_status_triage,
- $dsa_repo_ticket_url: $url
- },
- "name": $title,
- "workspace": $workspace_id,
- "projects": [$project_id_github_and_important_sdk_issues, $project_id_sdk_backlog],
- "notes": "Issue ID: \($repo_full_name)#\($id)\nIssue number: \($number)\nCreated via GitHub Actions\n----\n\n\($body)"
- }
- }')
-
- curl --request POST \
- --url https://app.asana.com/api/1.0/tasks?opt_pretty=true \
- --header 'accept: application/json' \
- --header 'authorization: Bearer ${{ secrets.ASANA_PAT }}' \
- --header 'content-type: application/json' \
- --data "$DATA_BODY" \
- --output response.json
-
- TASK_GID=$(jq -r '.data.gid' response.json)
- echo "TASK_GID=$TASK_GID" >> $GITHUB_ENV
- - name: Move to "0 Unclassified" section in "Github & Important SDK Issues" project
- env:
- SECTION_ID_GITHUB_AND_IMPORTANT_SDK_ISSUES: "1208970755434051"
- run: |
- DATA_BODY=$(jq -n \
- --arg task_gid "$TASK_GID" \
- --arg section_id "$SECTION_ID_GITHUB_AND_IMPORTANT_SDK_ISSUES" \
- '{
- "data": {
- "task": $task_gid,
- "insert_after": "null"
- }
- }')
-
- curl --request POST \
- --url https://app.asana.com/api/1.0/sections/$section_id/addTask \
- --header 'accept: application/json' \
- --header 'authorization: Bearer ${{ secrets.ASANA_PAT }}' \
- --header 'content-type: application/json' \
- --data "$DATA_BODY"
- - name: Move to "Untriaged" section in "SDK / Backlog" project
- env:
- SECTION_ID_SDK_BACKLOG: "1208899729378982"
- run: |
- DATA_BODY=$(jq -n \
- --arg task_gid "$TASK_GID" \
- --arg section_id "$SECTION_ID_SDK_BACKLOG" \
- '{
- "data": {
- "task": $task_gid,
- "insert_after": "null"
- }
- }')
-
- curl --request POST \
- --url https://app.asana.com/api/1.0/sections/$section_id/addTask \
- --header 'accept: application/json' \
- --header 'authorization: Bearer ${{ secrets.ASANA_PAT }}' \
- --header 'content-type: application/json' \
- --data "$DATA_BODY"
\ No newline at end of file
diff --git a/.github/workflows/asana-update-issue.yml b/.github/workflows/asana-update-issue.yml
deleted file mode 100644
index d9dcebe9..00000000
--- a/.github/workflows/asana-update-issue.yml
+++ /dev/null
@@ -1,172 +0,0 @@
-name: Github --> Asana Issue Updates Workflow
-
-on:
- issues:
- types: [edited, deleted, closed, reopened, assigned, unassigned, labeled, unlabeled, milestoned, demilestoned, pinned, unpinned, locked, unlocked, transferred]
- workflow_dispatch:
-
-jobs:
- build:
- runs-on: ubuntu-latest
- permissions:
- issues: read
- steps:
- - name: Get Asana Task Corresponding to Issue
- env:
- ISSUE_ID: ${{ github.event.issue.id }}
- REPO_FULL_NAME: ${{ github.event.repository.full_name }}
- WORKSPACE_ID: "780103692902078"
- run: |
- REPO_SCOPED_ISSUE_ID="$REPO_FULL_NAME#$ISSUE_ID"
-
- curl --request GET \
- --url "https://app.asana.com/api/1.0/workspaces/$WORKSPACE_ID/tasks/search?opt_fields=notes&text=$REPO_SCOPED_ISSUE_ID&sort_by=modified_at&sort_ascending=false" \
- --header 'accept: application/json' \
- --header 'authorization: Bearer ${{ secrets.ASANA_PAT }}' \
- --output response.json
- TASK_GID=$(jq -r '.data[0].gid' response.json)
- echo "TASK_GID=$TASK_GID" >> $GITHUB_ENV
- - name: Determine Action and Post to Asana
- env:
- ACTION_TYPE: ${{ github.event.action }}
- ACTOR_NAME: ${{ github.event.sender.login }}
- ISSUE_TITLE: ${{ github.event.issue.title }}
- ISSUE_NUMBER: ${{ github.event.issue.number }}
- ISSUE_STATE: ${{ github.event.issue.state }}
- run: |
- # Map GitHub action types to human-readable descriptions
- case "$ACTION_TYPE" in
- "edited")
- ACTION_DESC="edited the issue"
- ;;
- "deleted")
- ACTION_DESC="deleted the issue"
- ;;
- "closed")
- ACTION_DESC="closed the issue"
- ;;
- "reopened")
- ACTION_DESC="reopened the issue"
- ;;
- "assigned")
- ACTION_DESC="assigned the issue"
- ;;
- "unassigned")
- ACTION_DESC="unassigned the issue"
- ;;
- "labeled")
- ACTION_DESC="added labels to the issue"
- ;;
- "unlabeled")
- ACTION_DESC="removed labels from the issue"
- ;;
- "milestoned")
- ACTION_DESC="added the issue to a milestone"
- ;;
- "demilestoned")
- ACTION_DESC="removed the issue from a milestone"
- ;;
- "pinned")
- ACTION_DESC="pinned the issue"
- ;;
- "unpinned")
- ACTION_DESC="unpinned the issue"
- ;;
- "locked")
- ACTION_DESC="locked the issue"
- ;;
- "unlocked")
- ACTION_DESC="unlocked the issue"
- ;;
- "transferred")
- ACTION_DESC="transferred the issue"
- ;;
- *)
- ACTION_DESC="performed an action on the issue"
- ;;
- esac
-
- # Add additional context for specific actions based on webhook payload
- if [ "$ACTION_TYPE" = "assigned" ] && [ -n "${{ github.event.assignee.login }}" ]; then
- ACTION_DESC="assigned the issue to ${{ github.event.assignee.login }}"
- fi
-
- if [ "$ACTION_TYPE" = "unassigned" ] && [ -n "${{ github.event.assignee.login }}" ]; then
- ACTION_DESC="unassigned the issue from ${{ github.event.assignee.login }}"
- fi
-
- if [ "$ACTION_TYPE" = "labeled" ] && [ -n "${{ github.event.label.name }}" ]; then
- LABEL_COLOR="${{ github.event.label.color }}"
- ACTION_DESC="added label '${{ github.event.label.name }}' to the issue"
- if [ -n "$LABEL_COLOR" ]; then
- ACTION_DESC="$ACTION_DESC (color: #$LABEL_COLOR)"
- fi
- fi
-
- if [ "$ACTION_TYPE" = "unlabeled" ] && [ -n "${{ github.event.label.name }}" ]; then
- LABEL_COLOR="${{ github.event.label.color }}"
- ACTION_DESC="removed label '${{ github.event.label.name }}' from the issue"
- if [ -n "$LABEL_COLOR" ]; then
- ACTION_DESC="$ACTION_DESC (color: #$LABEL_COLOR)"
- fi
- fi
-
- if [ "$ACTION_TYPE" = "milestoned" ] && [ -n "${{ github.event.milestone.title }}" ]; then
- MILESTONE_DUE_DATE="${{ github.event.milestone.due_on }}"
- ACTION_DESC="added the issue to milestone '${{ github.event.milestone.title }}'"
- if [ -n "$MILESTONE_DUE_DATE" ] && [ "$MILESTONE_DUE_DATE" != "null" ]; then
- ACTION_DESC="$ACTION_DESC (due: $MILESTONE_DUE_DATE)"
- fi
- fi
-
- if [ "$ACTION_TYPE" = "demilestoned" ] && [ -n "${{ github.event.milestone.title }}" ]; then
- ACTION_DESC="removed the issue from milestone '${{ github.event.milestone.title }}'"
- fi
-
- if [ "$ACTION_TYPE" = "transferred" ] && [ -n "${{ github.event.changes.new_repository.full_name }}" ]; then
- ACTION_DESC="transferred the issue to repository ${{ github.event.changes.new_repository.full_name }}"
- fi
-
- if [ "$ACTION_TYPE" = "edited" ] && [ -n "${{ github.event.changes.title.from }}" ]; then
- OLD_TITLE="${{ github.event.changes.title.from }}"
- NEW_TITLE="${{ github.event.issue.title }}"
- ACTION_DESC="edited the issue title from '$OLD_TITLE' to '$NEW_TITLE'"
- fi
-
- echo "ACTION_DESC=$ACTION_DESC" >> $GITHUB_ENV
-
- # Only proceed if we found a task
- if [ "$TASK_GID" != "null" ] && [ -n "$TASK_GID" ]; then
- # Create a more detailed message with additional context
- MESSAGE_TEXT="$ACTOR_NAME performed an action: $ACTION_DESC"
-
- # Add issue state information for state changes
- if [ "$ACTION_TYPE" = "closed" ] || [ "$ACTION_TYPE" = "reopened" ]; then
- MESSAGE_TEXT=$(printf "%s\nIssue state: %s" "$MESSAGE_TEXT" "$ISSUE_STATE")
- fi
-
- # Add repository information for transferred issues
- if [ "$ACTION_TYPE" = "transferred" ]; then
- REPO_NAME="${{ github.event.repository.full_name }}"
- MESSAGE_TEXT=$(printf "%s\nFrom repository: %s" "$MESSAGE_TEXT" "$REPO_NAME")
- fi
-
- MESSAGE_TEXT=$(printf "%s\n\nIssue: #%s - %s" "$MESSAGE_TEXT" "$ISSUE_NUMBER" "$ISSUE_TITLE")
-
- BODY_DATA=$(jq -n \
- --arg text "$MESSAGE_TEXT" \
- '{
- "data": {
- "text": $text
- }
- }')
-
- curl --request POST \
- --url https://app.asana.com/api/1.0/tasks/$TASK_GID/stories \
- --header 'accept: application/json' \
- --header 'authorization: Bearer ${{ secrets.ASANA_PAT }}' \
- --header 'content-type: application/json' \
- --data "$BODY_DATA"
- else
- echo "No corresponding Asana task found for issue ID: $ISSUE_ID"
- fi
\ No newline at end of file
diff --git a/.github/workflows/create-release-pr.yml b/.github/workflows/create-release-pr.yml
index b91965e0..dcd36495 100644
--- a/.github/workflows/create-release-pr.yml
+++ b/.github/workflows/create-release-pr.yml
@@ -136,6 +136,10 @@ jobs:
sed -i '' "s|s.dependency 'OneSignalXCFramework', '[^']*'|s.dependency 'OneSignalXCFramework', '${VERSION}'|" ios/onesignal_flutter.podspec
echo "✓ Updated ios/onesignal_flutter.podspec with iOS SDK ${VERSION}"
+ # Update Package.swift with new version
+ sed -i '' "s|\.package(url: \"https://github.com/OneSignal/OneSignal-XCFramework\", exact: \"[^\"]*\")|.package(url: \"https://github.com/OneSignal/OneSignal-XCFramework\", exact: \"${VERSION}\")|" ios/onesignal_flutter/Package.swift
+ echo "✓ Updated ios/onesignal_flutter/Package.swift with iOS SDK ${VERSION}"
+
# Only commit if there are changes
git add -A
git diff --staged --quiet && exit 0
@@ -158,7 +162,7 @@ jobs:
sed -i '' "s/OneSignalWrapper\.setSdkVersion(\"[^\"]*\")/OneSignalWrapper.setSdkVersion(\"$WRAPPER_VERSION\")/g" android/src/main/java/com/onesignal/flutter/OneSignalPlugin.java
# Update OneSignalPlugin.m wrapper version
- sed -i '' "s/OneSignalWrapper\.sdkVersion = @\"[^\"]*\"/OneSignalWrapper.sdkVersion = @\"$WRAPPER_VERSION\"/g" ios/Classes/OneSignalPlugin.m
+ sed -i '' "s/OneSignalWrapper\.sdkVersion = @\"[^\"]*\"/OneSignalWrapper.sdkVersion = @\"$WRAPPER_VERSION\"/g" ios/onesignal_flutter/Sources/onesignal_flutter/OneSignalPlugin.m
# Only commit if there are changes
git add -A
diff --git a/examples/demo/ios/Podfile.lock b/examples/demo/ios/Podfile.lock
index d8512b81..236ac9ea 100644
--- a/examples/demo/ios/Podfile.lock
+++ b/examples/demo/ios/Podfile.lock
@@ -78,7 +78,7 @@ EXTERNAL SOURCES:
SPEC CHECKSUMS:
Flutter: cabc95a1d2626b1b06e7179b784ebcf0c0cde467
- onesignal_flutter: 557110960f936d1d2d792864149e79a58945c686
+ onesignal_flutter: fa28e94a7baa3cd8b503fc4d760103405882f47f
OneSignalXCFramework: 943852e7d70d719f73e9669d48620aeec1b93022
shared_preferences_foundation: 7036424c3d8ec98dfe75ff1667cb0cd531ec82bb
url_launcher_ios: 7a95fa5b60cc718a708b8f2966718e93db0cef1b
diff --git a/examples/demo/ios/Runner/Info.plist b/examples/demo/ios/Runner/Info.plist
index b3283c76..c510f8a0 100644
--- a/examples/demo/ios/Runner/Info.plist
+++ b/examples/demo/ios/Runner/Info.plist
@@ -43,6 +43,10 @@
NSSupportsLiveActivities
+ NSLocationWhenInUseUsageDescription
+ This app uses your location to personalize notifications and content.
+ NSLocationAlwaysAndWhenInUseUsageDescription
+ This app uses your location to personalize notifications and content, even in the background.
CADisableMinimumFrameDurationOnPhone
UIApplicationSupportsIndirectInputEvents
diff --git a/examples/demo/lib/main.dart b/examples/demo/lib/main.dart
index f6dfc800..1e5544ec 100644
--- a/examples/demo/lib/main.dart
+++ b/examples/demo/lib/main.dart
@@ -78,7 +78,12 @@ Future main() async {
});
// Set up API service
- final apiKey = dotenv.env['ONESIGNAL_API_KEY'] ?? '';
+ String apiKey = '';
+ try {
+ apiKey = dotenv.env['ONESIGNAL_API_KEY'] ?? '';
+ } catch (_) {
+ LogManager().w('App', 'API key not found, continuing without it');
+ }
final apiService = OneSignalApiService()
..setAppId(appId)
..setApiKey(apiKey);
diff --git a/examples/demo/lib/widgets/app_text_field.dart b/examples/demo/lib/widgets/app_text_field.dart
new file mode 100644
index 00000000..eae5a866
--- /dev/null
+++ b/examples/demo/lib/widgets/app_text_field.dart
@@ -0,0 +1,15 @@
+import 'package:flutter/material.dart';
+
+class AppTextField extends TextField {
+ const AppTextField({
+ super.key,
+ super.controller,
+ super.decoration,
+ super.keyboardType,
+ super.onChanged,
+ super.textAlign,
+ super.style,
+ super.maxLines,
+ super.autocorrect = false,
+ });
+}
diff --git a/examples/demo/lib/widgets/dialogs.dart b/examples/demo/lib/widgets/dialogs.dart
index 935695c1..9f6e3655 100644
--- a/examples/demo/lib/widgets/dialogs.dart
+++ b/examples/demo/lib/widgets/dialogs.dart
@@ -4,6 +4,7 @@ import 'package:flutter/material.dart';
import '../services/tooltip_helper.dart';
import '../theme.dart';
+import 'app_text_field.dart';
// Single input dialog (login, email, sms)
class SingleInputDialog extends StatefulWidget {
@@ -42,7 +43,7 @@ class _SingleInputDialogState extends State {
width: double.maxFinite,
child: Semantics(
label: '${widget.fieldLabel}_input',
- child: TextField(
+ child: AppTextField(
controller: _controller,
decoration: InputDecoration(labelText: widget.fieldLabel),
keyboardType: widget.keyboardType,
@@ -109,7 +110,7 @@ class _PairInputDialogState extends State {
Expanded(
child: Semantics(
label: '${widget.keyLabel}_input',
- child: TextField(
+ child: AppTextField(
controller: _keyController,
decoration: InputDecoration(labelText: widget.keyLabel),
onChanged: (_) => setState(() {}),
@@ -120,7 +121,7 @@ class _PairInputDialogState extends State {
Expanded(
child: Semantics(
label: '${widget.valueLabel}_input',
- child: TextField(
+ child: AppTextField(
controller: _valueController,
decoration: InputDecoration(labelText: widget.valueLabel),
onChanged: (_) => setState(() {}),
@@ -231,7 +232,7 @@ class _MultiPairInputDialogState extends State {
Row(
children: [
Expanded(
- child: TextField(
+ child: AppTextField(
controller: _keyControllers[i],
decoration: InputDecoration(
labelText: widget.keyLabel,
@@ -241,7 +242,7 @@ class _MultiPairInputDialogState extends State {
),
const SizedBox(width: 8),
Expanded(
- child: TextField(
+ child: AppTextField(
controller: _valueControllers[i],
decoration: InputDecoration(
labelText: widget.valueLabel,
@@ -380,7 +381,7 @@ class _LoginDialogState extends State {
width: double.maxFinite,
child: Semantics(
label: 'external_user_id_input',
- child: TextField(
+ child: AppTextField(
controller: _controller,
decoration: const InputDecoration(labelText: 'External User Id'),
onChanged: (_) => setState(() {}),
@@ -468,14 +469,14 @@ class _OutcomeDialogState extends State {
),
),
const SizedBox(height: 8),
- TextField(
+ AppTextField(
controller: _nameController,
decoration: const InputDecoration(labelText: 'Outcome Name'),
onChanged: (_) => setState(() {}),
),
if (_type == OutcomeType.withValue) ...[
const SizedBox(height: 12),
- TextField(
+ AppTextField(
controller: _valueController,
decoration: const InputDecoration(labelText: 'Value'),
keyboardType:
@@ -563,13 +564,13 @@ class _TrackEventDialogState extends State {
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
- TextField(
+ AppTextField(
controller: _nameController,
decoration: const InputDecoration(labelText: 'Event Name'),
onChanged: (_) => setState(() {}),
),
const SizedBox(height: 12),
- TextField(
+ AppTextField(
controller: _propsController,
decoration: InputDecoration(
labelText: 'Properties (optional, JSON)',
@@ -642,13 +643,13 @@ class _CustomNotificationDialogState extends State {
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
- TextField(
+ AppTextField(
controller: _titleController,
decoration: const InputDecoration(labelText: 'Title'),
onChanged: (_) => setState(() {}),
),
const SizedBox(height: 12),
- TextField(
+ AppTextField(
controller: _bodyController,
decoration: const InputDecoration(labelText: 'Body'),
onChanged: (_) => setState(() {}),
diff --git a/examples/demo/lib/widgets/sections/live_activities_section.dart b/examples/demo/lib/widgets/sections/live_activities_section.dart
index 22474eb9..dbe82125 100644
--- a/examples/demo/lib/widgets/sections/live_activities_section.dart
+++ b/examples/demo/lib/widgets/sections/live_activities_section.dart
@@ -3,6 +3,7 @@ import 'package:provider/provider.dart';
import '../../theme.dart';
import '../../viewmodels/app_viewmodel.dart';
+import '../app_text_field.dart';
import '../action_button.dart';
import '../section_card.dart';
@@ -138,7 +139,7 @@ class _InputRow extends StatelessWidget {
),
),
Expanded(
- child: TextField(
+ child: AppTextField(
controller: controller,
textAlign: TextAlign.right,
style: const TextStyle(fontSize: 14, color: Color(0xFF212121)),
@@ -149,7 +150,6 @@ class _InputRow extends StatelessWidget {
contentPadding: EdgeInsets.symmetric(vertical: 4),
isDense: true,
),
- autocorrect: false,
onChanged: onChanged,
),
),
diff --git a/examples/demo/pubspec.yaml b/examples/demo/pubspec.yaml
index 52577bec..1b71ee24 100644
--- a/examples/demo/pubspec.yaml
+++ b/examples/demo/pubspec.yaml
@@ -33,6 +33,8 @@ flutter_launcher_icons:
adaptive_icon_foreground: "assets/onesignal_logo_icon_padded.png"
flutter:
+ config:
+ enable-swift-package-manager: false
uses-material-design: true
assets:
- assets/onesignal_logo.svg
diff --git a/examples/demo_spm/.gitignore b/examples/demo_spm/.gitignore
new file mode 100644
index 00000000..b841075b
--- /dev/null
+++ b/examples/demo_spm/.gitignore
@@ -0,0 +1,48 @@
+# Miscellaneous
+*.class
+*.log
+*.pyc
+*.swp
+.DS_Store
+.atom/
+.build/
+.buildlog/
+.history
+.svn/
+.swiftpm/
+migrate_working_dir/
+
+# IntelliJ related
+*.iml
+*.ipr
+*.iws
+.idea/
+
+# The .vscode folder contains launch configuration and tasks you configure in
+# VS Code which you may wish to be included in version control, so this line
+# is commented out by default.
+#.vscode/
+
+# Flutter/Dart/Pub related
+**/doc/api/
+**/ios/Flutter/.last_build_id
+.dart_tool/
+.flutter-plugins-dependencies
+.pub-cache/
+.pub/
+/build/
+/coverage/
+
+# Symbolication related
+app.*.symbols
+
+# Obfuscation related
+app.*.map.json
+
+# Android Studio will place build artifacts here
+/android/app/debug
+/android/app/profile
+/android/app/release
+
+# Environment
+.env
diff --git a/examples/demo_spm/.metadata b/examples/demo_spm/.metadata
new file mode 100644
index 00000000..83b34ebb
--- /dev/null
+++ b/examples/demo_spm/.metadata
@@ -0,0 +1,45 @@
+# This file tracks properties of this Flutter project.
+# Used by Flutter tool to assess capabilities and perform upgrades etc.
+#
+# This file should be version controlled and should not be manually edited.
+
+version:
+ revision: "f6ff1529fd6d8af5f706051d9251ac9231c83407"
+ channel: "stable"
+
+project_type: app
+
+# Tracks metadata for the flutter migrate command
+migration:
+ platforms:
+ - platform: root
+ create_revision: f6ff1529fd6d8af5f706051d9251ac9231c83407
+ base_revision: f6ff1529fd6d8af5f706051d9251ac9231c83407
+ - platform: android
+ create_revision: f6ff1529fd6d8af5f706051d9251ac9231c83407
+ base_revision: f6ff1529fd6d8af5f706051d9251ac9231c83407
+ - platform: ios
+ create_revision: f6ff1529fd6d8af5f706051d9251ac9231c83407
+ base_revision: f6ff1529fd6d8af5f706051d9251ac9231c83407
+ - platform: linux
+ create_revision: f6ff1529fd6d8af5f706051d9251ac9231c83407
+ base_revision: f6ff1529fd6d8af5f706051d9251ac9231c83407
+ - platform: macos
+ create_revision: f6ff1529fd6d8af5f706051d9251ac9231c83407
+ base_revision: f6ff1529fd6d8af5f706051d9251ac9231c83407
+ - platform: web
+ create_revision: f6ff1529fd6d8af5f706051d9251ac9231c83407
+ base_revision: f6ff1529fd6d8af5f706051d9251ac9231c83407
+ - platform: windows
+ create_revision: f6ff1529fd6d8af5f706051d9251ac9231c83407
+ base_revision: f6ff1529fd6d8af5f706051d9251ac9231c83407
+
+ # User provided section
+
+ # List of Local paths (relative to this file) that should be
+ # ignored by the migrate tool.
+ #
+ # Files that are not part of the templates will be ignored by default.
+ unmanaged_files:
+ - 'lib/main.dart'
+ - 'ios/Runner.xcodeproj/project.pbxproj'
diff --git a/examples/demo_spm/README.md b/examples/demo_spm/README.md
new file mode 100644
index 00000000..dbd403a0
--- /dev/null
+++ b/examples/demo_spm/README.md
@@ -0,0 +1,16 @@
+# demo
+
+A new Flutter project.
+
+## Getting Started
+
+This project is a starting point for a Flutter application.
+
+A few resources to get you started if this is your first Flutter project:
+
+- [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab)
+- [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook)
+
+For help getting started with Flutter development, view the
+[online documentation](https://docs.flutter.dev/), which offers tutorials,
+samples, guidance on mobile development, and a full API reference.
diff --git a/examples/demo_spm/analysis_options.yaml b/examples/demo_spm/analysis_options.yaml
new file mode 100644
index 00000000..0d290213
--- /dev/null
+++ b/examples/demo_spm/analysis_options.yaml
@@ -0,0 +1,28 @@
+# This file configures the analyzer, which statically analyzes Dart code to
+# check for errors, warnings, and lints.
+#
+# The issues identified by the analyzer are surfaced in the UI of Dart-enabled
+# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be
+# invoked from the command line by running `flutter analyze`.
+
+# The following line activates a set of recommended lints for Flutter apps,
+# packages, and plugins designed to encourage good coding practices.
+include: package:flutter_lints/flutter.yaml
+
+linter:
+ # The lint rules applied to this project can be customized in the
+ # section below to disable rules from the `package:flutter_lints/flutter.yaml`
+ # included above or to enable additional rules. A list of all available lints
+ # and their documentation is published at https://dart.dev/lints.
+ #
+ # Instead of disabling a lint rule for the entire project in the
+ # section below, it can also be suppressed for a single line of code
+ # or a specific dart file by using the `// ignore: name_of_lint` and
+ # `// ignore_for_file: name_of_lint` syntax on the line or in the file
+ # producing the lint.
+ rules:
+ # avoid_print: false # Uncomment to disable the `avoid_print` rule
+ # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule
+
+# Additional information about this file can be found at
+# https://dart.dev/guides/language/analysis-options
diff --git a/examples/demo_spm/android/.gitignore b/examples/demo_spm/android/.gitignore
new file mode 100644
index 00000000..be3943c9
--- /dev/null
+++ b/examples/demo_spm/android/.gitignore
@@ -0,0 +1,14 @@
+gradle-wrapper.jar
+/.gradle
+/captures/
+/gradlew
+/gradlew.bat
+/local.properties
+GeneratedPluginRegistrant.java
+.cxx/
+
+# Remember to never publicly share your keystore.
+# See https://flutter.dev/to/reference-keystore
+key.properties
+**/*.keystore
+**/*.jks
diff --git a/examples/demo_spm/android/app/build.gradle.kts b/examples/demo_spm/android/app/build.gradle.kts
new file mode 100644
index 00000000..e9c12dae
--- /dev/null
+++ b/examples/demo_spm/android/app/build.gradle.kts
@@ -0,0 +1,44 @@
+plugins {
+ id("com.android.application")
+ id("kotlin-android")
+ // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins.
+ id("dev.flutter.flutter-gradle-plugin")
+}
+
+android {
+ namespace = "com.onesignal.example.demo"
+ compileSdk = flutter.compileSdkVersion
+ ndkVersion = flutter.ndkVersion
+
+ compileOptions {
+ sourceCompatibility = JavaVersion.VERSION_17
+ targetCompatibility = JavaVersion.VERSION_17
+ }
+
+ kotlinOptions {
+ jvmTarget = JavaVersion.VERSION_17.toString()
+ }
+
+ defaultConfig {
+ // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
+ applicationId = "com.onesignal.example.demo"
+ // You can update the following values to match your application needs.
+ // For more information, see: https://flutter.dev/to/review-gradle-config.
+ minSdk = flutter.minSdkVersion
+ targetSdk = flutter.targetSdkVersion
+ versionCode = flutter.versionCode
+ versionName = flutter.versionName
+ }
+
+ buildTypes {
+ release {
+ // TODO: Add your own signing config for the release build.
+ // Signing with the debug keys for now, so `flutter run --release` works.
+ signingConfig = signingConfigs.getByName("debug")
+ }
+ }
+}
+
+flutter {
+ source = "../.."
+}
diff --git a/examples/demo_spm/android/app/src/debug/AndroidManifest.xml b/examples/demo_spm/android/app/src/debug/AndroidManifest.xml
new file mode 100644
index 00000000..399f6981
--- /dev/null
+++ b/examples/demo_spm/android/app/src/debug/AndroidManifest.xml
@@ -0,0 +1,7 @@
+
+
+
+
diff --git a/examples/demo_spm/android/app/src/main/AndroidManifest.xml b/examples/demo_spm/android/app/src/main/AndroidManifest.xml
new file mode 100644
index 00000000..710757c5
--- /dev/null
+++ b/examples/demo_spm/android/app/src/main/AndroidManifest.xml
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/examples/demo_spm/android/app/src/main/kotlin/com/onesignal/example/demo/MainActivity.kt b/examples/demo_spm/android/app/src/main/kotlin/com/onesignal/example/demo/MainActivity.kt
new file mode 100644
index 00000000..9409a2eb
--- /dev/null
+++ b/examples/demo_spm/android/app/src/main/kotlin/com/onesignal/example/demo/MainActivity.kt
@@ -0,0 +1,5 @@
+package com.onesignal.example.demo
+
+import io.flutter.embedding.android.FlutterActivity
+
+class MainActivity : FlutterActivity()
diff --git a/examples/demo_spm/android/app/src/main/res/drawable-hdpi/ic_launcher_foreground.png b/examples/demo_spm/android/app/src/main/res/drawable-hdpi/ic_launcher_foreground.png
new file mode 100644
index 00000000..95de5cbf
Binary files /dev/null and b/examples/demo_spm/android/app/src/main/res/drawable-hdpi/ic_launcher_foreground.png differ
diff --git a/examples/demo_spm/android/app/src/main/res/drawable-mdpi/ic_launcher_foreground.png b/examples/demo_spm/android/app/src/main/res/drawable-mdpi/ic_launcher_foreground.png
new file mode 100644
index 00000000..639bc1f7
Binary files /dev/null and b/examples/demo_spm/android/app/src/main/res/drawable-mdpi/ic_launcher_foreground.png differ
diff --git a/examples/demo_spm/android/app/src/main/res/drawable-v21/launch_background.xml b/examples/demo_spm/android/app/src/main/res/drawable-v21/launch_background.xml
new file mode 100644
index 00000000..f74085f3
--- /dev/null
+++ b/examples/demo_spm/android/app/src/main/res/drawable-v21/launch_background.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
diff --git a/examples/demo_spm/android/app/src/main/res/drawable-xhdpi/ic_launcher_foreground.png b/examples/demo_spm/android/app/src/main/res/drawable-xhdpi/ic_launcher_foreground.png
new file mode 100644
index 00000000..db57e205
Binary files /dev/null and b/examples/demo_spm/android/app/src/main/res/drawable-xhdpi/ic_launcher_foreground.png differ
diff --git a/examples/demo_spm/android/app/src/main/res/drawable-xxhdpi/ic_launcher_foreground.png b/examples/demo_spm/android/app/src/main/res/drawable-xxhdpi/ic_launcher_foreground.png
new file mode 100644
index 00000000..0f9c2897
Binary files /dev/null and b/examples/demo_spm/android/app/src/main/res/drawable-xxhdpi/ic_launcher_foreground.png differ
diff --git a/examples/demo_spm/android/app/src/main/res/drawable-xxxhdpi/ic_launcher_foreground.png b/examples/demo_spm/android/app/src/main/res/drawable-xxxhdpi/ic_launcher_foreground.png
new file mode 100644
index 00000000..f278b388
Binary files /dev/null and b/examples/demo_spm/android/app/src/main/res/drawable-xxxhdpi/ic_launcher_foreground.png differ
diff --git a/examples/demo_spm/android/app/src/main/res/drawable/launch_background.xml b/examples/demo_spm/android/app/src/main/res/drawable/launch_background.xml
new file mode 100644
index 00000000..304732f8
--- /dev/null
+++ b/examples/demo_spm/android/app/src/main/res/drawable/launch_background.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
diff --git a/examples/demo_spm/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/examples/demo_spm/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
new file mode 100644
index 00000000..c79c58a3
--- /dev/null
+++ b/examples/demo_spm/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
diff --git a/examples/demo_spm/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/examples/demo_spm/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 00000000..88a040ba
Binary files /dev/null and b/examples/demo_spm/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/examples/demo_spm/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/examples/demo_spm/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 00000000..d2c144f1
Binary files /dev/null and b/examples/demo_spm/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/examples/demo_spm/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/examples/demo_spm/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 00000000..680b2f0b
Binary files /dev/null and b/examples/demo_spm/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/examples/demo_spm/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/examples/demo_spm/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 00000000..d241773d
Binary files /dev/null and b/examples/demo_spm/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/examples/demo_spm/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/examples/demo_spm/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 00000000..6062e282
Binary files /dev/null and b/examples/demo_spm/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/examples/demo_spm/android/app/src/main/res/values-night/styles.xml b/examples/demo_spm/android/app/src/main/res/values-night/styles.xml
new file mode 100644
index 00000000..06952be7
--- /dev/null
+++ b/examples/demo_spm/android/app/src/main/res/values-night/styles.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
diff --git a/examples/demo_spm/android/app/src/main/res/values/colors.xml b/examples/demo_spm/android/app/src/main/res/values/colors.xml
new file mode 100644
index 00000000..f42ada65
--- /dev/null
+++ b/examples/demo_spm/android/app/src/main/res/values/colors.xml
@@ -0,0 +1,4 @@
+
+
+ #FFFFFF
+
diff --git a/examples/demo_spm/android/app/src/main/res/values/styles.xml b/examples/demo_spm/android/app/src/main/res/values/styles.xml
new file mode 100644
index 00000000..cb1ef880
--- /dev/null
+++ b/examples/demo_spm/android/app/src/main/res/values/styles.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
diff --git a/examples/demo_spm/android/app/src/profile/AndroidManifest.xml b/examples/demo_spm/android/app/src/profile/AndroidManifest.xml
new file mode 100644
index 00000000..399f6981
--- /dev/null
+++ b/examples/demo_spm/android/app/src/profile/AndroidManifest.xml
@@ -0,0 +1,7 @@
+
+
+
+
diff --git a/examples/demo_spm/android/build.gradle.kts b/examples/demo_spm/android/build.gradle.kts
new file mode 100644
index 00000000..dbee657b
--- /dev/null
+++ b/examples/demo_spm/android/build.gradle.kts
@@ -0,0 +1,24 @@
+allprojects {
+ repositories {
+ google()
+ mavenCentral()
+ }
+}
+
+val newBuildDir: Directory =
+ rootProject.layout.buildDirectory
+ .dir("../../build")
+ .get()
+rootProject.layout.buildDirectory.value(newBuildDir)
+
+subprojects {
+ val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name)
+ project.layout.buildDirectory.value(newSubprojectBuildDir)
+}
+subprojects {
+ project.evaluationDependsOn(":app")
+}
+
+tasks.register("clean") {
+ delete(rootProject.layout.buildDirectory)
+}
diff --git a/examples/demo_spm/android/gradle.properties b/examples/demo_spm/android/gradle.properties
new file mode 100644
index 00000000..fbee1d8c
--- /dev/null
+++ b/examples/demo_spm/android/gradle.properties
@@ -0,0 +1,2 @@
+org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError
+android.useAndroidX=true
diff --git a/examples/demo_spm/android/gradle/wrapper/gradle-wrapper.properties b/examples/demo_spm/android/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 00000000..e4ef43fb
--- /dev/null
+++ b/examples/demo_spm/android/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,5 @@
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-all.zip
diff --git a/examples/demo_spm/android/settings.gradle.kts b/examples/demo_spm/android/settings.gradle.kts
new file mode 100644
index 00000000..ca7fe065
--- /dev/null
+++ b/examples/demo_spm/android/settings.gradle.kts
@@ -0,0 +1,26 @@
+pluginManagement {
+ val flutterSdkPath =
+ run {
+ val properties = java.util.Properties()
+ file("local.properties").inputStream().use { properties.load(it) }
+ val flutterSdkPath = properties.getProperty("flutter.sdk")
+ require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" }
+ flutterSdkPath
+ }
+
+ includeBuild("$flutterSdkPath/packages/flutter_tools/gradle")
+
+ repositories {
+ google()
+ mavenCentral()
+ gradlePluginPortal()
+ }
+}
+
+plugins {
+ id("dev.flutter.flutter-plugin-loader") version "1.0.0"
+ id("com.android.application") version "8.11.1" apply false
+ id("org.jetbrains.kotlin.android") version "2.2.20" apply false
+}
+
+include(":app")
diff --git a/examples/demo_spm/assets b/examples/demo_spm/assets
new file mode 120000
index 00000000..da5ad123
--- /dev/null
+++ b/examples/demo_spm/assets
@@ -0,0 +1 @@
+../demo/assets
\ No newline at end of file
diff --git a/examples/demo_spm/ios/.gitignore b/examples/demo_spm/ios/.gitignore
new file mode 100644
index 00000000..7a7f9873
--- /dev/null
+++ b/examples/demo_spm/ios/.gitignore
@@ -0,0 +1,34 @@
+**/dgph
+*.mode1v3
+*.mode2v3
+*.moved-aside
+*.pbxuser
+*.perspectivev3
+**/*sync/
+.sconsign.dblite
+.tags*
+**/.vagrant/
+**/DerivedData/
+Icon?
+**/Pods/
+**/.symlinks/
+profile
+xcuserdata
+**/.generated/
+Flutter/App.framework
+Flutter/Flutter.framework
+Flutter/Flutter.podspec
+Flutter/Generated.xcconfig
+Flutter/ephemeral/
+Flutter/app.flx
+Flutter/app.zip
+Flutter/flutter_assets/
+Flutter/flutter_export_environment.sh
+ServiceDefinitions.json
+Runner/GeneratedPluginRegistrant.*
+
+# Exceptions to above rules.
+!default.mode1v3
+!default.mode2v3
+!default.pbxuser
+!default.perspectivev3
diff --git a/examples/demo_spm/ios/Flutter/AppFrameworkInfo.plist b/examples/demo_spm/ios/Flutter/AppFrameworkInfo.plist
new file mode 100644
index 00000000..1dc6cf76
--- /dev/null
+++ b/examples/demo_spm/ios/Flutter/AppFrameworkInfo.plist
@@ -0,0 +1,26 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ en
+ CFBundleExecutable
+ App
+ CFBundleIdentifier
+ io.flutter.flutter.app
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ App
+ CFBundlePackageType
+ FMWK
+ CFBundleShortVersionString
+ 1.0
+ CFBundleSignature
+ ????
+ CFBundleVersion
+ 1.0
+ MinimumOSVersion
+ 13.0
+
+
diff --git a/examples/demo_spm/ios/Flutter/Debug.xcconfig b/examples/demo_spm/ios/Flutter/Debug.xcconfig
new file mode 100644
index 00000000..592ceee8
--- /dev/null
+++ b/examples/demo_spm/ios/Flutter/Debug.xcconfig
@@ -0,0 +1 @@
+#include "Generated.xcconfig"
diff --git a/examples/demo_spm/ios/Flutter/Release.xcconfig b/examples/demo_spm/ios/Flutter/Release.xcconfig
new file mode 100644
index 00000000..592ceee8
--- /dev/null
+++ b/examples/demo_spm/ios/Flutter/Release.xcconfig
@@ -0,0 +1 @@
+#include "Generated.xcconfig"
diff --git a/examples/demo_spm/ios/OneSignalNotificationServiceExtension/Info.plist b/examples/demo_spm/ios/OneSignalNotificationServiceExtension/Info.plist
new file mode 100644
index 00000000..57421ebf
--- /dev/null
+++ b/examples/demo_spm/ios/OneSignalNotificationServiceExtension/Info.plist
@@ -0,0 +1,13 @@
+
+
+
+
+ NSExtension
+
+ NSExtensionPointIdentifier
+ com.apple.usernotifications.service
+ NSExtensionPrincipalClass
+ $(PRODUCT_MODULE_NAME).NotificationService
+
+
+
diff --git a/examples/demo_spm/ios/OneSignalNotificationServiceExtension/NotificationService.swift b/examples/demo_spm/ios/OneSignalNotificationServiceExtension/NotificationService.swift
new file mode 100644
index 00000000..ab391a33
--- /dev/null
+++ b/examples/demo_spm/ios/OneSignalNotificationServiceExtension/NotificationService.swift
@@ -0,0 +1,32 @@
+import UserNotifications
+import OneSignalExtension
+
+class NotificationService: UNNotificationServiceExtension {
+ var contentHandler: ((UNNotificationContent) -> Void)?
+ var receivedRequest: UNNotificationRequest!
+ var bestAttemptContent: UNMutableNotificationContent?
+
+ // Note this extension only runs when `mutable_content` is set
+ // Setting an attachment or action buttons automatically sets the property to true
+ override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
+ self.receivedRequest = request
+ self.contentHandler = contentHandler
+ self.bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)
+
+ if let bestAttemptContent = bestAttemptContent {
+ // DEBUGGING: Uncomment the 2 lines below to check this extension is executing
+// print("Running NotificationServiceExtension")
+// bestAttemptContent.body = "[Modified] " + bestAttemptContent.body
+
+ OneSignalExtension.didReceiveNotificationExtensionRequest(self.receivedRequest, with: bestAttemptContent, withContentHandler: self.contentHandler)
+ }
+ }
+
+ override func serviceExtensionTimeWillExpire() {
+ // 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 {
+ OneSignalExtension.serviceExtensionTimeWillExpireRequest(self.receivedRequest, with: self.bestAttemptContent)
+ contentHandler(bestAttemptContent)
+ }
+ }
+}
diff --git a/examples/demo_spm/ios/OneSignalNotificationServiceExtension/OneSignalNotificationServiceExtension.entitlements b/examples/demo_spm/ios/OneSignalNotificationServiceExtension/OneSignalNotificationServiceExtension.entitlements
new file mode 100644
index 00000000..c70461e8
--- /dev/null
+++ b/examples/demo_spm/ios/OneSignalNotificationServiceExtension/OneSignalNotificationServiceExtension.entitlements
@@ -0,0 +1,10 @@
+
+
+
+
+ com.apple.security.application-groups
+
+ group.com.onesignal.example.onesignal
+
+
+
diff --git a/examples/demo_spm/ios/OneSignalWidget/Assets.xcassets/AccentColor.colorset/Contents.json b/examples/demo_spm/ios/OneSignalWidget/Assets.xcassets/AccentColor.colorset/Contents.json
new file mode 100644
index 00000000..eb878970
--- /dev/null
+++ b/examples/demo_spm/ios/OneSignalWidget/Assets.xcassets/AccentColor.colorset/Contents.json
@@ -0,0 +1,11 @@
+{
+ "colors" : [
+ {
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/examples/demo_spm/ios/OneSignalWidget/Assets.xcassets/AppIcon.appiconset/Contents.json b/examples/demo_spm/ios/OneSignalWidget/Assets.xcassets/AppIcon.appiconset/Contents.json
new file mode 100644
index 00000000..23058801
--- /dev/null
+++ b/examples/demo_spm/ios/OneSignalWidget/Assets.xcassets/AppIcon.appiconset/Contents.json
@@ -0,0 +1,35 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "platform" : "ios",
+ "size" : "1024x1024"
+ },
+ {
+ "appearances" : [
+ {
+ "appearance" : "luminosity",
+ "value" : "dark"
+ }
+ ],
+ "idiom" : "universal",
+ "platform" : "ios",
+ "size" : "1024x1024"
+ },
+ {
+ "appearances" : [
+ {
+ "appearance" : "luminosity",
+ "value" : "tinted"
+ }
+ ],
+ "idiom" : "universal",
+ "platform" : "ios",
+ "size" : "1024x1024"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/examples/demo_spm/ios/OneSignalWidget/Assets.xcassets/Contents.json b/examples/demo_spm/ios/OneSignalWidget/Assets.xcassets/Contents.json
new file mode 100644
index 00000000..73c00596
--- /dev/null
+++ b/examples/demo_spm/ios/OneSignalWidget/Assets.xcassets/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/examples/demo_spm/ios/OneSignalWidget/Assets.xcassets/WidgetBackground.colorset/Contents.json b/examples/demo_spm/ios/OneSignalWidget/Assets.xcassets/WidgetBackground.colorset/Contents.json
new file mode 100644
index 00000000..eb878970
--- /dev/null
+++ b/examples/demo_spm/ios/OneSignalWidget/Assets.xcassets/WidgetBackground.colorset/Contents.json
@@ -0,0 +1,11 @@
+{
+ "colors" : [
+ {
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/examples/demo_spm/ios/OneSignalWidget/Info.plist b/examples/demo_spm/ios/OneSignalWidget/Info.plist
new file mode 100644
index 00000000..0f118fb7
--- /dev/null
+++ b/examples/demo_spm/ios/OneSignalWidget/Info.plist
@@ -0,0 +1,11 @@
+
+
+
+
+ NSExtension
+
+ NSExtensionPointIdentifier
+ com.apple.widgetkit-extension
+
+
+
diff --git a/examples/demo_spm/ios/OneSignalWidget/OneSignalWidgetBundle.swift b/examples/demo_spm/ios/OneSignalWidget/OneSignalWidgetBundle.swift
new file mode 100644
index 00000000..1940bb22
--- /dev/null
+++ b/examples/demo_spm/ios/OneSignalWidget/OneSignalWidgetBundle.swift
@@ -0,0 +1,16 @@
+//
+// OneSignalWidgetBundle.swift
+// OneSignalWidgetExtension
+//
+// Created by Fadi George on 4/1/26.
+//
+
+import WidgetKit
+import SwiftUI
+
+@main
+struct OneSignalWidgetBundle: WidgetBundle {
+ var body: some Widget {
+ OneSignalWidgetLiveActivity()
+ }
+}
diff --git a/examples/demo_spm/ios/OneSignalWidget/OneSignalWidgetLiveActivity.swift b/examples/demo_spm/ios/OneSignalWidget/OneSignalWidgetLiveActivity.swift
new file mode 100644
index 00000000..f4a95f75
--- /dev/null
+++ b/examples/demo_spm/ios/OneSignalWidget/OneSignalWidgetLiveActivity.swift
@@ -0,0 +1,142 @@
+import ActivityKit
+import WidgetKit
+import SwiftUI
+import OneSignalLiveActivities
+
+@available(iOS 16.2, *)
+struct OneSignalWidgetLiveActivity: Widget {
+
+ private func statusIcon(for status: String) -> String {
+ switch status {
+ case "on_the_way": return "box.truck.fill"
+ case "delivered": return "checkmark.circle.fill"
+ default: return "bag.fill"
+ }
+ }
+
+ private func statusColor(for status: String) -> Color {
+ switch status {
+ case "on_the_way": return .blue
+ case "delivered": return .green
+ default: return .orange
+ }
+ }
+
+ private func statusLabel(for status: String) -> String {
+ switch status {
+ case "on_the_way": return "On the Way"
+ case "delivered": return "Delivered"
+ default: return "Preparing"
+ }
+ }
+
+ var body: some WidgetConfiguration {
+ ActivityConfiguration(for: DefaultLiveActivityAttributes.self) { context in
+ let orderNumber = context.attributes.data["orderNumber"]?.asString() ?? "Order"
+ let status = context.state.data["status"]?.asString() ?? "preparing"
+ let message = context.state.data["message"]?.asString() ?? "Your order is being prepared"
+ let eta = context.state.data["estimatedTime"]?.asString() ?? ""
+
+ VStack(spacing: 10) {
+ HStack {
+ Text(orderNumber)
+ .font(.caption)
+ .foregroundColor(.gray)
+ Spacer()
+ if !eta.isEmpty {
+ Text(eta)
+ .font(.caption)
+ .foregroundColor(.white.opacity(0.7))
+ }
+ }
+
+ HStack(spacing: 12) {
+ Image(systemName: statusIcon(for: status))
+ .font(.title2)
+ .foregroundColor(statusColor(for: status))
+
+ VStack(alignment: .leading, spacing: 2) {
+ Text(statusLabel(for: status))
+ .font(.headline)
+ .foregroundColor(.white)
+ Text(message)
+ .font(.subheadline)
+ .foregroundColor(.white.opacity(0.8))
+ .lineLimit(1)
+ }
+ Spacer()
+ }
+
+ DeliveryProgressBar(status: status)
+ }
+ .padding()
+ .activityBackgroundTint(Color(red: 0.11, green: 0.13, blue: 0.19))
+ .activitySystemActionForegroundColor(.white)
+
+ } dynamicIsland: { context in
+ let status = context.state.data["status"]?.asString() ?? "preparing"
+ let message = context.state.data["message"]?.asString() ?? "Preparing"
+ let eta = context.state.data["estimatedTime"]?.asString() ?? ""
+
+ return DynamicIsland {
+ DynamicIslandExpandedRegion(.leading) {
+ Image(systemName: statusIcon(for: status))
+ .font(.title2)
+ .foregroundColor(statusColor(for: status))
+ }
+ DynamicIslandExpandedRegion(.center) {
+ Text(statusLabel(for: status))
+ .font(.headline)
+ }
+ DynamicIslandExpandedRegion(.trailing) {
+ if !eta.isEmpty {
+ Text(eta)
+ .font(.caption)
+ .foregroundColor(.secondary)
+ }
+ }
+ DynamicIslandExpandedRegion(.bottom) {
+ Text(message)
+ .font(.caption)
+ .foregroundColor(.secondary)
+ }
+ } compactLeading: {
+ Image(systemName: statusIcon(for: status))
+ .foregroundColor(statusColor(for: status))
+ } compactTrailing: {
+ Text(statusLabel(for: status))
+ .font(.caption)
+ } minimal: {
+ Image(systemName: statusIcon(for: status))
+ .foregroundColor(statusColor(for: status))
+ }
+ }
+ }
+}
+
+@available(iOS 16.2, *)
+struct DeliveryProgressBar: View {
+ let status: String
+
+ private var progress: CGFloat {
+ switch status {
+ case "on_the_way": return 0.6
+ case "delivered": return 1.0
+ default: return 0.25
+ }
+ }
+
+ var body: some View {
+ GeometryReader { geo in
+ ZStack(alignment: .leading) {
+ RoundedRectangle(cornerRadius: 3)
+ .fill(Color.white.opacity(0.2))
+ .frame(height: 6)
+ RoundedRectangle(cornerRadius: 3)
+ .fill(progress >= 1.0 ? Color.green : Color.blue)
+ .frame(width: geo.size.width * progress, height: 6)
+ }
+ }
+ .frame(height: 6)
+ }
+}
diff --git a/examples/demo_spm/ios/Runner.xcodeproj/project.pbxproj b/examples/demo_spm/ios/Runner.xcodeproj/project.pbxproj
new file mode 100644
index 00000000..a29f0e53
--- /dev/null
+++ b/examples/demo_spm/ios/Runner.xcodeproj/project.pbxproj
@@ -0,0 +1,1098 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 54;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
+ 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; };
+ 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
+ 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
+ 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; };
+ 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
+ 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
+ 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
+ E8C8D1902F7B0DB7006581CB /* OneSignalNotificationServiceExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = E8C8D1892F7B0DB7006581CB /* OneSignalNotificationServiceExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
+ E8C8D1B32F7D9550006581CB /* WidgetKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E8C8D1B22F7D9550006581CB /* WidgetKit.framework */; };
+ E8C8D1B52F7D9550006581CB /* SwiftUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E8C8D1B42F7D9550006581CB /* SwiftUI.framework */; };
+ E8C8D1C22F7D9551006581CB /* OneSignalWidgetExtensionExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = E8C8D1B02F7D9550006581CB /* OneSignalWidgetExtensionExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+ 331C8085294A63A400263BE5 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 97C146E61CF9000F007C117D /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 97C146ED1CF9000F007C117D;
+ remoteInfo = Runner;
+ };
+ E8C8D18E2F7B0DB7006581CB /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 97C146E61CF9000F007C117D /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = E8C8D1882F7B0DB7006581CB;
+ remoteInfo = OneSignalNotificationServiceExtension;
+ };
+ E8C8D1C02F7D9551006581CB /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 97C146E61CF9000F007C117D /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = E8C8D1AF2F7D9550006581CB;
+ remoteInfo = OneSignalWidgetExtensionExtension;
+ };
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+ 9705A1C41CF9048500538489 /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ E8C8D1962F7B0DB7006581CB /* Embed Foundation Extensions */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 13;
+ files = (
+ E8C8D1902F7B0DB7006581CB /* OneSignalNotificationServiceExtension.appex in Embed Foundation Extensions */,
+ E8C8D1C22F7D9551006581CB /* OneSignalWidgetExtensionExtension.appex in Embed Foundation Extensions */,
+ );
+ name = "Embed Foundation Extensions";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; };
+ 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; };
+ 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; };
+ 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
+ 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; };
+ 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; };
+ 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
+ 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; };
+ 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; };
+ 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; };
+ 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; };
+ 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
+ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
+ 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; };
+ 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
+ E8C8D1892F7B0DB7006581CB /* OneSignalNotificationServiceExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = OneSignalNotificationServiceExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; };
+ E8C8D1B02F7D9550006581CB /* OneSignalWidgetExtensionExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = OneSignalWidgetExtensionExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; };
+ E8C8D1B22F7D9550006581CB /* WidgetKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WidgetKit.framework; path = System/Library/Frameworks/WidgetKit.framework; sourceTree = SDKROOT; };
+ E8C8D1B42F7D9550006581CB /* SwiftUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SwiftUI.framework; path = System/Library/Frameworks/SwiftUI.framework; sourceTree = SDKROOT; };
+/* End PBXFileReference section */
+
+/* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */
+ E8C8D1912F7B0DB7006581CB /* PBXFileSystemSynchronizedBuildFileExceptionSet */ = {
+ isa = PBXFileSystemSynchronizedBuildFileExceptionSet;
+ membershipExceptions = (
+ Info.plist,
+ );
+ target = E8C8D1882F7B0DB7006581CB /* OneSignalNotificationServiceExtension */;
+ };
+ E8C8D1C62F7D9551006581CB /* PBXFileSystemSynchronizedBuildFileExceptionSet */ = {
+ isa = PBXFileSystemSynchronizedBuildFileExceptionSet;
+ membershipExceptions = (
+ Info.plist,
+ );
+ target = E8C8D1AF2F7D9550006581CB /* OneSignalWidget */;
+ };
+/* End PBXFileSystemSynchronizedBuildFileExceptionSet section */
+
+/* Begin PBXFileSystemSynchronizedRootGroup section */
+ E8C8D18A2F7B0DB7006581CB /* OneSignalNotificationServiceExtension */ = {isa = PBXFileSystemSynchronizedRootGroup; exceptions = (E8C8D1912F7B0DB7006581CB /* PBXFileSystemSynchronizedBuildFileExceptionSet */, ); explicitFileTypes = {}; explicitFolders = (); path = OneSignalNotificationServiceExtension; sourceTree = ""; };
+ E8C8D1B62F7D9550006581CB /* OneSignalWidget */ = {isa = PBXFileSystemSynchronizedRootGroup; exceptions = (E8C8D1C62F7D9551006581CB /* PBXFileSystemSynchronizedBuildFileExceptionSet */, ); explicitFileTypes = {}; explicitFolders = (); path = OneSignalWidget; sourceTree = ""; };
+/* End PBXFileSystemSynchronizedRootGroup section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 97C146EB1CF9000F007C117D /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ E8C8D1862F7B0DB7006581CB /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ E8C8D1AD2F7D9550006581CB /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ E8C8D1B52F7D9550006581CB /* SwiftUI.framework in Frameworks */,
+ E8C8D1B32F7D9550006581CB /* WidgetKit.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 331C8082294A63A400263BE5 /* RunnerTests */ = {
+ isa = PBXGroup;
+ children = (
+ 331C807B294A618700263BE5 /* RunnerTests.swift */,
+ );
+ path = RunnerTests;
+ sourceTree = "";
+ };
+ 9740EEB11CF90186004384FC /* Flutter */ = {
+ isa = PBXGroup;
+ children = (
+ 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */,
+ 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */,
+ 9740EEB21CF90195004384FC /* Debug.xcconfig */,
+ 7AFA3C8E1D35360C0083082E /* Release.xcconfig */,
+ 9740EEB31CF90195004384FC /* Generated.xcconfig */,
+ );
+ name = Flutter;
+ sourceTree = "";
+ };
+ 97C146E51CF9000F007C117D = {
+ isa = PBXGroup;
+ children = (
+ 9740EEB11CF90186004384FC /* Flutter */,
+ 97C146F01CF9000F007C117D /* Runner */,
+ E8C8D18A2F7B0DB7006581CB /* OneSignalNotificationServiceExtension */,
+ E8C8D1B62F7D9550006581CB /* OneSignalWidget */,
+ E8C8D1B12F7D9550006581CB /* Frameworks */,
+ 97C146EF1CF9000F007C117D /* Products */,
+ 331C8082294A63A400263BE5 /* RunnerTests */,
+ );
+ sourceTree = "";
+ };
+ 97C146EF1CF9000F007C117D /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 97C146EE1CF9000F007C117D /* Runner.app */,
+ 331C8081294A63A400263BE5 /* RunnerTests.xctest */,
+ E8C8D1892F7B0DB7006581CB /* OneSignalNotificationServiceExtension.appex */,
+ E8C8D1B02F7D9550006581CB /* OneSignalWidgetExtensionExtension.appex */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ 97C146F01CF9000F007C117D /* Runner */ = {
+ isa = PBXGroup;
+ children = (
+ 97C146FA1CF9000F007C117D /* Main.storyboard */,
+ 97C146FD1CF9000F007C117D /* Assets.xcassets */,
+ 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,
+ 97C147021CF9000F007C117D /* Info.plist */,
+ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */,
+ 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,
+ 74858FAE1ED2DC5600515810 /* AppDelegate.swift */,
+ 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */,
+ );
+ path = Runner;
+ sourceTree = "";
+ };
+ E8C8D1B12F7D9550006581CB /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ E8C8D1B22F7D9550006581CB /* WidgetKit.framework */,
+ E8C8D1B42F7D9550006581CB /* SwiftUI.framework */,
+ );
+ name = Frameworks;
+ sourceTree = "";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 331C8080294A63A400263BE5 /* RunnerTests */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */;
+ buildPhases = (
+ 331C807D294A63A400263BE5 /* Sources */,
+ 331C807F294A63A400263BE5 /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ 331C8086294A63A400263BE5 /* PBXTargetDependency */,
+ );
+ name = RunnerTests;
+ productName = RunnerTests;
+ productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */;
+ productType = "com.apple.product-type.bundle.unit-test";
+ };
+ 97C146ED1CF9000F007C117D /* Runner */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
+ buildPhases = (
+ 9740EEB61CF901F6004384FC /* Run Script */,
+ 97C146EA1CF9000F007C117D /* Sources */,
+ 97C146EB1CF9000F007C117D /* Frameworks */,
+ 97C146EC1CF9000F007C117D /* Resources */,
+ 9705A1C41CF9048500538489 /* Embed Frameworks */,
+ E8C8D1962F7B0DB7006581CB /* Embed Foundation Extensions */,
+ 3B06AD1E1E4923F5004D2608 /* Thin Binary */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ E8C8D18F2F7B0DB7006581CB /* PBXTargetDependency */,
+ E8C8D1C12F7D9551006581CB /* PBXTargetDependency */,
+ );
+ name = Runner;
+ packageProductDependencies = (
+ 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */,
+ );
+ productName = Runner;
+ productReference = 97C146EE1CF9000F007C117D /* Runner.app */;
+ productType = "com.apple.product-type.application";
+ };
+ E8C8D1882F7B0DB7006581CB /* OneSignalNotificationServiceExtension */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = E8C8D1922F7B0DB7006581CB /* Build configuration list for PBXNativeTarget "OneSignalNotificationServiceExtension" */;
+ buildPhases = (
+ E8C8D1852F7B0DB7006581CB /* Sources */,
+ E8C8D1862F7B0DB7006581CB /* Frameworks */,
+ E8C8D1872F7B0DB7006581CB /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ fileSystemSynchronizedGroups = (
+ E8C8D18A2F7B0DB7006581CB /* OneSignalNotificationServiceExtension */,
+ );
+ name = OneSignalNotificationServiceExtension;
+ packageProductDependencies = (
+ );
+ productName = OneSignalNotificationServiceExtension;
+ productReference = E8C8D1892F7B0DB7006581CB /* OneSignalNotificationServiceExtension.appex */;
+ productType = "com.apple.product-type.app-extension";
+ };
+ E8C8D1AF2F7D9550006581CB /* OneSignalWidgetExtensionExtension */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = E8C8D1C72F7D9551006581CB /* Build configuration list for PBXNativeTarget "OneSignalWidgetExtensionExtension" */;
+ buildPhases = (
+ E8C8D1AC2F7D9550006581CB /* Sources */,
+ E8C8D1AD2F7D9550006581CB /* Frameworks */,
+ E8C8D1AE2F7D9550006581CB /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ fileSystemSynchronizedGroups = (
+ E8C8D1B62F7D9550006581CB /* OneSignalWidget */,
+ );
+ name = OneSignalWidgetExtensionExtension;
+ packageProductDependencies = (
+ );
+ productName = OneSignalWidgetExtensionExtension;
+ productReference = E8C8D1B02F7D9550006581CB /* OneSignalWidgetExtensionExtension.appex */;
+ productType = "com.apple.product-type.app-extension";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 97C146E61CF9000F007C117D /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ BuildIndependentTargetsInParallel = YES;
+ LastSwiftUpdateCheck = 2620;
+ LastUpgradeCheck = 1510;
+ ORGANIZATIONNAME = "";
+ TargetAttributes = {
+ 331C8080294A63A400263BE5 = {
+ CreatedOnToolsVersion = 14.0;
+ TestTargetID = 97C146ED1CF9000F007C117D;
+ };
+ 97C146ED1CF9000F007C117D = {
+ CreatedOnToolsVersion = 7.3.1;
+ LastSwiftMigration = 1100;
+ };
+ E8C8D1882F7B0DB7006581CB = {
+ CreatedOnToolsVersion = 26.2;
+ };
+ E8C8D1AF2F7D9550006581CB = {
+ CreatedOnToolsVersion = 26.2;
+ };
+ };
+ };
+ buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */;
+ compatibilityVersion = "Xcode 9.3";
+ developmentRegion = en;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ en,
+ Base,
+ );
+ mainGroup = 97C146E51CF9000F007C117D;
+ packageReferences = (
+ 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage" */,
+ );
+ productRefGroup = 97C146EF1CF9000F007C117D /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ 97C146ED1CF9000F007C117D /* Runner */,
+ 331C8080294A63A400263BE5 /* RunnerTests */,
+ E8C8D1882F7B0DB7006581CB /* OneSignalNotificationServiceExtension */,
+ E8C8D1AF2F7D9550006581CB /* OneSignalWidgetExtensionExtension */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 331C807F294A63A400263BE5 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 97C146EC1CF9000F007C117D /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */,
+ 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,
+ 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
+ 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ E8C8D1872F7B0DB7006581CB /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ E8C8D1AE2F7D9550006581CB /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXShellScriptBuildPhase section */
+ 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
+ isa = PBXShellScriptBuildPhase;
+ alwaysOutOfDate = 1;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}",
+ );
+ name = "Thin Binary";
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
+ };
+ 9740EEB61CF901F6004384FC /* Run Script */ = {
+ isa = PBXShellScriptBuildPhase;
+ alwaysOutOfDate = 1;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ name = "Run Script";
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
+ };
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 331C807D294A63A400263BE5 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 97C146EA1CF9000F007C117D /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */,
+ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ E8C8D1852F7B0DB7006581CB /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ E8C8D1AC2F7D9550006581CB /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXTargetDependency section */
+ 331C8086294A63A400263BE5 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 97C146ED1CF9000F007C117D /* Runner */;
+ targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */;
+ };
+ E8C8D18F2F7B0DB7006581CB /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = E8C8D1882F7B0DB7006581CB /* OneSignalNotificationServiceExtension */;
+ targetProxy = E8C8D18E2F7B0DB7006581CB /* PBXContainerItemProxy */;
+ };
+ E8C8D1C12F7D9551006581CB /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = E8C8D1AF2F7D9550006581CB /* OneSignalWidgetExtensionExtension */;
+ targetProxy = E8C8D1C02F7D9551006581CB /* PBXContainerItemProxy */;
+ };
+/* End PBXTargetDependency section */
+
+/* Begin PBXVariantGroup section */
+ 97C146FA1CF9000F007C117D /* Main.storyboard */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 97C146FB1CF9000F007C117D /* Base */,
+ );
+ name = Main.storyboard;
+ sourceTree = "";
+ };
+ 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 97C147001CF9000F007C117D /* Base */,
+ );
+ name = LaunchScreen.storyboard;
+ sourceTree = "";
+ };
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+ 249021D3217E4FDB00AE95B9 /* Profile */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_USER_SCRIPT_SANDBOXING = NO;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 13.0;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ SDKROOT = iphoneos;
+ SUPPORTED_PLATFORMS = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VALIDATE_PRODUCT = YES;
+ };
+ name = Profile;
+ };
+ 249021D4217E4FDB00AE95B9 /* Profile */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CLANG_ENABLE_MODULES = YES;
+ CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
+ CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
+ DEVELOPMENT_TEAM = 99SW8E36CT;
+ ENABLE_BITCODE = NO;
+ INFOPLIST_FILE = Runner/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.onesignal.example;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
+ SWIFT_VERSION = 5.0;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = Profile;
+ };
+ 331C8088294A63A400263BE5 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ CODE_SIGN_STYLE = Automatic;
+ CURRENT_PROJECT_VERSION = 1;
+ GENERATE_INFOPLIST_FILE = YES;
+ MARKETING_VERSION = 1.0;
+ PRODUCT_BUNDLE_IDENTIFIER = com.onesignal.example.demo.RunnerTests;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
+ };
+ name = Debug;
+ };
+ 331C8089294A63A400263BE5 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ CODE_SIGN_STYLE = Automatic;
+ CURRENT_PROJECT_VERSION = 1;
+ GENERATE_INFOPLIST_FILE = YES;
+ MARKETING_VERSION = 1.0;
+ PRODUCT_BUNDLE_IDENTIFIER = com.onesignal.example.demo.RunnerTests;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_VERSION = 5.0;
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
+ };
+ name = Release;
+ };
+ 331C808A294A63A400263BE5 /* Profile */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ CODE_SIGN_STYLE = Automatic;
+ CURRENT_PROJECT_VERSION = 1;
+ GENERATE_INFOPLIST_FILE = YES;
+ MARKETING_VERSION = 1.0;
+ PRODUCT_BUNDLE_IDENTIFIER = com.onesignal.example.demo.RunnerTests;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_VERSION = 5.0;
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
+ };
+ name = Profile;
+ };
+ 97C147031CF9000F007C117D /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = AppIcon;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = dwarf;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_TESTABILITY = YES;
+ ENABLE_USER_SCRIPT_SANDBOXING = NO;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 13.0;
+ MTL_ENABLE_DEBUG_INFO = YES;
+ ONLY_ACTIVE_ARCH = YES;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = Debug;
+ };
+ 97C147041CF9000F007C117D /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = AppIcon;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_USER_SCRIPT_SANDBOXING = NO;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 13.0;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ SDKROOT = iphoneos;
+ SUPPORTED_PLATFORMS = iphoneos;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-O";
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VALIDATE_PRODUCT = YES;
+ };
+ name = Release;
+ };
+ 97C147061CF9000F007C117D /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CLANG_ENABLE_MODULES = YES;
+ CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
+ CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
+ DEVELOPMENT_TEAM = 99SW8E36CT;
+ ENABLE_BITCODE = NO;
+ INFOPLIST_FILE = Runner/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.onesignal.example;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = Debug;
+ };
+ 97C147071CF9000F007C117D /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CLANG_ENABLE_MODULES = YES;
+ CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
+ CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
+ DEVELOPMENT_TEAM = 99SW8E36CT;
+ ENABLE_BITCODE = NO;
+ INFOPLIST_FILE = Runner/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.onesignal.example;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
+ SWIFT_VERSION = 5.0;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = Release;
+ };
+ E8C8D1932F7B0DB7006581CB /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ 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 = OneSignalNotificationServiceExtension/OneSignalNotificationServiceExtension.entitlements;
+ CODE_SIGN_STYLE = Automatic;
+ CURRENT_PROJECT_VERSION = 1;
+ DEVELOPMENT_TEAM = 99SW8E36CT;
+ ENABLE_USER_SCRIPT_SANDBOXING = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu17;
+ GENERATE_INFOPLIST_FILE = YES;
+ INFOPLIST_FILE = OneSignalNotificationServiceExtension/Info.plist;
+ INFOPLIST_KEY_CFBundleDisplayName = OneSignalNotificationServiceExtension;
+ INFOPLIST_KEY_NSHumanReadableCopyright = "";
+ IPHONEOS_DEPLOYMENT_TARGET = 26.2;
+ 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 = com.onesignal.example.OneSignalNotificationServiceExtensionFlutter;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SKIP_INSTALL = YES;
+ STRING_CATALOG_GENERATE_SYMBOLS = YES;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
+ SWIFT_APPROACHABLE_CONCURRENCY = YES;
+ SWIFT_EMIT_LOC_STRINGS = YES;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES;
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = Debug;
+ };
+ E8C8D1942F7B0DB7006581CB /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ 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 = OneSignalNotificationServiceExtension/OneSignalNotificationServiceExtension.entitlements;
+ CODE_SIGN_STYLE = Automatic;
+ CURRENT_PROJECT_VERSION = 1;
+ DEVELOPMENT_TEAM = 99SW8E36CT;
+ ENABLE_USER_SCRIPT_SANDBOXING = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu17;
+ GENERATE_INFOPLIST_FILE = YES;
+ INFOPLIST_FILE = OneSignalNotificationServiceExtension/Info.plist;
+ INFOPLIST_KEY_CFBundleDisplayName = OneSignalNotificationServiceExtension;
+ INFOPLIST_KEY_NSHumanReadableCopyright = "";
+ IPHONEOS_DEPLOYMENT_TARGET = 26.2;
+ 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 = com.onesignal.example.OneSignalNotificationServiceExtensionFlutter;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SKIP_INSTALL = YES;
+ STRING_CATALOG_GENERATE_SYMBOLS = YES;
+ SWIFT_APPROACHABLE_CONCURRENCY = YES;
+ SWIFT_EMIT_LOC_STRINGS = YES;
+ SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES;
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = Release;
+ };
+ E8C8D1952F7B0DB7006581CB /* Profile */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ 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 = OneSignalNotificationServiceExtension/OneSignalNotificationServiceExtension.entitlements;
+ CODE_SIGN_STYLE = Automatic;
+ CURRENT_PROJECT_VERSION = 1;
+ DEVELOPMENT_TEAM = 99SW8E36CT;
+ ENABLE_USER_SCRIPT_SANDBOXING = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu17;
+ GENERATE_INFOPLIST_FILE = YES;
+ INFOPLIST_FILE = OneSignalNotificationServiceExtension/Info.plist;
+ INFOPLIST_KEY_CFBundleDisplayName = OneSignalNotificationServiceExtension;
+ INFOPLIST_KEY_NSHumanReadableCopyright = "";
+ IPHONEOS_DEPLOYMENT_TARGET = 26.2;
+ 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 = com.onesignal.example.OneSignalNotificationServiceExtensionFlutter;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SKIP_INSTALL = YES;
+ STRING_CATALOG_GENERATE_SYMBOLS = YES;
+ SWIFT_APPROACHABLE_CONCURRENCY = YES;
+ SWIFT_EMIT_LOC_STRINGS = YES;
+ SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES;
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = Profile;
+ };
+ E8C8D1C32F7D9551006581CB /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
+ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
+ ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground;
+ 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_STYLE = Automatic;
+ CURRENT_PROJECT_VERSION = 1;
+ DEVELOPMENT_TEAM = 99SW8E36CT;
+ ENABLE_USER_SCRIPT_SANDBOXING = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu17;
+ GENERATE_INFOPLIST_FILE = YES;
+ INFOPLIST_FILE = OneSignalWidget/Info.plist;
+ INFOPLIST_KEY_CFBundleDisplayName = OneSignalWidget;
+ INFOPLIST_KEY_NSHumanReadableCopyright = "";
+ IPHONEOS_DEPLOYMENT_TARGET = 26.2;
+ 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 = com.onesignal.example.OneSignalWidget;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SKIP_INSTALL = YES;
+ STRING_CATALOG_GENERATE_SYMBOLS = YES;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
+ SWIFT_APPROACHABLE_CONCURRENCY = YES;
+ SWIFT_EMIT_LOC_STRINGS = YES;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES;
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = Debug;
+ };
+ E8C8D1C42F7D9551006581CB /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
+ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
+ ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground;
+ 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_STYLE = Automatic;
+ CURRENT_PROJECT_VERSION = 1;
+ DEVELOPMENT_TEAM = 99SW8E36CT;
+ ENABLE_USER_SCRIPT_SANDBOXING = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu17;
+ GENERATE_INFOPLIST_FILE = YES;
+ INFOPLIST_FILE = OneSignalWidget/Info.plist;
+ INFOPLIST_KEY_CFBundleDisplayName = OneSignalWidget;
+ INFOPLIST_KEY_NSHumanReadableCopyright = "";
+ IPHONEOS_DEPLOYMENT_TARGET = 26.2;
+ 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 = com.onesignal.example.OneSignalWidget;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SKIP_INSTALL = YES;
+ STRING_CATALOG_GENERATE_SYMBOLS = YES;
+ SWIFT_APPROACHABLE_CONCURRENCY = YES;
+ SWIFT_EMIT_LOC_STRINGS = YES;
+ SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES;
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = Release;
+ };
+ E8C8D1C52F7D9551006581CB /* Profile */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
+ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
+ ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground;
+ 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_STYLE = Automatic;
+ CURRENT_PROJECT_VERSION = 1;
+ DEVELOPMENT_TEAM = 99SW8E36CT;
+ ENABLE_USER_SCRIPT_SANDBOXING = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu17;
+ GENERATE_INFOPLIST_FILE = YES;
+ INFOPLIST_FILE = OneSignalWidget/Info.plist;
+ INFOPLIST_KEY_CFBundleDisplayName = OneSignalWidget;
+ INFOPLIST_KEY_NSHumanReadableCopyright = "";
+ IPHONEOS_DEPLOYMENT_TARGET = 26.2;
+ 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 = com.onesignal.example.OneSignalWidget;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SKIP_INSTALL = YES;
+ STRING_CATALOG_GENERATE_SYMBOLS = YES;
+ SWIFT_APPROACHABLE_CONCURRENCY = YES;
+ SWIFT_EMIT_LOC_STRINGS = YES;
+ SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES;
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = Profile;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 331C8088294A63A400263BE5 /* Debug */,
+ 331C8089294A63A400263BE5 /* Release */,
+ 331C808A294A63A400263BE5 /* Profile */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 97C147031CF9000F007C117D /* Debug */,
+ 97C147041CF9000F007C117D /* Release */,
+ 249021D3217E4FDB00AE95B9 /* Profile */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 97C147061CF9000F007C117D /* Debug */,
+ 97C147071CF9000F007C117D /* Release */,
+ 249021D4217E4FDB00AE95B9 /* Profile */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ E8C8D1922F7B0DB7006581CB /* Build configuration list for PBXNativeTarget "OneSignalNotificationServiceExtension" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ E8C8D1932F7B0DB7006581CB /* Debug */,
+ E8C8D1942F7B0DB7006581CB /* Release */,
+ E8C8D1952F7B0DB7006581CB /* Profile */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ E8C8D1C72F7D9551006581CB /* Build configuration list for PBXNativeTarget "OneSignalWidgetExtensionExtension" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ E8C8D1C32F7D9551006581CB /* Debug */,
+ E8C8D1C42F7D9551006581CB /* Release */,
+ E8C8D1C52F7D9551006581CB /* Profile */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+
+/* Begin XCLocalSwiftPackageReference section */
+ 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage" */ = {
+ isa = XCLocalSwiftPackageReference;
+ relativePath = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage;
+ };
+/* End XCLocalSwiftPackageReference section */
+
+/* Begin XCSwiftPackageProductDependency section */
+ 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */ = {
+ isa = XCSwiftPackageProductDependency;
+ productName = FlutterGeneratedPluginSwiftPackage;
+ };
+/* End XCSwiftPackageProductDependency section */
+ };
+ rootObject = 97C146E61CF9000F007C117D /* Project object */;
+}
diff --git a/examples/demo_spm/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/examples/demo_spm/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 00000000..919434a6
--- /dev/null
+++ b/examples/demo_spm/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/examples/demo_spm/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/examples/demo_spm/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
new file mode 100644
index 00000000..18d98100
--- /dev/null
+++ b/examples/demo_spm/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
@@ -0,0 +1,8 @@
+
+
+
+
+ IDEDidComputeMac32BitWarning
+
+
+
diff --git a/examples/demo_spm/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/examples/demo_spm/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
new file mode 100644
index 00000000..f9b0d7c5
--- /dev/null
+++ b/examples/demo_spm/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
@@ -0,0 +1,8 @@
+
+
+
+
+ PreviewsEnabled
+
+
+
diff --git a/examples/demo_spm/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/examples/demo_spm/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
new file mode 100644
index 00000000..c3fedb29
--- /dev/null
+++ b/examples/demo_spm/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
@@ -0,0 +1,119 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/examples/demo_spm/ios/Runner.xcworkspace/contents.xcworkspacedata b/examples/demo_spm/ios/Runner.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 00000000..1d526a16
--- /dev/null
+++ b/examples/demo_spm/ios/Runner.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/examples/demo_spm/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/examples/demo_spm/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
new file mode 100644
index 00000000..18d98100
--- /dev/null
+++ b/examples/demo_spm/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
@@ -0,0 +1,8 @@
+
+
+
+
+ IDEDidComputeMac32BitWarning
+
+
+
diff --git a/examples/demo_spm/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/examples/demo_spm/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
new file mode 100644
index 00000000..f9b0d7c5
--- /dev/null
+++ b/examples/demo_spm/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
@@ -0,0 +1,8 @@
+
+
+
+
+ PreviewsEnabled
+
+
+
diff --git a/examples/demo_spm/ios/Runner/AppDelegate.swift b/examples/demo_spm/ios/Runner/AppDelegate.swift
new file mode 100644
index 00000000..62666446
--- /dev/null
+++ b/examples/demo_spm/ios/Runner/AppDelegate.swift
@@ -0,0 +1,13 @@
+import Flutter
+import UIKit
+
+@main
+@objc class AppDelegate: FlutterAppDelegate {
+ override func application(
+ _ application: UIApplication,
+ didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
+ ) -> Bool {
+ GeneratedPluginRegistrant.register(with: self)
+ return super.application(application, didFinishLaunchingWithOptions: launchOptions)
+ }
+}
diff --git a/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
new file mode 100644
index 00000000..d0d98aa1
--- /dev/null
+++ b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
@@ -0,0 +1 @@
+{"images":[{"size":"20x20","idiom":"iphone","filename":"Icon-App-20x20@2x.png","scale":"2x"},{"size":"20x20","idiom":"iphone","filename":"Icon-App-20x20@3x.png","scale":"3x"},{"size":"29x29","idiom":"iphone","filename":"Icon-App-29x29@1x.png","scale":"1x"},{"size":"29x29","idiom":"iphone","filename":"Icon-App-29x29@2x.png","scale":"2x"},{"size":"29x29","idiom":"iphone","filename":"Icon-App-29x29@3x.png","scale":"3x"},{"size":"40x40","idiom":"iphone","filename":"Icon-App-40x40@2x.png","scale":"2x"},{"size":"40x40","idiom":"iphone","filename":"Icon-App-40x40@3x.png","scale":"3x"},{"size":"57x57","idiom":"iphone","filename":"Icon-App-57x57@1x.png","scale":"1x"},{"size":"57x57","idiom":"iphone","filename":"Icon-App-57x57@2x.png","scale":"2x"},{"size":"60x60","idiom":"iphone","filename":"Icon-App-60x60@2x.png","scale":"2x"},{"size":"60x60","idiom":"iphone","filename":"Icon-App-60x60@3x.png","scale":"3x"},{"size":"20x20","idiom":"ipad","filename":"Icon-App-20x20@1x.png","scale":"1x"},{"size":"20x20","idiom":"ipad","filename":"Icon-App-20x20@2x.png","scale":"2x"},{"size":"29x29","idiom":"ipad","filename":"Icon-App-29x29@1x.png","scale":"1x"},{"size":"29x29","idiom":"ipad","filename":"Icon-App-29x29@2x.png","scale":"2x"},{"size":"40x40","idiom":"ipad","filename":"Icon-App-40x40@1x.png","scale":"1x"},{"size":"40x40","idiom":"ipad","filename":"Icon-App-40x40@2x.png","scale":"2x"},{"size":"50x50","idiom":"ipad","filename":"Icon-App-50x50@1x.png","scale":"1x"},{"size":"50x50","idiom":"ipad","filename":"Icon-App-50x50@2x.png","scale":"2x"},{"size":"72x72","idiom":"ipad","filename":"Icon-App-72x72@1x.png","scale":"1x"},{"size":"72x72","idiom":"ipad","filename":"Icon-App-72x72@2x.png","scale":"2x"},{"size":"76x76","idiom":"ipad","filename":"Icon-App-76x76@1x.png","scale":"1x"},{"size":"76x76","idiom":"ipad","filename":"Icon-App-76x76@2x.png","scale":"2x"},{"size":"83.5x83.5","idiom":"ipad","filename":"Icon-App-83.5x83.5@2x.png","scale":"2x"},{"size":"1024x1024","idiom":"ios-marketing","filename":"Icon-App-1024x1024@1x.png","scale":"1x"}],"info":{"version":1,"author":"xcode"}}
\ No newline at end of file
diff --git a/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
new file mode 100644
index 00000000..d4295e38
Binary files /dev/null and b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png differ
diff --git a/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png
new file mode 100644
index 00000000..97658bfe
Binary files /dev/null and b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png differ
diff --git a/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
new file mode 100644
index 00000000..b1bf42f9
Binary files /dev/null and b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png differ
diff --git a/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
new file mode 100644
index 00000000..76b737e0
Binary files /dev/null and b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png differ
diff --git a/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
new file mode 100644
index 00000000..b8ac6697
Binary files /dev/null and b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png differ
diff --git a/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
new file mode 100644
index 00000000..d3de94d2
Binary files /dev/null and b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png differ
diff --git a/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
new file mode 100644
index 00000000..f0559d2b
Binary files /dev/null and b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png differ
diff --git a/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
new file mode 100644
index 00000000..b1bf42f9
Binary files /dev/null and b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png differ
diff --git a/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
new file mode 100644
index 00000000..59124a76
Binary files /dev/null and b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png differ
diff --git a/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
new file mode 100644
index 00000000..dd146ada
Binary files /dev/null and b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png differ
diff --git a/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png
new file mode 100644
index 00000000..388750c5
Binary files /dev/null and b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png differ
diff --git a/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png
new file mode 100644
index 00000000..5ede07ab
Binary files /dev/null and b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png differ
diff --git a/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png
new file mode 100644
index 00000000..9edc8622
Binary files /dev/null and b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png differ
diff --git a/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png
new file mode 100644
index 00000000..7a6e7e45
Binary files /dev/null and b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png differ
diff --git a/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
new file mode 100644
index 00000000..dd146ada
Binary files /dev/null and b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png differ
diff --git a/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
new file mode 100644
index 00000000..8e943138
Binary files /dev/null and b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png differ
diff --git a/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png
new file mode 100644
index 00000000..7da0bc3d
Binary files /dev/null and b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png differ
diff --git a/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png
new file mode 100644
index 00000000..be7bd5a1
Binary files /dev/null and b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png differ
diff --git a/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png
new file mode 100644
index 00000000..96ba43c2
Binary files /dev/null and b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png differ
diff --git a/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
new file mode 100644
index 00000000..9dd61861
Binary files /dev/null and b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png differ
diff --git a/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
new file mode 100644
index 00000000..2947572c
Binary files /dev/null and b/examples/demo_spm/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png differ
diff --git a/examples/demo_spm/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/examples/demo_spm/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json
new file mode 100644
index 00000000..0bedcf2f
--- /dev/null
+++ b/examples/demo_spm/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "filename" : "LaunchImage.png",
+ "scale" : "1x"
+ },
+ {
+ "idiom" : "universal",
+ "filename" : "LaunchImage@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "filename" : "LaunchImage@3x.png",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
diff --git a/examples/demo_spm/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/examples/demo_spm/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
new file mode 100644
index 00000000..9da19eac
Binary files /dev/null and b/examples/demo_spm/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png differ
diff --git a/examples/demo_spm/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/examples/demo_spm/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
new file mode 100644
index 00000000..9da19eac
Binary files /dev/null and b/examples/demo_spm/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png differ
diff --git a/examples/demo_spm/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/examples/demo_spm/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
new file mode 100644
index 00000000..9da19eac
Binary files /dev/null and b/examples/demo_spm/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png differ
diff --git a/examples/demo_spm/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/examples/demo_spm/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md
new file mode 100644
index 00000000..89c2725b
--- /dev/null
+++ b/examples/demo_spm/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md
@@ -0,0 +1,5 @@
+# Launch Screen Assets
+
+You can customize the launch screen with your own desired assets by replacing the image files in this directory.
+
+You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images.
\ No newline at end of file
diff --git a/examples/demo_spm/ios/Runner/Base.lproj/LaunchScreen.storyboard b/examples/demo_spm/ios/Runner/Base.lproj/LaunchScreen.storyboard
new file mode 100644
index 00000000..f2e259c7
--- /dev/null
+++ b/examples/demo_spm/ios/Runner/Base.lproj/LaunchScreen.storyboard
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/examples/demo_spm/ios/Runner/Base.lproj/Main.storyboard b/examples/demo_spm/ios/Runner/Base.lproj/Main.storyboard
new file mode 100644
index 00000000..f3c28516
--- /dev/null
+++ b/examples/demo_spm/ios/Runner/Base.lproj/Main.storyboard
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/examples/demo_spm/ios/Runner/Info.plist b/examples/demo_spm/ios/Runner/Info.plist
new file mode 100644
index 00000000..4bd33cf5
--- /dev/null
+++ b/examples/demo_spm/ios/Runner/Info.plist
@@ -0,0 +1,59 @@
+
+
+
+
+ CADisableMinimumFrameDurationOnPhone
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleDisplayName
+ Demo
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ demo
+ CFBundlePackageType
+ APPL
+ CFBundleShortVersionString
+ $(FLUTTER_BUILD_NAME)
+ CFBundleSignature
+ ????
+ CFBundleVersion
+ $(FLUTTER_BUILD_NUMBER)
+ LSRequiresIPhoneOS
+
+ NSSupportsLiveActivities
+
+ NSLocationWhenInUseUsageDescription
+ This app uses your location to personalize notifications and content.
+ NSLocationAlwaysAndWhenInUseUsageDescription
+ This app uses your location to personalize notifications and content, even in the background.
+ UIApplicationSupportsIndirectInputEvents
+
+ UIBackgroundModes
+
+ remote-notification
+
+ UILaunchStoryboardName
+ LaunchScreen
+ UIMainStoryboardFile
+ Main
+ UISupportedInterfaceOrientations
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+ UISupportedInterfaceOrientations~ipad
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationPortraitUpsideDown
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+
+
diff --git a/examples/demo_spm/ios/Runner/Runner-Bridging-Header.h b/examples/demo_spm/ios/Runner/Runner-Bridging-Header.h
new file mode 100644
index 00000000..308a2a56
--- /dev/null
+++ b/examples/demo_spm/ios/Runner/Runner-Bridging-Header.h
@@ -0,0 +1 @@
+#import "GeneratedPluginRegistrant.h"
diff --git a/examples/demo_spm/ios/Runner/Runner.entitlements b/examples/demo_spm/ios/Runner/Runner.entitlements
new file mode 100644
index 00000000..34463649
--- /dev/null
+++ b/examples/demo_spm/ios/Runner/Runner.entitlements
@@ -0,0 +1,12 @@
+
+
+
+
+ aps-environment
+ development
+ com.apple.security.application-groups
+
+ group.com.onesignal.example.onesignal
+
+
+
diff --git a/examples/demo_spm/ios/RunnerTests/RunnerTests.swift b/examples/demo_spm/ios/RunnerTests/RunnerTests.swift
new file mode 100644
index 00000000..86a7c3b1
--- /dev/null
+++ b/examples/demo_spm/ios/RunnerTests/RunnerTests.swift
@@ -0,0 +1,12 @@
+import Flutter
+import UIKit
+import XCTest
+
+class RunnerTests: XCTestCase {
+
+ func testExample() {
+ // If you add code to the Runner application, consider adding tests here.
+ // See https://developer.apple.com/documentation/xctest for more information about using XCTest.
+ }
+
+}
diff --git a/examples/demo_spm/lib b/examples/demo_spm/lib
new file mode 120000
index 00000000..255adc2f
--- /dev/null
+++ b/examples/demo_spm/lib
@@ -0,0 +1 @@
+../demo/lib
\ No newline at end of file
diff --git a/examples/demo_spm/pubspec.yaml b/examples/demo_spm/pubspec.yaml
new file mode 100644
index 00000000..52577bec
--- /dev/null
+++ b/examples/demo_spm/pubspec.yaml
@@ -0,0 +1,39 @@
+name: demo
+description: OneSignal Flutter SDK Demo App
+publish_to: 'none'
+version: 1.0.0+1
+
+environment:
+ sdk: ^3.7.0
+
+dependencies:
+ flutter:
+ sdk: flutter
+ onesignal_flutter:
+ path: ../../
+ provider: ^6.1.0
+ shared_preferences: ^2.3.0
+ http: ^1.2.0
+ url_launcher: ^6.2.0
+ flutter_svg: ^2.0.0
+ flutter_dotenv: ^5.2.1
+
+dev_dependencies:
+ flutter_test:
+ sdk: flutter
+ flutter_lints: ^5.0.0
+ flutter_launcher_icons: ^0.14.3
+
+flutter_launcher_icons:
+ android: true
+ ios: true
+ remove_alpha_ios: true
+ image_path: "assets/onesignal_logo_icon_padded.png"
+ adaptive_icon_background: "#FFFFFF"
+ adaptive_icon_foreground: "assets/onesignal_logo_icon_padded.png"
+
+flutter:
+ uses-material-design: true
+ assets:
+ - assets/onesignal_logo.svg
+ - .env
diff --git a/ios/Assets/.gitkeep b/ios/Assets/.gitkeep
deleted file mode 100644
index e69de29b..00000000
diff --git a/ios/onesignal_flutter.podspec b/ios/onesignal_flutter.podspec
index 98de90eb..84f9d30d 100644
--- a/ios/onesignal_flutter.podspec
+++ b/ios/onesignal_flutter.podspec
@@ -10,8 +10,8 @@ Pod::Spec.new do |s|
s.license = { :file => '../LICENSE' }
s.author = { 'Brad Hesse' => 'brad@onesignal.com', 'Josh Kasten' => 'josh@onesignal.com' }
s.source = { :path => '.' }
- s.source_files = 'Classes/**/*'
- s.public_header_files = 'Classes/**/*.h'
+ s.source_files = 'onesignal_flutter/Sources/onesignal_flutter/**/*.{h,m}'
+ s.public_header_files = 'onesignal_flutter/Sources/onesignal_flutter/include/**/*.h'
s.dependency 'Flutter'
s.dependency 'OneSignalXCFramework', '5.5.0'
s.ios.deployment_target = '11.0'
diff --git a/ios/onesignal_flutter/Package.swift b/ios/onesignal_flutter/Package.swift
new file mode 100644
index 00000000..4a75bdc8
--- /dev/null
+++ b/ios/onesignal_flutter/Package.swift
@@ -0,0 +1,31 @@
+// swift-tools-version: 5.9
+// The swift-tools-version declares the minimum version of Swift required to build this package.
+
+import PackageDescription
+
+let package = Package(
+ name: "onesignal_flutter",
+ platforms: [
+ .iOS("11.0")
+ ],
+ products: [
+ .library(name: "onesignal-flutter", targets: ["onesignal_flutter"])
+ ],
+ dependencies: [
+ .package(url: "https://github.com/OneSignal/OneSignal-XCFramework", exact: "5.5.0"),
+ ],
+ targets: [
+ .target(
+ name: "onesignal_flutter",
+ dependencies: [
+ .product(name: "OneSignalFramework", package: "OneSignal-XCFramework"),
+ .product(name: "OneSignalInAppMessages", package: "OneSignal-XCFramework"),
+ .product(name: "OneSignalLocation", package: "OneSignal-XCFramework"),
+ .product(name: "OneSignalExtension", package: "OneSignal-XCFramework"),
+ ],
+ cSettings: [
+ .headerSearchPath("include/onesignal_flutter")
+ ]
+ )
+ ]
+)
diff --git a/ios/Classes/OSFlutterCategories.m b/ios/onesignal_flutter/Sources/onesignal_flutter/OSFlutterCategories.m
similarity index 98%
rename from ios/Classes/OSFlutterCategories.m
rename to ios/onesignal_flutter/Sources/onesignal_flutter/OSFlutterCategories.m
index db3ac0ec..536e047e 100644
--- a/ios/Classes/OSFlutterCategories.m
+++ b/ios/onesignal_flutter/Sources/onesignal_flutter/OSFlutterCategories.m
@@ -25,7 +25,7 @@
* THE SOFTWARE.
*/
-#import "OSFlutterCategories.h"
+#import "./include/onesignal_flutter/OSFlutterCategories.h"
/*
The OneSignal iOS SDK implements similar methods (`toDictionary`)
diff --git a/ios/Classes/OSFlutterDebug.m b/ios/onesignal_flutter/Sources/onesignal_flutter/OSFlutterDebug.m
similarity index 95%
rename from ios/Classes/OSFlutterDebug.m
rename to ios/onesignal_flutter/Sources/onesignal_flutter/OSFlutterDebug.m
index f443157a..28ac9b28 100644
--- a/ios/Classes/OSFlutterDebug.m
+++ b/ios/onesignal_flutter/Sources/onesignal_flutter/OSFlutterDebug.m
@@ -25,8 +25,8 @@
* THE SOFTWARE.
*/
-#import "OSFlutterDebug.h"
-#import "OSFlutterCategories.h"
+#import "./include/onesignal_flutter/OSFlutterDebug.h"
+#import "./include/onesignal_flutter/OSFlutterCategories.h"
#import
@implementation OSFlutterDebug
diff --git a/ios/Classes/OSFlutterInAppMessages.m b/ios/onesignal_flutter/Sources/onesignal_flutter/OSFlutterInAppMessages.m
similarity index 97%
rename from ios/Classes/OSFlutterInAppMessages.m
rename to ios/onesignal_flutter/Sources/onesignal_flutter/OSFlutterInAppMessages.m
index 8acbaefd..7a88a4cc 100644
--- a/ios/Classes/OSFlutterInAppMessages.m
+++ b/ios/onesignal_flutter/Sources/onesignal_flutter/OSFlutterInAppMessages.m
@@ -25,8 +25,8 @@
* THE SOFTWARE.
*/
-#import "OSFlutterInAppMessages.h"
-#import "OSFlutterCategories.h"
+#import "./include/onesignal_flutter/OSFlutterInAppMessages.h"
+#import "./include/onesignal_flutter/OSFlutterCategories.h"
#import
@implementation OSFlutterInAppMessages
diff --git a/ios/Classes/OSFlutterLiveActivities.m b/ios/onesignal_flutter/Sources/onesignal_flutter/OSFlutterLiveActivities.m
similarity index 97%
rename from ios/Classes/OSFlutterLiveActivities.m
rename to ios/onesignal_flutter/Sources/onesignal_flutter/OSFlutterLiveActivities.m
index aa2a1f80..8654e393 100644
--- a/ios/Classes/OSFlutterLiveActivities.m
+++ b/ios/onesignal_flutter/Sources/onesignal_flutter/OSFlutterLiveActivities.m
@@ -25,10 +25,10 @@
* THE SOFTWARE.
*/
-#import "OSFlutterLiveActivities.h"
-#import "OSFlutterCategories.h"
-#import "OneSignalLiveActivities/OneSignalLiveActivities-Swift.h"
+#import "./include/onesignal_flutter/OSFlutterLiveActivities.h"
+#import "./include/onesignal_flutter/OSFlutterCategories.h"
#import
+#import
@implementation OSFlutterLiveActivities
+ (void)registerWithRegistrar:(NSObject *)registrar {
diff --git a/ios/Classes/OSFlutterLocation.m b/ios/onesignal_flutter/Sources/onesignal_flutter/OSFlutterLocation.m
similarity index 95%
rename from ios/Classes/OSFlutterLocation.m
rename to ios/onesignal_flutter/Sources/onesignal_flutter/OSFlutterLocation.m
index 1d0d46fd..ca088772 100644
--- a/ios/Classes/OSFlutterLocation.m
+++ b/ios/onesignal_flutter/Sources/onesignal_flutter/OSFlutterLocation.m
@@ -25,8 +25,8 @@
* THE SOFTWARE.
*/
-#import "OSFlutterLocation.h"
-#import "OSFlutterCategories.h"
+#import "./include/onesignal_flutter/OSFlutterLocation.h"
+#import "./include/onesignal_flutter/OSFlutterCategories.h"
#import
@implementation OSFlutterLocation
diff --git a/ios/Classes/OSFlutterNotifications.m b/ios/onesignal_flutter/Sources/onesignal_flutter/OSFlutterNotifications.m
similarity index 98%
rename from ios/Classes/OSFlutterNotifications.m
rename to ios/onesignal_flutter/Sources/onesignal_flutter/OSFlutterNotifications.m
index cbe71d01..027596f6 100644
--- a/ios/Classes/OSFlutterNotifications.m
+++ b/ios/onesignal_flutter/Sources/onesignal_flutter/OSFlutterNotifications.m
@@ -25,8 +25,8 @@
* THE SOFTWARE.
*/
-#import "OSFlutterNotifications.h"
-#import "OSFlutterCategories.h"
+#import "./include/onesignal_flutter/OSFlutterNotifications.h"
+#import "./include/onesignal_flutter/OSFlutterCategories.h"
#import
#import
diff --git a/ios/Classes/OSFlutterPushSubscription.m b/ios/onesignal_flutter/Sources/onesignal_flutter/OSFlutterPushSubscription.m
similarity index 96%
rename from ios/Classes/OSFlutterPushSubscription.m
rename to ios/onesignal_flutter/Sources/onesignal_flutter/OSFlutterPushSubscription.m
index 785a21a4..65090b89 100644
--- a/ios/Classes/OSFlutterPushSubscription.m
+++ b/ios/onesignal_flutter/Sources/onesignal_flutter/OSFlutterPushSubscription.m
@@ -25,8 +25,8 @@
* THE SOFTWARE.
*/
-#import "OSFlutterPushSubscription.h"
-#import "OSFlutterCategories.h"
+#import "./include/onesignal_flutter/OSFlutterPushSubscription.h"
+#import "./include/onesignal_flutter/OSFlutterCategories.h"
#import
#import
diff --git a/ios/Classes/OSFlutterSession.m b/ios/onesignal_flutter/Sources/onesignal_flutter/OSFlutterSession.m
similarity index 96%
rename from ios/Classes/OSFlutterSession.m
rename to ios/onesignal_flutter/Sources/onesignal_flutter/OSFlutterSession.m
index a5aa511a..524c17a4 100644
--- a/ios/Classes/OSFlutterSession.m
+++ b/ios/onesignal_flutter/Sources/onesignal_flutter/OSFlutterSession.m
@@ -25,8 +25,8 @@
* THE SOFTWARE.
*/
-#import "OSFlutterSession.h"
-#import "OSFlutterCategories.h"
+#import "./include/onesignal_flutter/OSFlutterSession.h"
+#import "./include/onesignal_flutter/OSFlutterCategories.h"
#import
@implementation OSFlutterSession
diff --git a/ios/Classes/OSFlutterUser.m b/ios/onesignal_flutter/Sources/onesignal_flutter/OSFlutterUser.m
similarity index 97%
rename from ios/Classes/OSFlutterUser.m
rename to ios/onesignal_flutter/Sources/onesignal_flutter/OSFlutterUser.m
index f5bd0463..a823ef2b 100644
--- a/ios/Classes/OSFlutterUser.m
+++ b/ios/onesignal_flutter/Sources/onesignal_flutter/OSFlutterUser.m
@@ -24,9 +24,9 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
-#import "OSFlutterUser.h"
-#import "OSFlutterCategories.h"
-#import "OSFlutterPushSubscription.h"
+#import "./include/onesignal_flutter/OSFlutterUser.h"
+#import "./include/onesignal_flutter/OSFlutterCategories.h"
+#import "./include/onesignal_flutter/OSFlutterPushSubscription.h"
#import
#import
diff --git a/ios/Classes/OneSignalPlugin.m b/ios/onesignal_flutter/Sources/onesignal_flutter/OneSignalPlugin.m
similarity index 88%
rename from ios/Classes/OneSignalPlugin.m
rename to ios/onesignal_flutter/Sources/onesignal_flutter/OneSignalPlugin.m
index 49369c2b..951463bb 100644
--- a/ios/Classes/OneSignalPlugin.m
+++ b/ios/onesignal_flutter/Sources/onesignal_flutter/OneSignalPlugin.m
@@ -25,15 +25,15 @@
* THE SOFTWARE.
*/
-#import "OneSignalPlugin.h"
-#import "OSFlutterCategories.h"
-#import "OSFlutterDebug.h"
-#import "OSFlutterInAppMessages.h"
-#import "OSFlutterLiveActivities.h"
-#import "OSFlutterLocation.h"
-#import "OSFlutterNotifications.h"
-#import "OSFlutterSession.h"
-#import "OSFlutterUser.h"
+#import "./include/onesignal_flutter/OneSignalPlugin.h"
+#import "./include/onesignal_flutter/OSFlutterCategories.h"
+#import "./include/onesignal_flutter/OSFlutterDebug.h"
+#import "./include/onesignal_flutter/OSFlutterInAppMessages.h"
+#import "./include/onesignal_flutter/OSFlutterLiveActivities.h"
+#import "./include/onesignal_flutter/OSFlutterLocation.h"
+#import "./include/onesignal_flutter/OSFlutterNotifications.h"
+#import "./include/onesignal_flutter/OSFlutterSession.h"
+#import "./include/onesignal_flutter/OSFlutterUser.h"
@interface OneSignalPlugin ()
diff --git a/ios/Classes/OSFlutterCategories.h b/ios/onesignal_flutter/Sources/onesignal_flutter/include/onesignal_flutter/OSFlutterCategories.h
similarity index 100%
rename from ios/Classes/OSFlutterCategories.h
rename to ios/onesignal_flutter/Sources/onesignal_flutter/include/onesignal_flutter/OSFlutterCategories.h
diff --git a/ios/Classes/OSFlutterDebug.h b/ios/onesignal_flutter/Sources/onesignal_flutter/include/onesignal_flutter/OSFlutterDebug.h
similarity index 100%
rename from ios/Classes/OSFlutterDebug.h
rename to ios/onesignal_flutter/Sources/onesignal_flutter/include/onesignal_flutter/OSFlutterDebug.h
diff --git a/ios/Classes/OSFlutterInAppMessages.h b/ios/onesignal_flutter/Sources/onesignal_flutter/include/onesignal_flutter/OSFlutterInAppMessages.h
similarity index 100%
rename from ios/Classes/OSFlutterInAppMessages.h
rename to ios/onesignal_flutter/Sources/onesignal_flutter/include/onesignal_flutter/OSFlutterInAppMessages.h
diff --git a/ios/Classes/OSFlutterLiveActivities.h b/ios/onesignal_flutter/Sources/onesignal_flutter/include/onesignal_flutter/OSFlutterLiveActivities.h
similarity index 100%
rename from ios/Classes/OSFlutterLiveActivities.h
rename to ios/onesignal_flutter/Sources/onesignal_flutter/include/onesignal_flutter/OSFlutterLiveActivities.h
diff --git a/ios/Classes/OSFlutterLocation.h b/ios/onesignal_flutter/Sources/onesignal_flutter/include/onesignal_flutter/OSFlutterLocation.h
similarity index 100%
rename from ios/Classes/OSFlutterLocation.h
rename to ios/onesignal_flutter/Sources/onesignal_flutter/include/onesignal_flutter/OSFlutterLocation.h
diff --git a/ios/Classes/OSFlutterNotifications.h b/ios/onesignal_flutter/Sources/onesignal_flutter/include/onesignal_flutter/OSFlutterNotifications.h
similarity index 100%
rename from ios/Classes/OSFlutterNotifications.h
rename to ios/onesignal_flutter/Sources/onesignal_flutter/include/onesignal_flutter/OSFlutterNotifications.h
diff --git a/ios/Classes/OSFlutterPushSubscription.h b/ios/onesignal_flutter/Sources/onesignal_flutter/include/onesignal_flutter/OSFlutterPushSubscription.h
similarity index 100%
rename from ios/Classes/OSFlutterPushSubscription.h
rename to ios/onesignal_flutter/Sources/onesignal_flutter/include/onesignal_flutter/OSFlutterPushSubscription.h
diff --git a/ios/Classes/OSFlutterSession.h b/ios/onesignal_flutter/Sources/onesignal_flutter/include/onesignal_flutter/OSFlutterSession.h
similarity index 100%
rename from ios/Classes/OSFlutterSession.h
rename to ios/onesignal_flutter/Sources/onesignal_flutter/include/onesignal_flutter/OSFlutterSession.h
diff --git a/ios/Classes/OSFlutterUser.h b/ios/onesignal_flutter/Sources/onesignal_flutter/include/onesignal_flutter/OSFlutterUser.h
similarity index 100%
rename from ios/Classes/OSFlutterUser.h
rename to ios/onesignal_flutter/Sources/onesignal_flutter/include/onesignal_flutter/OSFlutterUser.h
diff --git a/ios/Classes/OneSignalPlugin.h b/ios/onesignal_flutter/Sources/onesignal_flutter/include/onesignal_flutter/OneSignalPlugin.h
similarity index 100%
rename from ios/Classes/OneSignalPlugin.h
rename to ios/onesignal_flutter/Sources/onesignal_flutter/include/onesignal_flutter/OneSignalPlugin.h