gitextract_2xh8r30o/ ├── .github/ │ ├── CODEOWNERS │ ├── CONTRIBUTING.md │ ├── ISSUE_TEMPLATE.md │ ├── PULL_REQUEST_TEMPLATE.md │ └── workflows/ │ ├── check-cert.yml │ ├── check_framework_size.yml │ ├── ci.yml │ ├── deploy_docC.yml │ ├── merge.yml │ ├── pr-review.yml │ └── release.yml ├── .gitignore ├── .gitmodules ├── .ruby-version ├── .swift-format.json ├── .swiftpm/ │ └── xcode/ │ └── package.xcworkspace/ │ └── contents.xcworkspacedata ├── .whitesource ├── Airship/ │ ├── Airship.xcodeproj/ │ │ ├── project.pbxproj │ │ ├── project.xcworkspace/ │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata/ │ │ │ └── IDEWorkspaceChecks.plist │ │ └── xcshareddata/ │ │ └── xcschemes/ │ │ ├── AirshipAutomation.xcscheme │ │ ├── AirshipBasement.xcscheme │ │ ├── AirshipCore.xcscheme │ │ ├── AirshipDebug.xcscheme │ │ ├── AirshipFeatureFlags.xcscheme │ │ ├── AirshipMessageCenter.xcscheme │ │ ├── AirshipObjectiveC.xcscheme │ │ └── AirshipPreferenceCenter.xcscheme │ ├── AirshipAutomation/ │ │ ├── Info.plist │ │ ├── Resources/ │ │ │ ├── AirshipAutomation.xcdatamodeld/ │ │ │ │ ├── .xccurrentversion │ │ │ │ ├── AirshipAutomation 2.xcdatamodel/ │ │ │ │ │ └── contents │ │ │ │ ├── AirshipAutomation 3.xcdatamodel/ │ │ │ │ │ └── contents │ │ │ │ └── AirshipAutomation.xcdatamodel/ │ │ │ │ └── contents │ │ │ ├── UAAutomation.xcdatamodeld/ │ │ │ │ ├── .xccurrentversion │ │ │ │ ├── UAAutomation 10.xcdatamodel/ │ │ │ │ │ └── contents │ │ │ │ ├── UAAutomation 11.xcdatamodel/ │ │ │ │ │ └── contents │ │ │ │ ├── UAAutomation 12.xcdatamodel/ │ │ │ │ │ └── contents │ │ │ │ ├── UAAutomation 13.xcdatamodel/ │ │ │ │ │ └── contents │ │ │ │ ├── UAAutomation 2.xcdatamodel/ │ │ │ │ │ └── contents │ │ │ │ ├── UAAutomation 3.xcdatamodel/ │ │ │ │ │ └── contents │ │ │ │ ├── UAAutomation 4.xcdatamodel/ │ │ │ │ │ └── contents │ │ │ │ ├── UAAutomation 5.xcdatamodel/ │ │ │ │ │ └── contents │ │ │ │ ├── UAAutomation 6.xcdatamodel/ │ │ │ │ │ └── contents │ │ │ │ ├── UAAutomation 7.xcdatamodel/ │ │ │ │ │ └── contents │ │ │ │ ├── UAAutomation 8.xcdatamodel/ │ │ │ │ │ └── contents │ │ │ │ ├── UAAutomation 9.xcdatamodel/ │ │ │ │ │ └── contents │ │ │ │ └── UAAutomation.xcdatamodel/ │ │ │ │ └── contents │ │ │ └── UAFrequencyLimits.xcdatamodeld/ │ │ │ └── UAFrequencyLimits.xcdatamodel/ │ │ │ └── contents │ │ ├── Source/ │ │ │ ├── ActionAutomation/ │ │ │ │ ├── ActionAutomationExecutor.swift │ │ │ │ └── ActionAutomationPreparer.swift │ │ │ ├── Actions/ │ │ │ │ ├── CancelSchedulesAction.swift │ │ │ │ ├── LandingPageAction.swift │ │ │ │ └── ScheduleAction.swift │ │ │ ├── AirshipAutomationResources.swift │ │ │ ├── AudienceCheck/ │ │ │ │ ├── AdditionalAudienceCheckerApiClient.swift │ │ │ │ └── AdditionalAudienceCheckerResolver.swift │ │ │ ├── Automation/ │ │ │ │ ├── ApplicationMetrics.swift │ │ │ │ ├── AutomationAudience.swift │ │ │ │ ├── AutomationCompoundAudience.swift │ │ │ │ ├── AutomationDelay.swift │ │ │ │ ├── AutomationSchedule.swift │ │ │ │ ├── AutomationTrigger.swift │ │ │ │ ├── DeferredAutomationData.swift │ │ │ │ ├── Engine/ │ │ │ │ │ ├── AutomationDelayProcessor.swift │ │ │ │ │ ├── AutomationEngine.swift │ │ │ │ │ ├── AutomationEventFeed.swift │ │ │ │ │ ├── AutomationEventsHistory.swift │ │ │ │ │ ├── AutomationExecutor.swift │ │ │ │ │ ├── AutomationPreparer.swift │ │ │ │ │ ├── AutomationScheduleData.swift │ │ │ │ │ ├── AutomationScheduleState.swift │ │ │ │ │ ├── AutomationStore.swift │ │ │ │ │ ├── ExecutionWindowProcessor.swift │ │ │ │ │ ├── LegacyAutomationStore.swift │ │ │ │ │ ├── PreparedSchedule.swift │ │ │ │ │ ├── ScheduleExecuteResult.swift │ │ │ │ │ ├── SchedulePrepareResult.swift │ │ │ │ │ ├── ScheduleReadyResult.swift │ │ │ │ │ ├── TriggerProcessor/ │ │ │ │ │ │ ├── AutomationTriggerProcessor.swift │ │ │ │ │ │ ├── PreparedTrigger.swift │ │ │ │ │ │ └── TriggerData.swift │ │ │ │ │ └── TriggeringInfo.swift │ │ │ │ └── ExecutionWindow.swift │ │ │ ├── AutomationSDKModule.swift │ │ │ ├── InAppAutomation.swift │ │ │ ├── InAppAutomationComponent.swift │ │ │ ├── InAppAutomationUpdateStatus.swift │ │ │ ├── InAppMessage/ │ │ │ │ ├── Analytics/ │ │ │ │ │ ├── InAppDisplayImpressionRuleProvider.swift │ │ │ │ │ ├── InAppMessageAnalytics.swift │ │ │ │ │ └── InAppMessageAnalyticsFactory.swift │ │ │ │ ├── Assets/ │ │ │ │ │ ├── AirshipCachedAssets.swift │ │ │ │ │ ├── AssetCacheManager.swift │ │ │ │ │ ├── DefaultAssetDownloader.swift │ │ │ │ │ └── DefaultAssetFileManager.swift │ │ │ │ ├── Display Adapter/ │ │ │ │ │ ├── AirshipLayoutDisplayAdapter.swift │ │ │ │ │ ├── CustomDisplayAdapter.swift │ │ │ │ │ ├── CustomDisplayAdapterWrapper.swift │ │ │ │ │ ├── DisplayAdapter.swift │ │ │ │ │ ├── DisplayAdapterFactory.swift │ │ │ │ │ └── InAppMessageDisplayListener.swift │ │ │ │ ├── Display Coordinators/ │ │ │ │ │ ├── DefaultDisplayCoordinator.swift │ │ │ │ │ ├── DisplayCoordinator.swift │ │ │ │ │ ├── DisplayCoordinatorManager.swift │ │ │ │ │ └── ImmediateDisplayCoordinator.swift │ │ │ │ ├── InAppActionRunner.swift │ │ │ │ ├── InAppMessage.swift │ │ │ │ ├── InAppMessageAutomationExecutor.swift │ │ │ │ ├── InAppMessageAutomationPreparer.swift │ │ │ │ ├── InAppMessageColor.swift │ │ │ │ ├── InAppMessageDisplayContent.swift │ │ │ │ ├── InAppMessageDisplayDelegate.swift │ │ │ │ ├── InAppMessageEnvironment.swift │ │ │ │ ├── InAppMessageSceneDelegate.swift │ │ │ │ ├── InAppMessageSceneManager.swift │ │ │ │ ├── InAppMessageValidation.swift │ │ │ │ ├── InAppMessageViewDelegate.swift │ │ │ │ ├── InAppMessaging.swift │ │ │ │ ├── Info/ │ │ │ │ │ ├── InAppMessageButtonInfo.swift │ │ │ │ │ ├── InAppMessageButtonLayoutType.swift │ │ │ │ │ ├── InAppMessageMediaInfo.swift │ │ │ │ │ └── InAppMessageTextInfo.swift │ │ │ │ ├── Legacy/ │ │ │ │ │ ├── LegacyInAppAnalytics.swift │ │ │ │ │ ├── LegacyInAppMessage.swift │ │ │ │ │ └── LegacyInAppMessaging.swift │ │ │ │ └── View/ │ │ │ │ ├── BeveledLoadingView.swift │ │ │ │ ├── ButtonGroup.swift │ │ │ │ ├── CloseButton.swift │ │ │ │ ├── FullscreenView.swift │ │ │ │ ├── HTMLView.swift │ │ │ │ ├── InAppMessageBannerView.swift │ │ │ │ ├── InAppMessageExtensions.swift │ │ │ │ ├── InAppMessageHostingController.swift │ │ │ │ ├── InAppMessageModalView.swift │ │ │ │ ├── InAppMessageNativeBridgeExtension.swift │ │ │ │ ├── InAppMessageRootView.swift │ │ │ │ ├── InAppMessageViewUtils.swift │ │ │ │ ├── InAppMessageWebView.swift │ │ │ │ ├── MediaView.swift │ │ │ │ ├── TextView.swift │ │ │ │ └── Theme/ │ │ │ │ ├── InAppMessageTheme.swift │ │ │ │ ├── InAppMessageThemeAdditionalPadding.swift │ │ │ │ ├── InAppMessageThemeBanner.swift │ │ │ │ ├── InAppMessageThemeButton.swift │ │ │ │ ├── InAppMessageThemeFullscreen.swift │ │ │ │ ├── InAppMessageThemeHTML.swift │ │ │ │ ├── InAppMessageThemeManager.swift │ │ │ │ ├── InAppMessageThemeMedia.swift │ │ │ │ ├── InAppMessageThemeModal.swift │ │ │ │ ├── InAppMessageThemeShadow.swift │ │ │ │ ├── InAppMessageThemeText.swift │ │ │ │ └── ThemeExtensions.swift │ │ │ ├── Limits/ │ │ │ │ ├── FrequencyChecker.swift │ │ │ │ ├── FrequencyConstraint.swift │ │ │ │ ├── FrequencyLimitManager.swift │ │ │ │ ├── FrequencyLimitStore.swift │ │ │ │ └── Occurrence.swift │ │ │ ├── RemoteData/ │ │ │ │ ├── AutomationRemoteDataAccess.swift │ │ │ │ ├── AutomationRemoteDataSubscriber.swift │ │ │ │ ├── AutomationSourceInfoStore.swift │ │ │ │ └── DeferredScheduleResult.swift │ │ │ └── Utils/ │ │ │ ├── ActiveTimer.swift │ │ │ ├── AirshipAsyncSemaphore.swift │ │ │ ├── AutomationActionRunner.swift │ │ │ ├── RetryingQueue.swift │ │ │ └── ScheduleConditionsChangedNotifier.swift │ │ └── Tests/ │ │ ├── Action Automation/ │ │ │ ├── ActionAutomationExecutorTest.swift │ │ │ └── ActionAutomationPreparerTest.swift │ │ ├── Actions/ │ │ │ ├── CancelSchedulesActionTest.swift │ │ │ ├── LandingPageActionTest.swift │ │ │ └── ScheduleActionTest.swift │ │ ├── Automation/ │ │ │ ├── ApplicationMetricsTest.swift │ │ │ ├── AudienceCheck/ │ │ │ │ └── AdditionalAudienceCheckerResolverTest.swift │ │ │ ├── AutomationScheduleDataTest.swift │ │ │ ├── AutomationScheduleTest.swift │ │ │ └── Engine/ │ │ │ ├── AutomationDelayProcessorTest.swift │ │ │ ├── AutomationEngineTest.swift │ │ │ ├── AutomationEventFeedTest.swift │ │ │ ├── AutomationEventsHistoryTest.swift │ │ │ ├── AutomationExecutorTest.swift │ │ │ ├── AutomationPreparerTest.swift │ │ │ ├── AutomationStoreTest.swift │ │ │ ├── AutomationTriggerProcessorTest.swift │ │ │ ├── ExecutionWindowProcessorTest.swift │ │ │ ├── PreparedScheduleInfoTest.swift │ │ │ └── PreparedTriggerTest.swift │ │ ├── ExecutionWindowTest.swift │ │ ├── InAppMessage/ │ │ │ ├── Analytics/ │ │ │ │ ├── DefaultInAppDisplayImpressionRuleProviderTest.swift │ │ │ │ └── InAppMessageAnalyticsTest.swift │ │ │ ├── Assets/ │ │ │ │ ├── AssetCacheManagerTest.swift │ │ │ │ ├── DefaultAssetDownloaderTest.swift │ │ │ │ └── DefaultAssetFileManagerTest.swift │ │ │ ├── DefaultInAppActionRunnerTest.swift │ │ │ ├── Display Adapter/ │ │ │ │ ├── AirshipLayoutDisplayAdapterTest.swift │ │ │ │ ├── CustomDisplayAdapterWrapperTest.swift │ │ │ │ ├── DisplayAdapterFactoryTest.swift │ │ │ │ └── InAppMessageDisplayListenerTest.swift │ │ │ ├── Display Coordinators/ │ │ │ │ ├── DefaultDisplayCoordinatorTest.swift │ │ │ │ ├── DisplayCoordinatorManagerTest.swift │ │ │ │ └── ImmediateDisplayCoordinatorTest.swift │ │ │ ├── InAppMessageAutomationExecutorTest.swift │ │ │ ├── InAppMessageAutomationPreparerTest.swift │ │ │ ├── InAppMessageContentValidationTest.swift │ │ │ ├── InAppMessageTest.swift │ │ │ ├── InAppMessageThemeTest.swift │ │ │ └── View/ │ │ │ └── InAppMessageNativeBridgeExtensionTest.swift │ │ ├── InAppMessaging/ │ │ │ ├── Invalid-UAInAppMessageBannerStyle.plist │ │ │ ├── Invalid-UAInAppMessageFullScreenStyle.plist │ │ │ ├── Invalid-UAInAppMessageModalStyle.plist │ │ │ ├── Valid-UAInAppMessageBannerStyle.plist │ │ │ ├── Valid-UAInAppMessageFullScreenStyle.plist │ │ │ ├── Valid-UAInAppMessageHTMLStyle.plist │ │ │ └── Valid-UAInAppMessageModalStyle.plist │ │ ├── Legacy/ │ │ │ ├── LegacyInAppAnalyticsTest.swift │ │ │ ├── LegacyInAppMessageTest.swift │ │ │ └── LegacyInAppMessagingTest.swift │ │ ├── Limits/ │ │ │ └── FrequencyLimitManagerTest.swift │ │ ├── RemoteData/ │ │ │ ├── AutomationRemoteDataAccessTest.swift │ │ │ ├── AutomationRemoteDataSubscriberTest.swift │ │ │ └── AutomationSourceInfoStoreTest.swift │ │ ├── Test Utils/ │ │ │ ├── TestActionRunner.swift │ │ │ ├── TestActiveTimer.swift │ │ │ ├── TestAutomationEngine.swift │ │ │ ├── TestCachedAssets.swift │ │ │ ├── TestDisplayAdapter.swift │ │ │ ├── TestDisplayCoordinator.swift │ │ │ ├── TestFrequencyLimitsManager.swift │ │ │ ├── TestInAppMessageAnalytics.swift │ │ │ ├── TestInAppMessageAutomationExecutor.swift │ │ │ └── TestRemoteDataAccess.swift │ │ └── Utils/ │ │ ├── ActiveTimerTest.swift │ │ ├── AirshipAsyncSemaphoreTest.swift │ │ └── RetryingQueueTests.swift │ ├── AirshipBasement/ │ │ ├── Info.plist │ │ └── Source/ │ │ ├── AirshipLogHandler.swift │ │ ├── AirshipLogPrivacyLevel.swift │ │ ├── AirshipLogger.swift │ │ ├── DefaultLogHandler.swift │ │ └── LogLevel.swift │ ├── AirshipConfig.xcconfig │ ├── AirshipCore/ │ │ ├── Info.plist │ │ ├── Resources/ │ │ │ ├── PrivacyInfo.xcprivacy │ │ │ ├── UAEvents.xcdatamodeld/ │ │ │ │ └── UAEvents.xcdatamodel/ │ │ │ │ └── contents │ │ │ ├── UAMeteredUsage.xcdatamodeld/ │ │ │ │ └── UAMeteredUsage.xcdatamodel/ │ │ │ │ └── contents │ │ │ ├── UANativeBridge │ │ │ ├── UANotificationCategories.plist │ │ │ ├── UARemoteData.xcdatamodeld/ │ │ │ │ ├── .xccurrentversion │ │ │ │ ├── UARemoteData 2.xcdatamodel/ │ │ │ │ │ └── contents │ │ │ │ ├── UARemoteData 3.xcdatamodel/ │ │ │ │ │ └── contents │ │ │ │ ├── UARemoteData 4.xcdatamodel/ │ │ │ │ │ └── contents │ │ │ │ └── UARemoteData.xcdatamodel/ │ │ │ │ └── contents │ │ │ ├── UARemoteDataMappingV1toV4.xcmappingmodel/ │ │ │ │ └── xcmapping.xml │ │ │ ├── UARemoteDataMappingV2toV4.xcmappingmodel/ │ │ │ │ └── xcmapping.xml │ │ │ ├── UARemoteDataMappingV3toV4.xcmappingmodel/ │ │ │ │ └── xcmapping.xml │ │ │ ├── UAirshipCache.xcdatamodeld/ │ │ │ │ └── UAAirshipCache.xcdatamodel/ │ │ │ │ └── contents │ │ │ ├── af.lproj/ │ │ │ │ └── UrbanAirship.strings │ │ │ ├── am.lproj/ │ │ │ │ └── UrbanAirship.strings │ │ │ ├── ar.lproj/ │ │ │ │ └── UrbanAirship.strings │ │ │ ├── bg.lproj/ │ │ │ │ └── UrbanAirship.strings │ │ │ ├── ca.lproj/ │ │ │ │ └── UrbanAirship.strings │ │ │ ├── cs.lproj/ │ │ │ │ └── UrbanAirship.strings │ │ │ ├── da.lproj/ │ │ │ │ └── UrbanAirship.strings │ │ │ ├── de.lproj/ │ │ │ │ └── UrbanAirship.strings │ │ │ ├── el.lproj/ │ │ │ │ └── UrbanAirship.strings │ │ │ ├── en.lproj/ │ │ │ │ └── UrbanAirship.strings │ │ │ ├── es-419.lproj/ │ │ │ │ └── UrbanAirship.strings │ │ │ ├── es.lproj/ │ │ │ │ └── UrbanAirship.strings │ │ │ ├── et.lproj/ │ │ │ │ └── UrbanAirship.strings │ │ │ ├── fa.lproj/ │ │ │ │ └── UrbanAirship.strings │ │ │ ├── fi.lproj/ │ │ │ │ └── UrbanAirship.strings │ │ │ ├── fr-CA.lproj/ │ │ │ │ └── UrbanAirship.strings │ │ │ ├── fr.lproj/ │ │ │ │ └── UrbanAirship.strings │ │ │ ├── hi.lproj/ │ │ │ │ └── UrbanAirship.strings │ │ │ ├── hr.lproj/ │ │ │ │ └── UrbanAirship.strings │ │ │ ├── hu.lproj/ │ │ │ │ └── UrbanAirship.strings │ │ │ ├── id.lproj/ │ │ │ │ └── UrbanAirship.strings │ │ │ ├── it.lproj/ │ │ │ │ └── UrbanAirship.strings │ │ │ ├── iw.lproj/ │ │ │ │ └── UrbanAirship.strings │ │ │ ├── ja.lproj/ │ │ │ │ └── UrbanAirship.strings │ │ │ ├── ko.lproj/ │ │ │ │ └── UrbanAirship.strings │ │ │ ├── lt.lproj/ │ │ │ │ └── UrbanAirship.strings │ │ │ ├── lv.lproj/ │ │ │ │ └── UrbanAirship.strings │ │ │ ├── ms.lproj/ │ │ │ │ └── UrbanAirship.strings │ │ │ ├── nl.lproj/ │ │ │ │ └── UrbanAirship.strings │ │ │ ├── no.lproj/ │ │ │ │ └── UrbanAirship.strings │ │ │ ├── pl.lproj/ │ │ │ │ └── UrbanAirship.strings │ │ │ ├── pt-PT.lproj/ │ │ │ │ └── UrbanAirship.strings │ │ │ ├── pt.lproj/ │ │ │ │ └── UrbanAirship.strings │ │ │ ├── ro.lproj/ │ │ │ │ └── UrbanAirship.strings │ │ │ ├── ru.lproj/ │ │ │ │ └── UrbanAirship.strings │ │ │ ├── sk.lproj/ │ │ │ │ └── UrbanAirship.strings │ │ │ ├── sl.lproj/ │ │ │ │ └── UrbanAirship.strings │ │ │ ├── sr.lproj/ │ │ │ │ └── UrbanAirship.strings │ │ │ ├── sv.lproj/ │ │ │ │ └── UrbanAirship.strings │ │ │ ├── sw.lproj/ │ │ │ │ └── UrbanAirship.strings │ │ │ ├── th.lproj/ │ │ │ │ └── UrbanAirship.strings │ │ │ ├── tr.lproj/ │ │ │ │ └── UrbanAirship.strings │ │ │ ├── uk.lproj/ │ │ │ │ └── UrbanAirship.strings │ │ │ ├── vi.lproj/ │ │ │ │ └── UrbanAirship.strings │ │ │ ├── zh-HK.lproj/ │ │ │ │ └── UrbanAirship.strings │ │ │ ├── zh-Hans.lproj/ │ │ │ │ └── UrbanAirship.strings │ │ │ ├── zh-Hant.lproj/ │ │ │ │ └── UrbanAirship.strings │ │ │ └── zu.lproj/ │ │ │ └── UrbanAirship.strings │ │ ├── Source/ │ │ │ ├── APNSEnvironment.swift │ │ │ ├── APNSRegistrar.swift │ │ │ ├── APNSRegistrationResult.swift │ │ │ ├── AccountEventTemplate.swift │ │ │ ├── ActionArguments.swift │ │ │ ├── ActionRegistry.swift │ │ │ ├── ActionResult.swift │ │ │ ├── ActionRunner.swift │ │ │ ├── ActivityViewController.swift │ │ │ ├── AddCustomEventAction.swift │ │ │ ├── AddTagsAction.swift │ │ │ ├── Airship.swift │ │ │ ├── AirshipAction.swift │ │ │ ├── AirshipActorValue.swift │ │ │ ├── AirshipAnalytics.swift │ │ │ ├── AirshipAnalyticsFeed.swift │ │ │ ├── AirshipAppCredentials.swift │ │ │ ├── AirshipApptimizeIntegration.swift │ │ │ ├── AirshipAsyncChannel.swift │ │ │ ├── AirshipAsyncImage.swift │ │ │ ├── AirshipAuthorizedNotificationSettings.swift │ │ │ ├── AirshipBase64.swift │ │ │ ├── AirshipButton.swift │ │ │ ├── AirshipCache.swift │ │ │ ├── AirshipCancellable.swift │ │ │ ├── AirshipChannel.swift │ │ │ ├── AirshipCheckboxToggleStyle.swift │ │ │ ├── AirshipColor.swift │ │ │ ├── AirshipComponent.swift │ │ │ ├── AirshipConfig.swift │ │ │ ├── AirshipContact.swift │ │ │ ├── AirshipCoreDataPredicate.swift │ │ │ ├── AirshipCoreResources.swift │ │ │ ├── AirshipDate.swift │ │ │ ├── AirshipDateFormatter.swift │ │ │ ├── AirshipDevice.swift │ │ │ ├── AirshipDeviceAudienceResult.swift │ │ │ ├── AirshipDeviceID.swift │ │ │ ├── AirshipDisplayTarget.swift │ │ │ ├── AirshipEmbeddedInfo.swift │ │ │ ├── AirshipEmbeddedObserver.swift │ │ │ ├── AirshipEmbeddedSize.swift │ │ │ ├── AirshipEmbeddedView.swift │ │ │ ├── AirshipEmbeddedViewManager.swift │ │ │ ├── AirshipErrors.swift │ │ │ ├── AirshipEvent.swift │ │ │ ├── AirshipEventData.swift │ │ │ ├── AirshipEventType.swift │ │ │ ├── AirshipEvents.swift │ │ │ ├── AirshipFont.swift │ │ │ ├── AirshipImageLoader.swift │ │ │ ├── AirshipImageProvider.swift │ │ │ ├── AirshipInputValidator.swift │ │ │ ├── AirshipInstance.swift │ │ │ ├── AirshipIvyVersionMatcher.swift │ │ │ ├── AirshipJSON.swift │ │ │ ├── AirshipJSONUtils.swift │ │ │ ├── AirshipKeychainAccess.swift │ │ │ ├── AirshipLayout.swift │ │ │ ├── AirshipLocalizationUtils.swift │ │ │ ├── AirshipLock.swift │ │ │ ├── AirshipMeteredUsage.swift │ │ │ ├── AirshipMeteredUsageEvent.swift │ │ │ ├── AirshipNativePlatform.swift │ │ │ ├── AirshipNetworkChecker.swift │ │ │ ├── AirshipNotificationCenter.swift │ │ │ ├── AirshipNotificationStatus.swift │ │ │ ├── AirshipPasteboard.swift │ │ │ ├── AirshipPrivacyManager.swift │ │ │ ├── AirshipProgressView.swift │ │ │ ├── AirshipPush.swift │ │ │ ├── AirshipPushableComponent.swift │ │ │ ├── AirshipRequest.swift │ │ │ ├── AirshipRequestSession.swift │ │ │ ├── AirshipResources.swift │ │ │ ├── AirshipResponse.swift │ │ │ ├── AirshipSDKExtension.swift │ │ │ ├── AirshipSDKModule.swift │ │ │ ├── AirshipSceneController.swift │ │ │ ├── AirshipSceneManager.swift │ │ │ ├── AirshipSimpleLayoutView.swift │ │ │ ├── AirshipSimpleLayoutViewModel.swift │ │ │ ├── AirshipStateOverrides.swift │ │ │ ├── AirshipSwitchToggleStyle.swift │ │ │ ├── AirshipSwizzler.swift │ │ │ ├── AirshipTaskSleeper.swift │ │ │ ├── AirshipTimeCriteria.swift │ │ │ ├── AirshipTimerProtocol.swift │ │ │ ├── AirshipToggle.swift │ │ │ ├── AirshipUnsafeSendableWrapper.swift │ │ │ ├── AirshipUtils.swift │ │ │ ├── AirshipVersion.swift │ │ │ ├── AirshipViewSizeReader.swift │ │ │ ├── AirshipViewUtils.swift │ │ │ ├── AirshipWeakValueHolder.swift │ │ │ ├── AirshipWebview.swift │ │ │ ├── AirshipWindowFactory.swift │ │ │ ├── AirshipWorkManager.swift │ │ │ ├── AirshipWorkManagerProtocol.swift │ │ │ ├── AirshipWorkRequest.swift │ │ │ ├── AirshipWorkResult.swift │ │ │ ├── AirsihpTriggerContext.swift │ │ │ ├── AnonContactData.swift │ │ │ ├── AppIntegration.swift │ │ │ ├── AppRemoteDataProviderDelegate.swift │ │ │ ├── AppStateTracker.swift │ │ │ ├── AppStateTrackerAdapter.swift │ │ │ ├── ApplicationState.swift │ │ │ ├── ArishipCustomViewManager.swift │ │ │ ├── AssociatedIdentifiers.swift │ │ │ ├── AsyncSerialQueue.swift │ │ │ ├── AsyncStream.swift │ │ │ ├── Atomic.swift │ │ │ ├── AttributePendingMutations.swift │ │ │ ├── AttributeUpdate.swift │ │ │ ├── Attributes.swift │ │ │ ├── AttributesEditor.swift │ │ │ ├── AudienceDeviceInfoProvider.swift │ │ │ ├── AudienceHashSelector.swift │ │ │ ├── AudienceOverridesProvider.swift │ │ │ ├── AudienceUtils.swift │ │ │ ├── AuthToken.swift │ │ │ ├── AutoIntegration.swift │ │ │ ├── BackgroundColorViewModifier.swift │ │ │ ├── Badger.swift │ │ │ ├── BannerView.swift │ │ │ ├── BaseCachingRemoteDataProvider.swift │ │ │ ├── BasementImport.swift │ │ │ ├── BasicToggleLayout.swift │ │ │ ├── BlockAction.swift │ │ │ ├── BundleExtensions.swift │ │ │ ├── ButtonLayout.swift │ │ │ ├── ButtonState.swift │ │ │ ├── CachedList.swift │ │ │ ├── CachedValue.swift │ │ │ ├── CachingSMSValidatorAPIClient.swift │ │ │ ├── CancellableValueHolder.swift │ │ │ ├── ChallengeResolver.swift │ │ │ ├── ChannelAPIClient.swift │ │ │ ├── ChannelAudienceManager.swift │ │ │ ├── ChannelAuthTokenAPIClient.swift │ │ │ ├── ChannelAuthTokenProvider.swift │ │ │ ├── ChannelBulkUpdateAPIClient.swift │ │ │ ├── ChannelCapture.swift │ │ │ ├── ChannelRegistrar.swift │ │ │ ├── ChannelRegistrationPayload.swift │ │ │ ├── ChannelScope.swift │ │ │ ├── ChannelSubscriptionListProvider.swift │ │ │ ├── ChannelType.swift │ │ │ ├── Checkbox.swift │ │ │ ├── CheckboxController.swift │ │ │ ├── CheckboxState.swift │ │ │ ├── CheckboxToggleLayout.swift │ │ │ ├── CircularRegion.swift │ │ │ ├── CloudSite.swift │ │ │ ├── CompoundDeviceAudienceSelector.swift │ │ │ ├── ContactAPIClient.swift │ │ │ ├── ContactChannel.swift │ │ │ ├── ContactChannelsAPIClient.swift │ │ │ ├── ContactChannelsProvider.swift │ │ │ ├── ContactConflictEvent.swift │ │ │ ├── ContactManager.swift │ │ │ ├── ContactManagerProtocol.swift │ │ │ ├── ContactOperation.swift │ │ │ ├── ContactRemoteDataProviderDelegate.swift │ │ │ ├── ContactSubscriptionListClient.swift │ │ │ ├── Container.swift │ │ │ ├── CustomEvent.swift │ │ │ ├── CustomView.swift │ │ │ ├── DeepLinkAction.swift │ │ │ ├── DeepLinkDelegate.swift │ │ │ ├── DefaultAirshipAnalytics.swift │ │ │ ├── DefaultAirshipChannel.swift │ │ │ ├── DefaultAirshipContact.swift │ │ │ ├── DefaultAirshipPush.swift │ │ │ ├── DefaultAppIntegrationDelegate.swift │ │ │ ├── DeferredAPIClient.swift │ │ │ ├── DeferredResolver.swift │ │ │ ├── DeviceAudienceChecker.swift │ │ │ ├── DeviceAudienceSelector.swift │ │ │ ├── DeviceTagSelector.swift │ │ │ ├── Dispatcher.swift │ │ │ ├── EmailRegistrationOptions.swift │ │ │ ├── EmbeddedView.swift │ │ │ ├── EmbeddedViewSelector.swift │ │ │ ├── EmptyAction.swift │ │ │ ├── EmptyView.swift │ │ │ ├── EnableBehaviorModifiers.swift │ │ │ ├── EnableFeatureAction.swift │ │ │ ├── EnvironmentValues.swift │ │ │ ├── EventAPIClient.swift │ │ │ ├── EventHandlerViewModifier.swift │ │ │ ├── EventManager.swift │ │ │ ├── EventStore.swift │ │ │ ├── EventUploadScheduler.swift │ │ │ ├── EventUploadTuningInfo.swift │ │ │ ├── EventUtils.swift │ │ │ ├── Experiment.swift │ │ │ ├── ExperimentDataProvider.swift │ │ │ ├── ExperimentManager.swift │ │ │ ├── ExternalURLProcessor.swift │ │ │ ├── FarmHashFingerprint64.swift │ │ │ ├── FetchDeviceInfoAction.swift │ │ │ ├── FontViewModifier.swift │ │ │ ├── FormController.swift │ │ │ ├── FormInputViewModifier.swift │ │ │ ├── HashChecker.swift │ │ │ ├── IconView.swift │ │ │ ├── Icons.swift │ │ │ ├── Image.swift │ │ │ ├── ImageButton.swift │ │ │ ├── JSONMatcher.swift │ │ │ ├── JSONPredicate.swift │ │ │ ├── JSONValueMatcher.swift │ │ │ ├── JSONValueMatcherPredicates.swift │ │ │ ├── JSONValueTransformer.swift │ │ │ ├── JavaScriptCommand.swift │ │ │ ├── JavaScriptCommandDelegate.swift │ │ │ ├── JavaScriptEnvironment.swift │ │ │ ├── Label.swift │ │ │ ├── LabelButton.swift │ │ │ ├── LayoutState.swift │ │ │ ├── LinearLayout.swift │ │ │ ├── LiveActivity.swift │ │ │ ├── LiveActivityRegistrationStatus.swift │ │ │ ├── LiveActivityRegistrationStatusUpdates.swift │ │ │ ├── LiveActivityRegistry.swift │ │ │ ├── LiveActivityRestorer.swift │ │ │ ├── LiveActivityUpdate.swift │ │ │ ├── LocaleManager.swift │ │ │ ├── Media.swift │ │ │ ├── MediaEventTemplate.swift │ │ │ ├── MessageCriteria.swift │ │ │ ├── MessageDisplayHistory.swift │ │ │ ├── MeteredUsageAPIClient.swift │ │ │ ├── MeteredUsageStore.swift │ │ │ ├── ModalView.swift │ │ │ ├── ModifyAttributesAction.swift │ │ │ ├── ModifyTagsAction.swift │ │ │ ├── ModuleLoader.swift │ │ │ ├── NativeBridge.swift │ │ │ ├── NativeBridgeActionHandler.swift │ │ │ ├── NativeBridgeActionRunner.swift │ │ │ ├── NativeBridgeDelegate.swift │ │ │ ├── NativeBridgeExtensionDelegate.swift │ │ │ ├── NativeVideoPlayer.swift │ │ │ ├── NotificationCategories.swift │ │ │ ├── NotificationPermissionDelegate.swift │ │ │ ├── NotificationRegistrar.swift │ │ │ ├── NotificationRegistrationResult.swift │ │ │ ├── OpenExternalURLAction.swift │ │ │ ├── OpenRegistrationOptions.swift │ │ │ ├── Pager.swift │ │ │ ├── PagerController.swift │ │ │ ├── PagerGestureMap.swift │ │ │ ├── PagerIndicator.swift │ │ │ ├── PagerState.swift │ │ │ ├── PagerSwipeDirection.swift │ │ │ ├── PagerUtils.swift │ │ │ ├── PasteboardAction.swift │ │ │ ├── Permission.swift │ │ │ ├── PermissionDelegate.swift │ │ │ ├── PermissionPrompter.swift │ │ │ ├── PermissionStatus.swift │ │ │ ├── PermissionsManager.swift │ │ │ ├── PreferenceDataStore.swift │ │ │ ├── PromptPermissionAction.swift │ │ │ ├── ProximityRegion.swift │ │ │ ├── PushNotificationDelegate.swift │ │ │ ├── RadioInput.swift │ │ │ ├── RadioInputController.swift │ │ │ ├── RadioInputState.swift │ │ │ ├── RadioInputToggleLayout.swift │ │ │ ├── RateAppAction.swift │ │ │ ├── RegionEvent.swift │ │ │ ├── RegistrationDelegate.swift │ │ │ ├── RemoteConfig.swift │ │ │ ├── RemoteConfigCache.swift │ │ │ ├── RemoteConfigManager.swift │ │ │ ├── RemoteData.swift │ │ │ ├── RemoteDataAPIClient.swift │ │ │ ├── RemoteDataInfo.swift │ │ │ ├── RemoteDataPayload.swift │ │ │ ├── RemoteDataProtocol.swift │ │ │ ├── RemoteDataProvider.swift │ │ │ ├── RemoteDataProviderDelegate.swift │ │ │ ├── RemoteDataProviderProtocol.swift │ │ │ ├── RemoteDataSource.swift │ │ │ ├── RemoteDataSourceStatus.swift │ │ │ ├── RemoteDataStore.swift │ │ │ ├── RemoteDataStorePayload.swift │ │ │ ├── RemoteDataURLFactory.swift │ │ │ ├── RemoveTagsAction.swift │ │ │ ├── RetailEventTemplate.swift │ │ │ ├── RootView.swift │ │ │ ├── RuntimeConfig.swift │ │ │ ├── SMSRegistrationOptions.swift │ │ │ ├── SMSValidatorAPIClient.swift │ │ │ ├── ScopedSubscriptionListEdit.swift │ │ │ ├── ScopedSubscriptionListEditor.swift │ │ │ ├── ScopedSubscriptionListUpdate.swift │ │ │ ├── Score.swift │ │ │ ├── ScoreController.swift │ │ │ ├── ScoreState.swift │ │ │ ├── ScoreToggleLayout.swift │ │ │ ├── ScrollLayout.swift │ │ │ ├── SearchEventTemplate.swift │ │ │ ├── SerialQueue.swift │ │ │ ├── SessionEvent.swift │ │ │ ├── SessionEventFactory.swift │ │ │ ├── SessionState.swift │ │ │ ├── SessionTracker.swift │ │ │ ├── Shapes.swift │ │ │ ├── ShareAction.swift │ │ │ ├── SmsLocalePicker.swift │ │ │ ├── StackImageButton.swift │ │ │ ├── StateController.swift │ │ │ ├── StateSubscriptionsModifier.swift │ │ │ ├── StoryIndicator.swift │ │ │ ├── SubjectExtension.swift │ │ │ ├── SubscriptionListAPIClient.swift │ │ │ ├── SubscriptionListAction.swift │ │ │ ├── SubscriptionListEdit.swift │ │ │ ├── SubscriptionListEditor.swift │ │ │ ├── SubscriptionListProvider.swift │ │ │ ├── SubscriptionListUpdate.swift │ │ │ ├── TagActionMutation.swift │ │ │ ├── TagEditor.swift │ │ │ ├── TagGroupMutations.swift │ │ │ ├── TagGroupUpdate.swift │ │ │ ├── TagGroupsEditor.swift │ │ │ ├── TagsActionArgs.swift │ │ │ ├── TextInput.swift │ │ │ ├── Thomas.swift │ │ │ ├── ThomasAccessibilityAction.swift │ │ │ ├── ThomasAccessibleInfo.swift │ │ │ ├── ThomasActionsPayload.swift │ │ │ ├── ThomasAssociatedLabelResolver.swift │ │ │ ├── ThomasAsyncImage.swift │ │ │ ├── ThomasAttributeName.swift │ │ │ ├── ThomasAttributeValue.swift │ │ │ ├── ThomasAutomatedAccessibilityAction.swift │ │ │ ├── ThomasAutomatedAction.swift │ │ │ ├── ThomasBorder.swift │ │ │ ├── ThomasButtonClickBehavior.swift │ │ │ ├── ThomasButtonTapEffect.swift │ │ │ ├── ThomasColor.swift │ │ │ ├── ThomasConstants.swift │ │ │ ├── ThomasConstrainedSize.swift │ │ │ ├── ThomasDelegate.swift │ │ │ ├── ThomasDirection.swift │ │ │ ├── ThomasDisplayListener.swift │ │ │ ├── ThomasEmailRegistrationOptions.swift │ │ │ ├── ThomasEnableBehavior.swift │ │ │ ├── ThomasEnvironment.swift │ │ │ ├── ThomasEvent.swift │ │ │ ├── ThomasEventHandler.swift │ │ │ ├── ThomasFormDataCollector.swift │ │ │ ├── ThomasFormField.swift │ │ │ ├── ThomasFormFieldProcessor.swift │ │ │ ├── ThomasFormPayloadGenerator.swift │ │ │ ├── ThomasFormResult.swift │ │ │ ├── ThomasFormState.swift │ │ │ ├── ThomasFormStatus.swift │ │ │ ├── ThomasFormSubmitBehavior.swift │ │ │ ├── ThomasFormValidationMode.swift │ │ │ ├── ThomasIcon.swift │ │ │ ├── ThomasLayoutButtonTapEvent.swift │ │ │ ├── ThomasLayoutContext.swift │ │ │ ├── ThomasLayoutDisplayEvent.swift │ │ │ ├── ThomasLayoutEvent.swift │ │ │ ├── ThomasLayoutEventContext.swift │ │ │ ├── ThomasLayoutEventMessageID.swift │ │ │ ├── ThomasLayoutEventRecorder.swift │ │ │ ├── ThomasLayoutEventSource.swift │ │ │ ├── ThomasLayoutFormDisplayEvent.swift │ │ │ ├── ThomasLayoutFormResultEvent.swift │ │ │ ├── ThomasLayoutGestureEvent.swift │ │ │ ├── ThomasLayoutPageActionEvent.swift │ │ │ ├── ThomasLayoutPageSwipeEvent.swift │ │ │ ├── ThomasLayoutPageViewEvent.swift │ │ │ ├── ThomasLayoutPagerCompletedEvent.swift │ │ │ ├── ThomasLayoutPagerSummaryEvent.swift │ │ │ ├── ThomasLayoutPermissionResultEvent.swift │ │ │ ├── ThomasLayoutResolutionEvent.swift │ │ │ ├── ThomasMargin.swift │ │ │ ├── ThomasMarkdownOptions.swift │ │ │ ├── ThomasMediaFit.swift │ │ │ ├── ThomasOrientation.swift │ │ │ ├── ThomasPagerControllerBranching.swift │ │ │ ├── ThomasPagerTracker.swift │ │ │ ├── ThomasPlatform.swift │ │ │ ├── ThomasPosition.swift │ │ │ ├── ThomasPresentationInfo.swift │ │ │ ├── ThomasPropertyOverride.swift │ │ │ ├── ThomasSerializable.swift │ │ │ ├── ThomasShadow.swift │ │ │ ├── ThomasShapeInfo.swift │ │ │ ├── ThomasSize.swift │ │ │ ├── ThomasSizeConstraint.swift │ │ │ ├── ThomasSmsLocale.swift │ │ │ ├── ThomasState.swift │ │ │ ├── ThomasStateAction.swift │ │ │ ├── ThomasStateStorage.swift │ │ │ ├── ThomasStateTrigger.swift │ │ │ ├── ThomasTextAppearance.swift │ │ │ ├── ThomasToggleStyleInfo.swift │ │ │ ├── ThomasValidationInfo.swift │ │ │ ├── ThomasViewController.swift │ │ │ ├── ThomasViewInfo.swift │ │ │ ├── ThomasViewedPageInfo.swift │ │ │ ├── ThomasVisibilityInfo.swift │ │ │ ├── ThomasWindowSize.swift │ │ │ ├── ToggleLayout.swift │ │ │ ├── TouchViewModifier.swift │ │ │ ├── UAAppIntegrationDelegate.swift │ │ │ ├── UACoreData.swift │ │ │ ├── UARemoteDataMapping.swift │ │ │ ├── UNNotificationRegistrar.swift │ │ │ ├── URLAllowList.swift │ │ │ ├── UrlInfo.swift │ │ │ ├── ValidatableHelper.swift │ │ │ ├── VideoController.swift │ │ │ ├── VideoGroupState.swift │ │ │ ├── VideoMediaNativeView.swift │ │ │ ├── VideoMediaWebView.swift │ │ │ ├── VideoState.swift │ │ │ ├── ViewConstraints.swift │ │ │ ├── ViewExtensions.swift │ │ │ ├── ViewFactory.swift │ │ │ ├── VisibilityViewModifier.swift │ │ │ ├── WorkBackgroundTasks.swift │ │ │ ├── WorkConditionsMonitor.swift │ │ │ ├── WorkRateLimiterActor.swift │ │ │ ├── Worker.swift │ │ │ └── WrappingLayout.swift │ │ └── Tests/ │ │ ├── APNSEnvironmentTest.swift │ │ ├── AccountEventTemplateTest.swift │ │ ├── ActionArgumentsTest.swift │ │ ├── ActionRegistryTest.swift │ │ ├── AddCustomEventActionTest.swift │ │ ├── AddTagsActionTest.swift │ │ ├── AirshipAnalyticFeedTest.swift │ │ ├── AirshipAsyncChannelTest.swift │ │ ├── AirshipBase64Test.swift │ │ ├── AirshipBaseTest.swift │ │ ├── AirshipCacheTest.swift │ │ ├── AirshipColorTests.swift │ │ ├── AirshipConfigTest.swift │ │ ├── AirshipContactTest.swift │ │ ├── AirshipDateFormatterTest.swift │ │ ├── AirshipDeviceIDTest.swift │ │ ├── AirshipEventsTest.swift │ │ ├── AirshipHTTPResponseTest.swift │ │ ├── AirshipIvyVersionMatcherTest.swift │ │ ├── AirshipJSONTest.swift │ │ ├── AirshipJSONUtilsTest.swift │ │ ├── AirshipLocaleManagerTest.swift │ │ ├── AirshipLocalizationUtilsTest.swift │ │ ├── AirshipMeteredUsageTest.swift │ │ ├── AirshipPrivacyManagerTest.swift │ │ ├── AirshipPushTest.swift │ │ ├── AirshipTest.swift │ │ ├── AirshipURLAllowListTest.swift │ │ ├── AirshipUtilsTest.swift │ │ ├── AishipFontTests.swift │ │ ├── Analytics/ │ │ │ ├── Events/ │ │ │ │ ├── ThomasLayoutButtonTapEventTest.swift │ │ │ │ ├── ThomasLayoutDisplayEventTest.swift │ │ │ │ ├── ThomasLayoutEventTestUtils.swift │ │ │ │ ├── ThomasLayoutFormDisplayEventTest.swift │ │ │ │ ├── ThomasLayoutFormResultEventTest.swift │ │ │ │ ├── ThomasLayoutGestureEventTest.swift │ │ │ │ ├── ThomasLayoutPageActionEventTest.swift │ │ │ │ ├── ThomasLayoutPageSwipeEventAction.swift │ │ │ │ ├── ThomasLayoutPageViewEventTest.swift │ │ │ │ ├── ThomasLayoutPagerCompletedEventTest.swift │ │ │ │ ├── ThomasLayoutPagerSummaryEventTest.swift │ │ │ │ ├── ThomasLayoutPermissionResultEventTest.swift │ │ │ │ └── ThomasLayoutResolutionEventTest.swift │ │ │ ├── ThomasDisplayListenerTest.swift │ │ │ ├── ThomasLayoutEventContextTest.swift │ │ │ ├── ThomasLayoutEventMessageIDTest.swift │ │ │ └── ThomasLayoutEventRecorderTest.swift │ │ ├── AnalyticsTest.swift │ │ ├── AppIntegrationTests.swift │ │ ├── AppRemoteDataProviderDelegateTest.swift │ │ ├── AppStateTrackerTest.swift │ │ ├── AssociatedIdentifiersTest.swift │ │ ├── AttributeEditorTest.swift │ │ ├── AttributeUpdateTest.swift │ │ ├── AudienceHashSelectorTest.swift │ │ ├── AudienceUtilsTest.swift │ │ ├── CachedListTest.swift │ │ ├── CachedValueTest.swift │ │ ├── ChallengeResolverTest.swift │ │ ├── ChannelAPIClientTest.swift │ │ ├── ChannelAudienceManagerTest.swift │ │ ├── ChannelAuthTokenAPIClientTest.swift │ │ ├── ChannelAuthTokenProviderTest.swift │ │ ├── ChannelBulkUpdateAPIClientTest.swift │ │ ├── ChannelCaptureTest.swift │ │ ├── ChannelRegistrarTest.swift │ │ ├── ChannelRegistrationPayloadTest.swift │ │ ├── ChannelTest.swift │ │ ├── CircularRegionTest.swift │ │ ├── CompoundDeviceAudienceSelectorTest.swift │ │ ├── ContactAPIClientTest.swift │ │ ├── ContactChannelsProviderTest.swift │ │ ├── ContactManagerTest.swift │ │ ├── ContactOperationTest.swift │ │ ├── ContactRemoteDataProviderTest.swift │ │ ├── ContactSubscriptionListAPIClientTest.swift │ │ ├── CustomEventTest.swift │ │ ├── CustomNotificationCategories.plist │ │ ├── DeepLinkActionTest.swift │ │ ├── DeepLinkHandlerTest.swift │ │ ├── DefaultAirshipRequestSessionTest.swift │ │ ├── DefaultAppIntegrationDelegateTest.swift │ │ ├── DefaultTaskSleeperTest.swift │ │ ├── DeferredAPIClientTest.swift │ │ ├── DeferredResolverTest.swift │ │ ├── DeviceAudienceSelectorTest.swift │ │ ├── DeviceTagSelectorTest.swift │ │ ├── EnableFeatureActionTest.swift │ │ ├── Environment/ │ │ │ ├── ThomasEnvironmentTest.swift │ │ │ ├── ThomasFormDataCollectorTest.swift │ │ │ ├── ThomasFormFieldProcessorTest.swift │ │ │ ├── ThomasFormFieldTest.swift │ │ │ ├── ThomasFormPayloadGeneratorTest.swift │ │ │ ├── ThomasFormStateTest.swift │ │ │ ├── ThomasPagerTrackerTest.swift │ │ │ └── ThomasStateTest.swift │ │ ├── EventAPIClientTest.swift │ │ ├── EventManagerTest.swift │ │ ├── EventSchedulerTest.swift │ │ ├── EventStoreTest.swift │ │ ├── EventTestUtils.swift │ │ ├── ExperimentManagerTest.swift │ │ ├── ExperimentTest.swift │ │ ├── FarmHashFingerprint64Test.swift │ │ ├── FetchDeviceInfoActionTest.swift │ │ ├── HashCheckerTest.swift │ │ ├── Info.plist │ │ ├── Input Validation/ │ │ │ ├── AirshipInputValidationTest.swift │ │ │ ├── CachingSMSValidatorAPIClientTest.swift │ │ │ ├── SMSValidatorAPIClientTest.swift │ │ │ └── TestSMSValidatorAPIClient.swift │ │ ├── JSONPredicateTest.swift │ │ ├── JavaScriptCommandTest.swift │ │ ├── JsonMatcherTest.swift │ │ ├── JsonValueMatcherTest.swift │ │ ├── LayoutModelsTest.swift │ │ ├── LiveActivityRegistryTest.swift │ │ ├── MediaEventTemplateTest.swift │ │ ├── MeteredUsageApiClientTest.swift │ │ ├── ModifyAttributesActionTest.swift │ │ ├── ModifyTagsActionTest.swift │ │ ├── NativeBridgeActionHandlerTest.swift │ │ ├── NotificationCategoriesTest.swift │ │ ├── OpenExternalURLActionTest.swift │ │ ├── PagerControllerTest.swift │ │ ├── PasteboardActionTest.swift │ │ ├── PermissionsManagerTests.swift │ │ ├── PreferenceDataStoreTest.swift │ │ ├── PromptPermissionActionTest.swift │ │ ├── ProximityRegionTest.swift │ │ ├── RateAppActionTest.swift │ │ ├── RegionEventTest.swift │ │ ├── RemoteConfigManagerTest.swift │ │ ├── RemoteConfigTest.swift │ │ ├── RemoteDataAPIClientTest.swift │ │ ├── RemoteDataProviderTest.swift │ │ ├── RemoteDataStoreTest.swift │ │ ├── RemoteDataTest.swift │ │ ├── RemoteDataTestUtils.swift │ │ ├── RemoteDataURLFactoryTest.swift │ │ ├── RemoveTagsActionTest.swift │ │ ├── RetailEventTemplateTest.swift │ │ ├── RuntimeConfig.swift │ │ ├── RuntimeConfigTest.swift │ │ ├── SearchEventTemplateTest.swift │ │ ├── SessionTrackerTest.swift │ │ ├── ShareActionTest.swift │ │ ├── SubscriptionListAPIClientTest.swift │ │ ├── SubscriptionListActionTest.swift │ │ ├── Support/ │ │ │ ├── AirshipConfig-Valid-Legacy.plist │ │ │ ├── AirshipConfig-Valid.plist │ │ │ ├── TestAppStateTracker.swift │ │ │ ├── airship.der │ │ │ ├── development-embedded.mobileprovision │ │ │ ├── production-embedded.mobileprovision │ │ │ └── testMCColorsCatalog.xcassets/ │ │ │ ├── Contents.json │ │ │ └── seapunkTestColor.colorset/ │ │ │ └── Contents.json │ │ ├── TagEditorTest.swift │ │ ├── TagGroupsEditorTest.swift │ │ ├── TestAirshipInstance.swift │ │ ├── TestAirshipRequestSession.swift │ │ ├── TestAnalytics.swift │ │ ├── TestAudienceChecker.swift │ │ ├── TestCache.swift │ │ ├── TestChannel.swift │ │ ├── TestChannelAudienceManager.swift │ │ ├── TestChannelAuthTokenAPIClient.swift │ │ ├── TestChannelBulkUpdateAPIClient.swift │ │ ├── TestChannelRegistrar.swift │ │ ├── TestContact.swift │ │ ├── TestContactAPIClient.swift │ │ ├── TestContactSubscriptionListAPIClient.swift │ │ ├── TestDate.swift │ │ ├── TestDeferredResolver.swift │ │ ├── TestDispatcher.swift │ │ ├── TestExperimentDataProvider.swift │ │ ├── TestKeychainAccess.swift │ │ ├── TestLocaleManager.swift │ │ ├── TestNetworkMonitor.swift │ │ ├── TestPermissionPrompter.swift │ │ ├── TestPrivacyManager.swift │ │ ├── TestPush.swift │ │ ├── TestRemoteData.swift │ │ ├── TestRemoteDataAPIClient.swift │ │ ├── TestSubscriptionListAPIClient.swift │ │ ├── TestThomasLayoutEvent.swift │ │ ├── TestURLAllowList.swift │ │ ├── TestURLOpener.swift │ │ ├── TestWorkManager.swift │ │ ├── TestWorkRateLimiterActor.swift │ │ ├── ThomasPresentationModelCodingTest.swift │ │ ├── ThomasValidationTests.swift │ │ ├── ThomasViewModelTest.swift │ │ ├── Types/ │ │ │ ├── PagerDisableSwipeSelectorTest.swift │ │ │ └── ThomasEmailRegistrationOptionsTest.swift │ │ ├── VideoMediaWebViewTests.swift │ │ └── WorkManager/ │ │ └── WorkRateLimiterTests.swift │ ├── AirshipDebug/ │ │ ├── Info.plist │ │ ├── Resources/ │ │ │ ├── AirshipDebugEventData.xcdatamodeld/ │ │ │ │ └── AirshipEventData.xcdatamodel/ │ │ │ │ └── contents │ │ │ └── AirshipDebugPushData.xcdatamodeld/ │ │ │ └── AirshipDebugPushData.xcdatamodel/ │ │ │ └── contents │ │ └── Source/ │ │ ├── AirshipDebugManager.swift │ │ ├── AirshipDebugResources.swift │ │ ├── DebugComponent.swift │ │ ├── DebugSDKModule.swift │ │ ├── Events/ │ │ │ ├── AirshipEvent.swift │ │ │ ├── EventData.swift │ │ │ └── EventDataManager.swift │ │ ├── Push/ │ │ │ ├── PushData+CoreDataClass.swift │ │ │ ├── PushData+CoreDataProperties.swift │ │ │ ├── PushDataManager.swift │ │ │ └── PushNotification.swift │ │ ├── ShakeUtils.swift │ │ └── View/ │ │ ├── AirshipDebugContentView.swift │ │ ├── AirshipDebugRoute.swift │ │ ├── AirshipDebugView.swift │ │ ├── AirshipoDebugTriggers.swift │ │ ├── Analytics/ │ │ │ ├── AirshipDebugAddEventView.swift │ │ │ ├── AirshipDebugAnalyticIdentifierEditorView.swift │ │ │ ├── AirshipDebugAnalyticsView.swift │ │ │ ├── AirshipDebugEventDetailsView.swift │ │ │ └── AirshipDebugEventsView.swift │ │ ├── AppInfo/ │ │ │ └── AirshipDebugAppInfoView.swift │ │ ├── Automations/ │ │ │ ├── AirshipDebugAutomationsView.swift │ │ │ ├── AirshipDebugExperimentsView.swift │ │ │ └── AirshipDebugInAppExperiencesView.swift │ │ ├── Channel/ │ │ │ ├── AirshipDebugChannelSubscriptionsView.swift │ │ │ ├── AirshipDebugChannelTagView.swift │ │ │ └── AirshipDebugChannelView.swift │ │ ├── Common/ │ │ │ ├── AirshipDebugAddPropertyView.swift │ │ │ ├── AirshipDebugAddStringPropertyView.swift │ │ │ ├── AirshipDebugAttributesEditorView.swift │ │ │ ├── AirshipDebugAudienceSubject.swift │ │ │ ├── AirshipDebugExtensions.swift │ │ │ ├── AirshipDebugTagGroupsEditorView.swift │ │ │ ├── AirshipJSONDetailsView.swift │ │ │ ├── AirshipJSONView.swift │ │ │ ├── AirshipToast.swift │ │ │ └── Extensions.swift │ │ ├── Contact/ │ │ │ ├── AirshipDebugAddEmailChannelView.swift │ │ │ ├── AirshipDebugAddOpenChannelView.swift │ │ │ ├── AirshipDebugAddSMSChannelView.swift │ │ │ ├── AirshipDebugContactSubscriptionEditorView.swift │ │ │ ├── AirshipDebugContactView.swift │ │ │ └── AirshipDebugNamedUserView.swift │ │ ├── FeatureFlags/ │ │ │ ├── AirshipDebugFeatureFlagDetailsView.swift │ │ │ └── AirshipDebugFeatureFlagView.swift │ │ ├── PreferenceCenter/ │ │ │ ├── AirshipDebugPreferencCenterItemView.swift │ │ │ └── AirshipDebugPreferenceCenterView.swift │ │ ├── PrivacyManager/ │ │ │ └── AirshipDebugPrivacyManagerView.swift │ │ ├── Push/ │ │ │ ├── AirshipDebugPushDetailsView.swift │ │ │ ├── AirshipDebugPushView.swift │ │ │ └── AirshipDebugReceivedPushView.swift │ │ └── TvOSComponents/ │ │ ├── TVDatePicker.swift │ │ └── TVSlider.swift │ ├── AirshipFeatureFlags/ │ │ ├── Info.plist │ │ ├── Source/ │ │ │ ├── AirshipFeatureFlagsSDKModule.swift │ │ │ ├── DeferredFlagResolver.swift │ │ │ ├── FeatureFlag.swift │ │ │ ├── FeatureFlagAnalytics.swift │ │ │ ├── FeatureFlagComponent.swift │ │ │ ├── FeatureFlagManager.swift │ │ │ ├── FeatureFlagManagerProtocol.swift │ │ │ ├── FeatureFlagPayload.swift │ │ │ ├── FeatureFlagResultCache.swift │ │ │ ├── FeatureFlagUpdateStatus.swift │ │ │ └── FeatureFlagsRemoteDataAccess.swift │ │ └── Tests/ │ │ ├── FeatureFlagAnalyticsTest.swift │ │ ├── FeatureFlagDeferredResolverTest.swift │ │ ├── FeatureFlagInfoTest.swift │ │ ├── FeatureFlagManagerTest.swift │ │ ├── FeatureFlagRemoteDataAccessTest.swift │ │ ├── FeatureFlagResultCacheTest.swift │ │ └── FeatureFlagVariablesTest.swift │ ├── AirshipMessageCenter/ │ │ ├── Info.plist │ │ ├── Resources/ │ │ │ ├── TestAssets.xcassets/ │ │ │ │ ├── Contents.json │ │ │ │ └── testNamedColor.colorset/ │ │ │ │ └── Contents.json │ │ │ ├── UAInbox.xcdatamodeld/ │ │ │ │ ├── .xccurrentversion │ │ │ │ ├── UAInbox 2.xcdatamodel/ │ │ │ │ │ └── contents │ │ │ │ ├── UAInbox 3.xcdatamodel/ │ │ │ │ │ └── contents │ │ │ │ ├── UAInbox 4.xcdatamodel/ │ │ │ │ │ └── contents │ │ │ │ └── UAInbox.xcdatamodel/ │ │ │ │ └── contents │ │ │ ├── UAInboxDataMappingV1toV4.xcmappingmodel/ │ │ │ │ └── xcmapping.xml │ │ │ ├── UAInboxDataMappingV2toV4.xcmappingmodel/ │ │ │ │ └── xcmapping.xml │ │ │ └── UAInboxDataMappingV3toV4.xcmappingmodel/ │ │ │ └── xcmapping.xml │ │ ├── Source/ │ │ │ ├── AirshipMessageCenterResources.swift │ │ │ ├── MessageCenter.swift │ │ │ ├── MessageCenterAPIClient.swift │ │ │ ├── MessageCenterAction.swift │ │ │ ├── MessageCenterComponent.swift │ │ │ ├── MessageCenterList.swift │ │ │ ├── MessageCenterNativeBridgeExtension.swift │ │ │ ├── MessageCenterPredicate.swift │ │ │ ├── MessageCenterSDKModule.swift │ │ │ ├── MessageCenterStore.swift │ │ │ ├── MessageViewAnalytics.swift │ │ │ ├── Model/ │ │ │ │ ├── InboxMessageData.swift │ │ │ │ ├── MessageCenterMessage.swift │ │ │ │ ├── MessageCenterUser.swift │ │ │ │ └── UAInboxDataMapping.swift │ │ │ ├── StateStore/ │ │ │ │ └── NativeLayoutPersistentDataStore.swift │ │ │ ├── Theme/ │ │ │ │ ├── MessageCenterNavigationAppearance.swift │ │ │ │ ├── MessageCenterTheme.swift │ │ │ │ └── MessageCenterThemeLoader.swift │ │ │ ├── ViewModel/ │ │ │ │ └── MessageCenterListItemViewModel.swift │ │ │ └── Views/ │ │ │ ├── MessageCenter/ │ │ │ │ ├── MessageCenterContent.swift │ │ │ │ ├── MessageCenterController.swift │ │ │ │ ├── MessageCenterNavigationStack.swift │ │ │ │ ├── MessageCenterSplitNavigationView.swift │ │ │ │ ├── MessageCenterUIKitAppearance.swift │ │ │ │ └── MessageCenterView.swift │ │ │ ├── MessageCenterViewController.swift │ │ │ ├── MessageList/ │ │ │ │ ├── MessageCenterListItemView.swift │ │ │ │ ├── MessageCenterListView.swift │ │ │ │ ├── MessageCenterListViewModel.swift │ │ │ │ └── MessageCenterListViewWithNavigation.swift │ │ │ ├── MessageView/ │ │ │ │ ├── MessageCenterMessageError.swift │ │ │ │ ├── MessageCenterMessageView.swift │ │ │ │ ├── MessageCenterMessageViewModel.swift │ │ │ │ ├── MessageCenterMessageViewWithNavigation.swift │ │ │ │ ├── MessageCenterThomasView.swift │ │ │ │ └── MessageCenterWebView.swift │ │ │ └── Shared/ │ │ │ └── MessageCenterBackButton.swift │ │ └── Tests/ │ │ ├── MessageCenterAPIClientTest.swift │ │ ├── MessageCenterListTests.swift │ │ ├── MessageCenterMessageTest.swift │ │ ├── MessageCenterStoreTest.swift │ │ ├── MessageCenterThemeLoaderTest.swift │ │ └── MessageViewAnalyticsTest.swift │ ├── AirshipObjectiveC/ │ │ └── Source/ │ │ ├── Analytics/ │ │ │ ├── Events/ │ │ │ │ ├── Templates/ │ │ │ │ │ ├── UAAccountEventTemplate.swift │ │ │ │ │ ├── UAMediaEventTemplate.swift │ │ │ │ │ ├── UARetailEventTemplate.swift │ │ │ │ │ └── UASearchEventTemplate.swift │ │ │ │ └── UACustomEvent.swift │ │ │ ├── UAAnalytics.swift │ │ │ └── UAAssociatedIdentifiers.swift │ │ ├── Automation/ │ │ │ ├── UAInAppAutomation.swift │ │ │ └── UAInAppMessaging.swift │ │ ├── Channel/ │ │ │ ├── UAAttributesEditor.swift │ │ │ ├── UAChannel.swift │ │ │ ├── UATagEditor.swift │ │ │ └── UATagGroupsEditor.swift │ │ ├── Contact/ │ │ │ └── UAContact.swift │ │ ├── Embedded/ │ │ │ └── UAEmbeddedViewController.swift │ │ ├── MessageCenter/ │ │ │ ├── UAMessageCenter.swift │ │ │ ├── UAMessageCenterList.swift │ │ │ ├── UAMessageCenterMessage.swift │ │ │ ├── UAMessageCenterNativeBridge.swift │ │ │ ├── UAMessageCenterTheme.swift │ │ │ ├── UAMessageCenterUser.swift │ │ │ └── UAMessageCenterViewController.swift │ │ ├── PreferenceCenter/ │ │ │ ├── UAPreferenceCenter.swift │ │ │ └── UAPreferenceCenterViewController.swift │ │ ├── PrivacyManager/ │ │ │ └── UAPrivacyManager.swift │ │ ├── Push/ │ │ │ ├── UAAuthorizedNotificationSettings.swift │ │ │ ├── UANotificationCategories.swift │ │ │ ├── UAPush.swift │ │ │ ├── UAPushNotificationDelegate.swift │ │ │ ├── UAPushNotificationStatus.swift │ │ │ └── UARegistrationDelegate.swift │ │ ├── Subscription Lists/ │ │ │ ├── UAScopedSubscriptionListEditor.swift │ │ │ └── UASubscriptionListEditor.swift │ │ ├── UAAppIntegration.swift │ │ ├── UAConfig.swift │ │ ├── UADeepLinkDelegate.swift │ │ ├── UAFeature.swift │ │ ├── UAPermission.swift │ │ ├── UAPermissionsManager.swift │ │ └── UAirship.swift │ └── AirshipPreferenceCenter/ │ ├── Info.plist │ ├── Source/ │ │ ├── AirshipPreferenceCenterResources.swift │ │ ├── PreferenceCenter.swift │ │ ├── PreferenceCenterComponent.swift │ │ ├── PreferenceCenterSDKModule.swift │ │ ├── data/ │ │ │ ├── PreferenceCenterConfig+ContactManagement.swift │ │ │ ├── PreferenceCenterConfig.swift │ │ │ ├── PreferenceCenterDecoder.swift │ │ │ └── PreferenceCenterResponse.swift │ │ ├── theme/ │ │ │ ├── PreferenceCenterTheme.swift │ │ │ └── PreferenceCenterThemeLoader.swift │ │ └── view/ │ │ ├── ChannelSubscriptionView.swift │ │ ├── CommonSectionView.swift │ │ ├── ConditionsMonitor.swift │ │ ├── ConditionsViewModifier.swift │ │ ├── Contact management/ │ │ │ ├── AddChannelPromptView.swift │ │ │ ├── AddChannelPromptViewModel.swift │ │ │ ├── ChannelListView.swift │ │ │ ├── ChannelListViewCell.swift │ │ │ ├── Component Views/ │ │ │ │ ├── BackgroundShape.swift │ │ │ │ ├── ChannelTextField.swift │ │ │ │ ├── EmptySectionLabel.swift │ │ │ │ ├── ErrorLabel.swift │ │ │ │ └── PreferenceCloseButton.swift │ │ │ ├── ContactManagementView.swift │ │ │ └── FooterView.swift │ │ ├── ContactSubscriptionGroupView.swift │ │ ├── ContactSubscriptionView.swift │ │ ├── LabeledSectionBreakView.swift │ │ ├── PreferenceCenterAlertView.swift │ │ ├── PreferenceCenterContent.swift │ │ ├── PreferenceCenterContentLoader.swift │ │ ├── PreferenceCenterContentStyle.swift │ │ ├── PreferenceCenterState.swift │ │ ├── PreferenceCenterUtils.swift │ │ ├── PreferenceCenterView.swift │ │ ├── PreferenceCenterViewControllerFactory.swift │ │ └── PreferenceCenterViewExtensions.swift │ └── Tests/ │ ├── Info.plist │ ├── PreferenceCenterTest.swift │ ├── data/ │ │ └── PreferenceCenterConfigTest.swift │ ├── test data/ │ │ ├── TestLegacyTheme.plist │ │ ├── TestTheme.plist │ │ ├── TestThemeEmpty.plist │ │ └── TestThemeInvalid.plist │ ├── theme/ │ │ └── PreferenceThemeLoaderTest.swift │ └── view/ │ └── PreferenceCenterStateTest.swift ├── Airship.podspec ├── Airship.xcworkspace/ │ ├── contents.xcworkspacedata │ └── xcshareddata/ │ ├── IDEWorkspaceChecks.plist │ ├── WorkspaceSettings.xcsettings │ └── swiftpm/ │ └── Package.resolved ├── AirshipExtensions/ │ ├── AirshipExtensions.xcodeproj/ │ │ ├── project.pbxproj │ │ └── xcshareddata/ │ │ └── xcschemes/ │ │ └── AirshipNotificationServiceExtension.xcscheme │ └── AirshipNotificationServiceExtension/ │ ├── Info.plist │ ├── Source/ │ │ ├── AirshipExtensionConfig.swift │ │ ├── AirshipExtensionLogger.swift │ │ ├── AirshipNotificationMutationProvider.swift │ │ ├── ChallengeResolver.swift │ │ ├── MediaAttachmentPayload.swift │ │ └── UANotificationServiceExtension.swift │ └── Tests/ │ ├── Info.plist │ ├── MediaAttachmentPayloadTest.swift │ └── UANotificationServiceExtensionTests.swift ├── AirshipServiceExtension.podspec ├── CHANGELOG.md ├── DevApp/ │ ├── AirshipConfig.plist.sample │ ├── Dev App/ │ │ ├── AirshipConfig.plist.sample │ │ ├── AppRouter.swift │ │ ├── Assets.xcassets/ │ │ │ ├── AccentColor.colorset/ │ │ │ │ └── Contents.json │ │ │ ├── AppIcon.appiconset/ │ │ │ │ └── Contents.json │ │ │ ├── Contents.json │ │ │ └── HomeHeroImage.imageset/ │ │ │ └── Contents.json │ │ ├── DevApp.entitlements │ │ ├── MainApp.swift │ │ ├── Setup/ │ │ │ ├── AirshipInitializer.swift │ │ │ ├── DeepLinkHandler.swift │ │ │ ├── LiveActivityHandler.swift │ │ │ └── PushNotificationHandler.swift │ │ ├── Thomas/ │ │ │ ├── CustomView/ │ │ │ │ └── Examples/ │ │ │ │ ├── AdView.swift │ │ │ │ ├── BiometricLoginView.swift │ │ │ │ ├── CameraView.swift │ │ │ │ ├── MapRouteView.swift │ │ │ │ └── Weather/ │ │ │ │ ├── WeatherView.swift │ │ │ │ └── WeatherViewModel.swift │ │ │ ├── Embedded Playground View/ │ │ │ │ ├── EmbeddedPlaygroundMenuView.swift │ │ │ │ ├── EmbeddedPlaygroundPicker.swift │ │ │ │ ├── EmbeddedPlaygroundView.swift │ │ │ │ ├── KeyView.swift │ │ │ │ └── PlaceholderToggleView.swift │ │ │ ├── JurassicPark.otf │ │ │ ├── Layouts.swift │ │ │ ├── LayoutsList.swift │ │ │ ├── Resources/ │ │ │ │ ├── Messages/ │ │ │ │ │ ├── Banner/ │ │ │ │ │ │ ├── media-left-jurassic-park-bottom.json │ │ │ │ │ │ ├── media-left.json │ │ │ │ │ │ ├── media-right-jurassic-park-bottom.json │ │ │ │ │ │ ├── media-right-jurassic-park-text-alignment-1.json │ │ │ │ │ │ ├── media-right-jurassic-park-text-alignment-2.json │ │ │ │ │ │ ├── media-right-jurassic-park-top.json │ │ │ │ │ │ ├── media-right.json │ │ │ │ │ │ └── small-banner.json │ │ │ │ │ ├── Fullscreen/ │ │ │ │ │ │ ├── header-body-media-joined.json │ │ │ │ │ │ ├── header-body-separate.json │ │ │ │ │ │ └── media-header-body-stacked.json │ │ │ │ │ ├── HTML/ │ │ │ │ │ │ ├── fullscreen-airship.json │ │ │ │ │ │ ├── sized-airship.json │ │ │ │ │ │ ├── sized-too-tall-airship.json │ │ │ │ │ │ └── sized-too-wide-airship.json │ │ │ │ │ └── Modal/ │ │ │ │ │ ├── a11y-test.json │ │ │ │ │ ├── accessibility-modal.json │ │ │ │ │ ├── header-body-media-joined.json │ │ │ │ │ ├── header-body-media-stacked.json │ │ │ │ │ ├── header-media-body-joined.json │ │ │ │ │ ├── header-media-body-stacked.json │ │ │ │ │ ├── media-header-body-joined.json │ │ │ │ │ ├── media-header-body-separate-tall-image.json │ │ │ │ │ ├── media-header-body-separate-wide-image.json │ │ │ │ │ ├── media-header-body-separate.json │ │ │ │ │ ├── media-header-body-stacked.json │ │ │ │ │ ├── swipe-gesture-test.json │ │ │ │ │ └── youtube-video-modal.json │ │ │ │ ├── Scenes/ │ │ │ │ │ ├── Banner/ │ │ │ │ │ │ ├── banner-bottom.yml │ │ │ │ │ │ ├── banner-safe-area-bottom.yml │ │ │ │ │ │ ├── banner-safe-area-top.yml │ │ │ │ │ │ ├── banner-top-old.yml │ │ │ │ │ │ └── banner-top.yml │ │ │ │ │ ├── Embedded/ │ │ │ │ │ │ ├── 100pct x 100pct.yml │ │ │ │ │ │ ├── 100pct x auto.yml │ │ │ │ │ │ ├── 50pct x 50pct.yml │ │ │ │ │ │ ├── 75pct x 200pt.yml │ │ │ │ │ │ ├── auto x 200.yml │ │ │ │ │ │ ├── gif_and_vid.yml │ │ │ │ │ │ ├── home_image.yml │ │ │ │ │ │ ├── home_rating.yml │ │ │ │ │ │ └── home_special_offer.yml │ │ │ │ │ └── Modal/ │ │ │ │ │ ├── 1-pager-different-path.yml │ │ │ │ │ ├── 1-pager-pranching-test.yml │ │ │ │ │ ├── 1qa.yml │ │ │ │ │ ├── MOBILE_4621.yml │ │ │ │ │ ├── _a11y_focus.json │ │ │ │ │ ├── _vimeo.ml │ │ │ │ │ ├── a-gif-and-youtube.yml │ │ │ │ │ ├── a-landscape-video.yml │ │ │ │ │ ├── aaa-modal-bg-image.yaml │ │ │ │ │ ├── aaa-modal.json │ │ │ │ │ ├── accessibility-action-story.yml │ │ │ │ │ ├── accessibility-actions-modal-pager-fullsize.yml │ │ │ │ │ ├── accessibility-test-modal.json │ │ │ │ │ ├── airship-quiz-1.yml │ │ │ │ │ ├── async_view.yaml │ │ │ │ │ ├── auto_height_modal.yml │ │ │ │ │ ├── button_layout.yml │ │ │ │ │ ├── container.yml │ │ │ │ │ ├── containerception.yml │ │ │ │ │ ├── custom-fonts.yml │ │ │ │ │ ├── form-input-branching-child-form.yaml │ │ │ │ │ ├── form-input-branching-on-demand.yml │ │ │ │ │ ├── form_immediate_phone.yaml │ │ │ │ │ ├── form_immediate_validation_email.yaml │ │ │ │ │ ├── form_on_demand_validation_email.yaml │ │ │ │ │ ├── form_single_page_on_demand.yml │ │ │ │ │ ├── forms.yml │ │ │ │ │ ├── image-pager-test.yml │ │ │ │ │ ├── image_cropping.yml │ │ │ │ │ ├── image_resizing.yml │ │ │ │ │ ├── image_scaling.yml │ │ │ │ │ ├── is-accessibility-alert-form.yml │ │ │ │ │ ├── linear_layout_scroll.yml │ │ │ │ │ ├── markdown.yml │ │ │ │ │ ├── martin.json │ │ │ │ │ ├── mobile-4599.yml │ │ │ │ │ ├── mobile-5409-2.json │ │ │ │ │ ├── mobile-5409.json │ │ │ │ │ ├── mobile-5553-shape-corners.yml │ │ │ │ │ ├── modal-buttons.yml │ │ │ │ │ ├── modal-checkboxes-radios.yml │ │ │ │ │ ├── modal-constrained.yml │ │ │ │ │ ├── modal-custom-biometric-login.yml │ │ │ │ │ ├── modal-custom-interstitial-banner-ad.yaml │ │ │ │ │ ├── modal-custom-weather-and-map.yaml │ │ │ │ │ ├── modal-day-night-colors.yml │ │ │ │ │ ├── modal-disable-back-button.yml │ │ │ │ │ ├── modal-labels.yml │ │ │ │ │ ├── modal-linear-layout-horizontal.yml │ │ │ │ │ ├── modal-linear-layout-vertical.yml │ │ │ │ │ ├── modal-linear-layout-webview-emoji.yml │ │ │ │ │ ├── modal-linear-layout.yml │ │ │ │ │ ├── modal-media-header-body-stacked-buttons.yml │ │ │ │ │ ├── modal-pager-fullsize.yml │ │ │ │ │ ├── modal-pager-with-title-and-button.yml │ │ │ │ │ ├── modal-placement-selectors.yml │ │ │ │ │ ├── modal-responsive.yml │ │ │ │ │ ├── modal-score.yml │ │ │ │ │ ├── modal-transparancy.yml │ │ │ │ │ ├── modal-video-cropping.yml │ │ │ │ │ ├── modal-webview-full-size.yml │ │ │ │ │ ├── modal-webview-with-buttons.yml │ │ │ │ │ ├── model-custom-camera-view.yml │ │ │ │ │ ├── multi-video-players.yml │ │ │ │ │ ├── nps.yml │ │ │ │ │ ├── pager-behaviors.yml │ │ │ │ │ ├── portrait-video.yml │ │ │ │ │ ├── qa-advseg-2998.yml │ │ │ │ │ ├── qa-advseg-2999.yml │ │ │ │ │ ├── safe-areas-linear-layout.yml │ │ │ │ │ ├── safe-areas-pager.yml │ │ │ │ │ ├── scene-scroll.yml │ │ │ │ │ ├── story-one-screen.yml │ │ │ │ │ ├── story-video-and-gif.yml │ │ │ │ │ ├── story.yml │ │ │ │ │ ├── tap-handler-visibility.yml │ │ │ │ │ ├── textInput │ │ │ │ │ ├── toggle-branching-simple-quiz.yml │ │ │ │ │ ├── toggle-layout-types.yml │ │ │ │ │ ├── toggle-rating-numbers.yaml │ │ │ │ │ ├── toggle-rating-stars-small.yaml │ │ │ │ │ ├── toggleLayout.yml │ │ │ │ │ ├── tour-example.yml │ │ │ │ │ ├── tour-no-safe-areas.yml │ │ │ │ │ ├── tour-safe-areas.yml │ │ │ │ │ ├── unsafe_areas.yml │ │ │ │ │ ├── video-controls.yml │ │ │ │ │ ├── video-qa.yaml │ │ │ │ │ ├── video-story-multipage.yml │ │ │ │ │ ├── video-story.yml │ │ │ │ │ ├── video-test.yml │ │ │ │ │ ├── video-youtube.yml │ │ │ │ │ ├── video_cropping.yml │ │ │ │ │ ├── view_overrides.yml │ │ │ │ │ ├── wide-image-pager-test.yml │ │ │ │ │ ├── wrapping-modal-score.yml │ │ │ │ │ ├── wrapping-multi-page.yml │ │ │ │ │ ├── wrapping-nps-test-2.yml │ │ │ │ │ ├── wrapping-nps-test-3.yml │ │ │ │ │ ├── wrapping-nps-test-4.yml │ │ │ │ │ ├── wrapping-nps-test-5.yml │ │ │ │ │ └── wrapping-nps-test.yml │ │ │ │ └── SharedAssets.xcassets/ │ │ │ │ ├── 23GrandeAccentColor.colorset/ │ │ │ │ │ └── Contents.json │ │ │ │ ├── 23GrandeAllFashion.imageset/ │ │ │ │ │ └── Contents.json │ │ │ │ ├── 23GrandeAppIcon.appiconset/ │ │ │ │ │ └── Contents.json │ │ │ │ ├── 23GrandeArrival1.imageset/ │ │ │ │ │ └── Contents.json │ │ │ │ ├── 23GrandeArrival2.imageset/ │ │ │ │ │ └── Contents.json │ │ │ │ ├── 23GrandeHomeBanner.imageset/ │ │ │ │ │ └── Contents.json │ │ │ │ └── Contents.json │ │ │ ├── ThomasLayoutListView.swift │ │ │ └── ThomasLayoutViewModel.swift │ │ ├── Toast.swift │ │ └── View/ │ │ ├── AppView.swift │ │ ├── HomeView.swift │ │ ├── NamedUserView.swift │ │ └── ToastView.swift │ ├── Dev-App-Info.plist │ ├── DevApp App Clip/ │ │ ├── Airship_Sample_App_Clip.entitlements │ │ └── Info.plist │ ├── DevApp Service Extension/ │ │ ├── Info.plist │ │ └── NotificationService.swift │ ├── DevApp.xcodeproj/ │ │ ├── project.pbxproj │ │ └── project.xcworkspace/ │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata/ │ │ ├── IDEWorkspaceChecks.plist │ │ └── swiftpm/ │ │ └── Package.resolved │ ├── LiveActivity/ │ │ ├── Assets.xcassets/ │ │ │ ├── 23Grande.imageset/ │ │ │ │ └── Contents.json │ │ │ ├── AccentColor.colorset/ │ │ │ │ └── Contents.json │ │ │ ├── AppIcon.appiconset/ │ │ │ │ └── Contents.json │ │ │ ├── Contents.json │ │ │ └── WidgetBackground.colorset/ │ │ │ └── Contents.json │ │ ├── DeliveryActivityWidget.swift │ │ ├── DeliveryAttributes.swift │ │ ├── Info.plist │ │ ├── LiveActivity.intentdefinition │ │ └── Widgets.swift │ └── Sample Plist/ │ └── AirshipConfig.plist.sample ├── DevApp watchOS/ │ ├── DevApp watchOS/ │ │ ├── AppDelegate.swift │ │ ├── Assets.xcassets/ │ │ │ ├── AccentColor.colorset/ │ │ │ │ └── Contents.json │ │ │ ├── AppIcon.appiconset/ │ │ │ │ └── Contents.json │ │ │ └── Contents.json │ │ ├── HomeView.swift │ │ ├── MainApp.swift │ │ ├── NamedUserView.swift │ │ ├── Preview Content/ │ │ │ └── Preview Assets.xcassets/ │ │ │ ├── AccentColor.colorset/ │ │ │ │ └── Contents.json │ │ │ ├── AppIcon.appiconset/ │ │ │ │ └── Contents.json │ │ │ └── Contents.json │ │ └── PushNotificationPayload.apns │ └── DevApp watchOS.xcodeproj/ │ ├── project.pbxproj │ └── project.xcworkspace/ │ └── contents.xcworkspacedata ├── Documentation/ │ ├── .jazzy.json │ ├── Migration/ │ │ ├── README.md │ │ ├── migration-guide-16-17.md │ │ ├── migration-guide-17-18.md │ │ ├── migration-guide-18-19.md │ │ └── migration-guide-19-20.md │ ├── abstracts/ │ │ └── Guides.md │ └── readme-for-jazzy.md ├── Gemfile ├── LICENSE ├── Makefile ├── Package.swift ├── README.md └── scripts/ ├── airship_version.sh ├── build_docCs.sh ├── build_sample.sh ├── build_sample_watchos.sh ├── build_xcframeworks.sh ├── check_size.sh ├── check_version.sh ├── check_xcbeautify.sh ├── gemini-review-prompt.md ├── get_xcode_path.sh ├── package.sh ├── package_xcframeworks.sh ├── pr-review.mjs ├── run_xcodebuild.sh └── update_version.sh