Implement iOS Share Extension to enable native image sharing from Photos and other apps directly into TimeSafari. Users can now share images from the iOS share sheet, which will open in SharedPhotoView for use as gifts or profile pictures. iOS Native Implementation: - Add TimeSafariShareExtension target with ShareViewController - Configure App Groups for data sharing between extension and main app - Implement ShareViewController to process shared images and convert to base64 - Store shared image data in App Group UserDefaults - Add ShareImageBridge utility to read shared data from App Group - Update AppDelegate to handle shared-photo deep link and bridge data to JS JavaScript Integration: - Add checkAndStoreNativeSharedImage() in main.capacitor.ts to read shared images from native layer via temporary file bridge - Convert base64 data to data URL format for compatibility with base64ToBlob - Integrate with existing SharedPhotoView component - Add "shared-photo" to deep link validation schema Build System: - Integrate Xcode 26 / CocoaPods compatibility workaround into build-ios.sh - Add run_pod_install_with_workaround() for explicit pod install - Add run_cap_sync_with_workaround() for Capacitor sync (which runs pod install internally) - Automatically detect project format version 70 and apply workaround - Remove standalone pod-install-workaround.sh script Code Cleanup: - Remove verbose debug logs from ShareViewController, AppDelegate, and main.capacitor.ts - Retain essential logger calls for production debugging Documentation: - Add ios-share-extension-setup.md with manual Xcode setup instructions - Add ios-share-extension-git-commit-guide.md for version control best practices - Add ios-share-implementation-status.md tracking implementation progress - Add native-share-target-implementation.md with overall architecture - Add xcode-26-cocoapods-workaround.md documenting the compatibility issue The implementation uses a temporary file bridge (AppDelegate writes to Documents directory, JS reads via Capacitor Filesystem plugin) as a workaround for Capacitor plugin auto-discovery issues. This can be improved in the future by properly registering ShareImagePlugin in Capacitor's plugin registry.
672 lines
26 KiB
Plaintext
672 lines
26 KiB
Plaintext
// !$*UTF8*$!
|
|
{
|
|
archiveVersion = 1;
|
|
classes = {
|
|
};
|
|
objectVersion = 70;
|
|
objects = {
|
|
|
|
/* Begin PBXBuildFile section */
|
|
2FAD9763203C412B000D30F8 /* config.xml in Resources */ = {isa = PBXBuildFile; fileRef = 2FAD9762203C412B000D30F8 /* config.xml */; };
|
|
50379B232058CBB4000EE86E /* capacitor.config.json in Resources */ = {isa = PBXBuildFile; fileRef = 50379B222058CBB4000EE86E /* capacitor.config.json */; };
|
|
504EC3081FED79650016851F /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 504EC3071FED79650016851F /* AppDelegate.swift */; };
|
|
504EC30D1FED79650016851F /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 504EC30B1FED79650016851F /* Main.storyboard */; };
|
|
504EC30F1FED79650016851F /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 504EC30E1FED79650016851F /* Assets.xcassets */; };
|
|
504EC3121FED79650016851F /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 504EC3101FED79650016851F /* LaunchScreen.storyboard */; };
|
|
50B271D11FEDC1A000F3C39B /* public in Resources */ = {isa = PBXBuildFile; fileRef = 50B271D01FEDC1A000F3C39B /* public */; };
|
|
97EF2DC6FD76C3643D680B8D /* Pods_App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 90DCAFB4D8948F7A50C13800 /* Pods_App.framework */; };
|
|
C86585DF2ED456DE00824752 /* TimeSafariShareExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = C86585D52ED456DE00824752 /* TimeSafariShareExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
|
|
C86585E82ED45A3E00824752 /* ShareImageBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = C86585E72ED45A3D00824752 /* ShareImageBridge.swift */; };
|
|
C8D7E2CC2ED46A3B00DD738D /* ShareImagePlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8D7E2CB2ED46A3B00DD738D /* ShareImagePlugin.swift */; };
|
|
/* End PBXBuildFile section */
|
|
|
|
/* Begin PBXContainerItemProxy section */
|
|
C86585DD2ED456DE00824752 /* PBXContainerItemProxy */ = {
|
|
isa = PBXContainerItemProxy;
|
|
containerPortal = 504EC2FC1FED79650016851F /* Project object */;
|
|
proxyType = 1;
|
|
remoteGlobalIDString = C86585D42ED456DE00824752;
|
|
remoteInfo = TimeSafariShareExtension;
|
|
};
|
|
/* End PBXContainerItemProxy section */
|
|
|
|
/* Begin PBXCopyFilesBuildPhase section */
|
|
C86585E02ED456DE00824752 /* Embed Foundation Extensions */ = {
|
|
isa = PBXCopyFilesBuildPhase;
|
|
buildActionMask = 2147483647;
|
|
dstPath = "";
|
|
dstSubfolderSpec = 13;
|
|
files = (
|
|
C86585DF2ED456DE00824752 /* TimeSafariShareExtension.appex in Embed Foundation Extensions */,
|
|
);
|
|
name = "Embed Foundation Extensions";
|
|
runOnlyForDeploymentPostprocessing = 0;
|
|
};
|
|
/* End PBXCopyFilesBuildPhase section */
|
|
|
|
/* Begin PBXFileReference section */
|
|
2FAD9762203C412B000D30F8 /* config.xml */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = config.xml; sourceTree = "<group>"; };
|
|
50379B222058CBB4000EE86E /* capacitor.config.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = capacitor.config.json; sourceTree = "<group>"; };
|
|
504EC3041FED79650016851F /* App.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = App.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
|
504EC3071FED79650016851F /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
|
|
504EC30C1FED79650016851F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
|
|
504EC30E1FED79650016851F /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
|
|
504EC3111FED79650016851F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
|
|
504EC3131FED79650016851F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
|
50B271D01FEDC1A000F3C39B /* public */ = {isa = PBXFileReference; lastKnownFileType = folder; path = public; sourceTree = "<group>"; };
|
|
90DCAFB4D8948F7A50C13800 /* Pods_App.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_App.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
|
C86585D52ED456DE00824752 /* TimeSafariShareExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = TimeSafariShareExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; };
|
|
C86585E52ED4577F00824752 /* App.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = App.entitlements; sourceTree = "<group>"; };
|
|
C86585E72ED45A3D00824752 /* ShareImageBridge.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShareImageBridge.swift; sourceTree = "<group>"; };
|
|
C8D7E2CB2ED46A3B00DD738D /* ShareImagePlugin.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShareImagePlugin.swift; sourceTree = "<group>"; };
|
|
E2E9297D5D02C549106C77F9 /* Pods-App.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-App.release.xcconfig"; path = "Target Support Files/Pods-App/Pods-App.release.xcconfig"; sourceTree = "<group>"; };
|
|
EAEC6436E595F7CD3A1C9E96 /* Pods-App.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-App.debug.xcconfig"; path = "Target Support Files/Pods-App/Pods-App.debug.xcconfig"; sourceTree = "<group>"; };
|
|
/* End PBXFileReference section */
|
|
|
|
/* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */
|
|
C86585E32ED456DE00824752 /* PBXFileSystemSynchronizedBuildFileExceptionSet */ = {
|
|
isa = PBXFileSystemSynchronizedBuildFileExceptionSet;
|
|
membershipExceptions = (
|
|
Info.plist,
|
|
);
|
|
target = C86585D42ED456DE00824752 /* TimeSafariShareExtension */;
|
|
};
|
|
/* End PBXFileSystemSynchronizedBuildFileExceptionSet section */
|
|
|
|
/* Begin PBXFileSystemSynchronizedRootGroup section */
|
|
C86585D62ED456DE00824752 /* TimeSafariShareExtension */ = {isa = PBXFileSystemSynchronizedRootGroup; exceptions = (C86585E32ED456DE00824752 /* PBXFileSystemSynchronizedBuildFileExceptionSet */, ); explicitFileTypes = {}; explicitFolders = (); path = TimeSafariShareExtension; sourceTree = "<group>"; };
|
|
/* End PBXFileSystemSynchronizedRootGroup section */
|
|
|
|
/* Begin PBXFrameworksBuildPhase section */
|
|
504EC3011FED79650016851F /* Frameworks */ = {
|
|
isa = PBXFrameworksBuildPhase;
|
|
buildActionMask = 2147483647;
|
|
files = (
|
|
97EF2DC6FD76C3643D680B8D /* Pods_App.framework in Frameworks */,
|
|
);
|
|
runOnlyForDeploymentPostprocessing = 0;
|
|
};
|
|
C86585D22ED456DE00824752 /* Frameworks */ = {
|
|
isa = PBXFrameworksBuildPhase;
|
|
buildActionMask = 2147483647;
|
|
files = (
|
|
);
|
|
runOnlyForDeploymentPostprocessing = 0;
|
|
};
|
|
/* End PBXFrameworksBuildPhase section */
|
|
|
|
/* Begin PBXGroup section */
|
|
4B546315E668C7A13939F417 /* Frameworks */ = {
|
|
isa = PBXGroup;
|
|
children = (
|
|
90DCAFB4D8948F7A50C13800 /* Pods_App.framework */,
|
|
);
|
|
name = Frameworks;
|
|
sourceTree = "<group>";
|
|
};
|
|
504EC2FB1FED79650016851F = {
|
|
isa = PBXGroup;
|
|
children = (
|
|
504EC3061FED79650016851F /* App */,
|
|
C86585D62ED456DE00824752 /* TimeSafariShareExtension */,
|
|
504EC3051FED79650016851F /* Products */,
|
|
BA325FFCDCE8D334E5C7AEBE /* Pods */,
|
|
4B546315E668C7A13939F417 /* Frameworks */,
|
|
);
|
|
sourceTree = "<group>";
|
|
};
|
|
504EC3051FED79650016851F /* Products */ = {
|
|
isa = PBXGroup;
|
|
children = (
|
|
504EC3041FED79650016851F /* App.app */,
|
|
C86585D52ED456DE00824752 /* TimeSafariShareExtension.appex */,
|
|
);
|
|
name = Products;
|
|
sourceTree = "<group>";
|
|
};
|
|
504EC3061FED79650016851F /* App */ = {
|
|
isa = PBXGroup;
|
|
children = (
|
|
C8D7E2CB2ED46A3B00DD738D /* ShareImagePlugin.swift */,
|
|
C86585E72ED45A3D00824752 /* ShareImageBridge.swift */,
|
|
C86585E52ED4577F00824752 /* App.entitlements */,
|
|
50379B222058CBB4000EE86E /* capacitor.config.json */,
|
|
504EC3071FED79650016851F /* AppDelegate.swift */,
|
|
504EC30B1FED79650016851F /* Main.storyboard */,
|
|
504EC30E1FED79650016851F /* Assets.xcassets */,
|
|
504EC3101FED79650016851F /* LaunchScreen.storyboard */,
|
|
504EC3131FED79650016851F /* Info.plist */,
|
|
2FAD9762203C412B000D30F8 /* config.xml */,
|
|
50B271D01FEDC1A000F3C39B /* public */,
|
|
);
|
|
path = App;
|
|
sourceTree = "<group>";
|
|
};
|
|
BA325FFCDCE8D334E5C7AEBE /* Pods */ = {
|
|
isa = PBXGroup;
|
|
children = (
|
|
EAEC6436E595F7CD3A1C9E96 /* Pods-App.debug.xcconfig */,
|
|
E2E9297D5D02C549106C77F9 /* Pods-App.release.xcconfig */,
|
|
);
|
|
path = Pods;
|
|
sourceTree = "<group>";
|
|
};
|
|
/* End PBXGroup section */
|
|
|
|
/* Begin PBXNativeTarget section */
|
|
504EC3031FED79650016851F /* App */ = {
|
|
isa = PBXNativeTarget;
|
|
buildConfigurationList = 504EC3161FED79650016851F /* Build configuration list for PBXNativeTarget "App" */;
|
|
buildPhases = (
|
|
92977BEA1068CC097A57FC77 /* [CP] Check Pods Manifest.lock */,
|
|
504EC3001FED79650016851F /* Sources */,
|
|
504EC3011FED79650016851F /* Frameworks */,
|
|
504EC3021FED79650016851F /* Resources */,
|
|
012076E8FFE4BF260A79B034 /* Fix Privacy Manifest */,
|
|
3525031ED1C96EF4CF6E9959 /* [CP] Embed Pods Frameworks */,
|
|
96A7EF592DF3366D00084D51 /* Fix Privacy Manifest */,
|
|
C86585E02ED456DE00824752 /* Embed Foundation Extensions */,
|
|
);
|
|
buildRules = (
|
|
);
|
|
dependencies = (
|
|
C86585DE2ED456DE00824752 /* PBXTargetDependency */,
|
|
);
|
|
name = App;
|
|
productName = App;
|
|
productReference = 504EC3041FED79650016851F /* App.app */;
|
|
productType = "com.apple.product-type.application";
|
|
};
|
|
C86585D42ED456DE00824752 /* TimeSafariShareExtension */ = {
|
|
isa = PBXNativeTarget;
|
|
buildConfigurationList = C86585E42ED456DE00824752 /* Build configuration list for PBXNativeTarget "TimeSafariShareExtension" */;
|
|
buildPhases = (
|
|
C86585D12ED456DE00824752 /* Sources */,
|
|
C86585D22ED456DE00824752 /* Frameworks */,
|
|
C86585D32ED456DE00824752 /* Resources */,
|
|
);
|
|
buildRules = (
|
|
);
|
|
dependencies = (
|
|
);
|
|
fileSystemSynchronizedGroups = (
|
|
C86585D62ED456DE00824752 /* TimeSafariShareExtension */,
|
|
);
|
|
name = TimeSafariShareExtension;
|
|
packageProductDependencies = (
|
|
);
|
|
productName = TimeSafariShareExtension;
|
|
productReference = C86585D52ED456DE00824752 /* TimeSafariShareExtension.appex */;
|
|
productType = "com.apple.product-type.app-extension";
|
|
};
|
|
/* End PBXNativeTarget section */
|
|
|
|
/* Begin PBXProject section */
|
|
504EC2FC1FED79650016851F /* Project object */ = {
|
|
isa = PBXProject;
|
|
attributes = {
|
|
BuildIndependentTargetsInParallel = YES;
|
|
LastSwiftUpdateCheck = 2610;
|
|
LastUpgradeCheck = 1630;
|
|
TargetAttributes = {
|
|
504EC3031FED79650016851F = {
|
|
CreatedOnToolsVersion = 9.2;
|
|
LastSwiftMigration = 1100;
|
|
ProvisioningStyle = Automatic;
|
|
};
|
|
C86585D42ED456DE00824752 = {
|
|
CreatedOnToolsVersion = 26.1.1;
|
|
};
|
|
};
|
|
};
|
|
buildConfigurationList = 504EC2FF1FED79650016851F /* Build configuration list for PBXProject "App" */;
|
|
compatibilityVersion = "Xcode 8.0";
|
|
developmentRegion = en;
|
|
hasScannedForEncodings = 0;
|
|
knownRegions = (
|
|
en,
|
|
Base,
|
|
);
|
|
mainGroup = 504EC2FB1FED79650016851F;
|
|
productRefGroup = 504EC3051FED79650016851F /* Products */;
|
|
projectDirPath = "";
|
|
projectRoot = "";
|
|
targets = (
|
|
504EC3031FED79650016851F /* App */,
|
|
C86585D42ED456DE00824752 /* TimeSafariShareExtension */,
|
|
);
|
|
};
|
|
/* End PBXProject section */
|
|
|
|
/* Begin PBXResourcesBuildPhase section */
|
|
504EC3021FED79650016851F /* Resources */ = {
|
|
isa = PBXResourcesBuildPhase;
|
|
buildActionMask = 2147483647;
|
|
files = (
|
|
504EC3121FED79650016851F /* LaunchScreen.storyboard in Resources */,
|
|
50B271D11FEDC1A000F3C39B /* public in Resources */,
|
|
504EC30F1FED79650016851F /* Assets.xcassets in Resources */,
|
|
50379B232058CBB4000EE86E /* capacitor.config.json in Resources */,
|
|
504EC30D1FED79650016851F /* Main.storyboard in Resources */,
|
|
2FAD9763203C412B000D30F8 /* config.xml in Resources */,
|
|
);
|
|
runOnlyForDeploymentPostprocessing = 0;
|
|
};
|
|
C86585D32ED456DE00824752 /* Resources */ = {
|
|
isa = PBXResourcesBuildPhase;
|
|
buildActionMask = 2147483647;
|
|
files = (
|
|
);
|
|
runOnlyForDeploymentPostprocessing = 0;
|
|
};
|
|
/* End PBXResourcesBuildPhase section */
|
|
|
|
/* Begin PBXShellScriptBuildPhase section */
|
|
012076E8FFE4BF260A79B034 /* Fix Privacy Manifest */ = {
|
|
isa = PBXShellScriptBuildPhase;
|
|
alwaysOutOfDate = 1;
|
|
buildActionMask = 2147483647;
|
|
files = (
|
|
);
|
|
inputFileListPaths = (
|
|
);
|
|
inputPaths = (
|
|
);
|
|
name = "Fix Privacy Manifest";
|
|
outputFileListPaths = (
|
|
);
|
|
outputPaths = (
|
|
);
|
|
runOnlyForDeploymentPostprocessing = 0;
|
|
shellPath = /bin/sh;
|
|
shellScript = "\"${PROJECT_DIR}/app_privacy_manifest_fixer/fixer.sh\" \n";
|
|
showEnvVarsInLog = 0;
|
|
};
|
|
3525031ED1C96EF4CF6E9959 /* [CP] Embed Pods Frameworks */ = {
|
|
isa = PBXShellScriptBuildPhase;
|
|
buildActionMask = 2147483647;
|
|
files = (
|
|
);
|
|
inputPaths = (
|
|
);
|
|
name = "[CP] Embed Pods Frameworks";
|
|
outputPaths = (
|
|
);
|
|
runOnlyForDeploymentPostprocessing = 0;
|
|
shellPath = /bin/sh;
|
|
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-App/Pods-App-frameworks.sh\"\n";
|
|
showEnvVarsInLog = 0;
|
|
};
|
|
92977BEA1068CC097A57FC77 /* [CP] Check Pods Manifest.lock */ = {
|
|
isa = PBXShellScriptBuildPhase;
|
|
buildActionMask = 2147483647;
|
|
files = (
|
|
);
|
|
inputFileListPaths = (
|
|
);
|
|
inputPaths = (
|
|
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
|
|
"${PODS_ROOT}/Manifest.lock",
|
|
);
|
|
name = "[CP] Check Pods Manifest.lock";
|
|
outputFileListPaths = (
|
|
);
|
|
outputPaths = (
|
|
"$(DERIVED_FILE_DIR)/Pods-App-checkManifestLockResult.txt",
|
|
);
|
|
runOnlyForDeploymentPostprocessing = 0;
|
|
shellPath = /bin/sh;
|
|
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
|
|
showEnvVarsInLog = 0;
|
|
};
|
|
96A7EF592DF3366D00084D51 /* Fix Privacy Manifest */ = {
|
|
isa = PBXShellScriptBuildPhase;
|
|
alwaysOutOfDate = 1;
|
|
buildActionMask = 2147483647;
|
|
files = (
|
|
);
|
|
inputFileListPaths = (
|
|
);
|
|
inputPaths = (
|
|
);
|
|
name = "Fix Privacy Manifest";
|
|
outputFileListPaths = (
|
|
);
|
|
outputPaths = (
|
|
);
|
|
runOnlyForDeploymentPostprocessing = 0;
|
|
shellPath = /bin/sh;
|
|
shellScript = "$PROJECT_DIR/app_privacy_manifest_fixer/fixer.sh\n";
|
|
};
|
|
/* End PBXShellScriptBuildPhase section */
|
|
|
|
/* Begin PBXSourcesBuildPhase section */
|
|
504EC3001FED79650016851F /* Sources */ = {
|
|
isa = PBXSourcesBuildPhase;
|
|
buildActionMask = 2147483647;
|
|
files = (
|
|
C8D7E2CC2ED46A3B00DD738D /* ShareImagePlugin.swift in Sources */,
|
|
C86585E82ED45A3E00824752 /* ShareImageBridge.swift in Sources */,
|
|
504EC3081FED79650016851F /* AppDelegate.swift in Sources */,
|
|
);
|
|
runOnlyForDeploymentPostprocessing = 0;
|
|
};
|
|
C86585D12ED456DE00824752 /* Sources */ = {
|
|
isa = PBXSourcesBuildPhase;
|
|
buildActionMask = 2147483647;
|
|
files = (
|
|
);
|
|
runOnlyForDeploymentPostprocessing = 0;
|
|
};
|
|
/* End PBXSourcesBuildPhase section */
|
|
|
|
/* Begin PBXTargetDependency section */
|
|
C86585DE2ED456DE00824752 /* PBXTargetDependency */ = {
|
|
isa = PBXTargetDependency;
|
|
target = C86585D42ED456DE00824752 /* TimeSafariShareExtension */;
|
|
targetProxy = C86585DD2ED456DE00824752 /* PBXContainerItemProxy */;
|
|
};
|
|
/* End PBXTargetDependency section */
|
|
|
|
/* Begin PBXVariantGroup section */
|
|
504EC30B1FED79650016851F /* Main.storyboard */ = {
|
|
isa = PBXVariantGroup;
|
|
children = (
|
|
504EC30C1FED79650016851F /* Base */,
|
|
);
|
|
name = Main.storyboard;
|
|
sourceTree = "<group>";
|
|
};
|
|
504EC3101FED79650016851F /* LaunchScreen.storyboard */ = {
|
|
isa = PBXVariantGroup;
|
|
children = (
|
|
504EC3111FED79650016851F /* Base */,
|
|
);
|
|
name = LaunchScreen.storyboard;
|
|
sourceTree = "<group>";
|
|
};
|
|
/* End PBXVariantGroup section */
|
|
|
|
/* Begin XCBuildConfiguration section */
|
|
504EC3141FED79650016851F /* Debug */ = {
|
|
isa = XCBuildConfiguration;
|
|
buildSettings = {
|
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
|
CLANG_ANALYZER_NONNULL = YES;
|
|
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
|
|
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_DOCUMENTATION_COMMENTS = YES;
|
|
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_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
|
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
|
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
|
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
|
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
|
CLANG_WARN_UNREACHABLE_CODE = YES;
|
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
|
CODE_SIGN_IDENTITY = "iPhone Developer";
|
|
COPY_PHASE_STRIP = NO;
|
|
DEBUG_INFORMATION_FORMAT = dwarf;
|
|
DEVELOPMENT_TEAM = 7XVXYPEQYJ;
|
|
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
|
ENABLE_TESTABILITY = YES;
|
|
ENABLE_USER_SCRIPT_SANDBOXING = YES;
|
|
GCC_C_LANGUAGE_STANDARD = gnu11;
|
|
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;
|
|
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
|
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
|
};
|
|
name = Debug;
|
|
};
|
|
504EC3151FED79650016851F /* Release */ = {
|
|
isa = XCBuildConfiguration;
|
|
buildSettings = {
|
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
|
CLANG_ANALYZER_NONNULL = YES;
|
|
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
|
|
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_DOCUMENTATION_COMMENTS = YES;
|
|
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_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
|
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
|
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
|
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
|
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
|
CLANG_WARN_UNREACHABLE_CODE = YES;
|
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
|
CODE_SIGN_IDENTITY = "iPhone Developer";
|
|
COPY_PHASE_STRIP = NO;
|
|
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
|
DEVELOPMENT_TEAM = 7XVXYPEQYJ;
|
|
ENABLE_NS_ASSERTIONS = NO;
|
|
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
|
ENABLE_USER_SCRIPT_SANDBOXING = YES;
|
|
GCC_C_LANGUAGE_STANDARD = gnu11;
|
|
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;
|
|
SWIFT_COMPILATION_MODE = wholemodule;
|
|
SWIFT_OPTIMIZATION_LEVEL = "-O";
|
|
VALIDATE_PRODUCT = YES;
|
|
};
|
|
name = Release;
|
|
};
|
|
504EC3171FED79650016851F /* Debug */ = {
|
|
isa = XCBuildConfiguration;
|
|
baseConfigurationReference = EAEC6436E595F7CD3A1C9E96 /* Pods-App.debug.xcconfig */;
|
|
buildSettings = {
|
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
|
CODE_SIGN_ENTITLEMENTS = App/App.entitlements;
|
|
CODE_SIGN_STYLE = Automatic;
|
|
CURRENT_PROJECT_VERSION = 48;
|
|
DEVELOPMENT_TEAM = GM3FS5JQPH;
|
|
ENABLE_APP_SANDBOX = NO;
|
|
ENABLE_USER_SCRIPT_SANDBOXING = NO;
|
|
INFOPLIST_FILE = App/Info.plist;
|
|
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
|
|
LD_RUNPATH_SEARCH_PATHS = (
|
|
"$(inherited)",
|
|
"@executable_path/Frameworks",
|
|
);
|
|
MARKETING_VERSION = 1.1.3;
|
|
OTHER_SWIFT_FLAGS = "$(inherited) \"-D\" \"COCOAPODS\" \"-DDEBUG\"";
|
|
PRODUCT_BUNDLE_IDENTIFIER = app.timesafari;
|
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
|
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
|
|
SWIFT_VERSION = 5.0;
|
|
TARGETED_DEVICE_FAMILY = "1,2";
|
|
VERSIONING_SYSTEM = "apple-generic";
|
|
};
|
|
name = Debug;
|
|
};
|
|
504EC3181FED79650016851F /* Release */ = {
|
|
isa = XCBuildConfiguration;
|
|
baseConfigurationReference = E2E9297D5D02C549106C77F9 /* Pods-App.release.xcconfig */;
|
|
buildSettings = {
|
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
|
CODE_SIGN_ENTITLEMENTS = App/App.entitlements;
|
|
CODE_SIGN_STYLE = Automatic;
|
|
CURRENT_PROJECT_VERSION = 48;
|
|
DEVELOPMENT_TEAM = GM3FS5JQPH;
|
|
ENABLE_APP_SANDBOX = NO;
|
|
ENABLE_USER_SCRIPT_SANDBOXING = NO;
|
|
INFOPLIST_FILE = App/Info.plist;
|
|
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
|
|
LD_RUNPATH_SEARCH_PATHS = (
|
|
"$(inherited)",
|
|
"@executable_path/Frameworks",
|
|
);
|
|
MARKETING_VERSION = 1.1.3;
|
|
PRODUCT_BUNDLE_IDENTIFIER = app.timesafari;
|
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
|
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "";
|
|
SWIFT_VERSION = 5.0;
|
|
TARGETED_DEVICE_FAMILY = "1,2";
|
|
VERSIONING_SYSTEM = "apple-generic";
|
|
};
|
|
name = Release;
|
|
};
|
|
C86585E12ED456DE00824752 /* Debug */ = {
|
|
isa = XCBuildConfiguration;
|
|
buildSettings = {
|
|
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
|
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
|
|
CLANG_ENABLE_OBJC_WEAK = YES;
|
|
CODE_SIGN_ENTITLEMENTS = TimeSafariShareExtension/TimeSafariShareExtension.entitlements;
|
|
CODE_SIGN_STYLE = Automatic;
|
|
CURRENT_PROJECT_VERSION = 1;
|
|
DEVELOPMENT_TEAM = GM3FS5JQPH;
|
|
GCC_C_LANGUAGE_STANDARD = gnu17;
|
|
GENERATE_INFOPLIST_FILE = YES;
|
|
INFOPLIST_FILE = TimeSafariShareExtension/Info.plist;
|
|
INFOPLIST_KEY_CFBundleDisplayName = TimeSafariShareExtension;
|
|
INFOPLIST_KEY_NSHumanReadableCopyright = "";
|
|
IPHONEOS_DEPLOYMENT_TARGET = 26.1;
|
|
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 = app.timesafari.TimeSafariShareExtension;
|
|
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_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES;
|
|
SWIFT_VERSION = 5.0;
|
|
TARGETED_DEVICE_FAMILY = "1,2";
|
|
};
|
|
name = Debug;
|
|
};
|
|
C86585E22ED456DE00824752 /* Release */ = {
|
|
isa = XCBuildConfiguration;
|
|
buildSettings = {
|
|
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
|
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
|
|
CLANG_ENABLE_OBJC_WEAK = YES;
|
|
CODE_SIGN_ENTITLEMENTS = TimeSafariShareExtension/TimeSafariShareExtension.entitlements;
|
|
CODE_SIGN_STYLE = Automatic;
|
|
CURRENT_PROJECT_VERSION = 1;
|
|
DEVELOPMENT_TEAM = GM3FS5JQPH;
|
|
GCC_C_LANGUAGE_STANDARD = gnu17;
|
|
GENERATE_INFOPLIST_FILE = YES;
|
|
INFOPLIST_FILE = TimeSafariShareExtension/Info.plist;
|
|
INFOPLIST_KEY_CFBundleDisplayName = TimeSafariShareExtension;
|
|
INFOPLIST_KEY_NSHumanReadableCopyright = "";
|
|
IPHONEOS_DEPLOYMENT_TARGET = 26.1;
|
|
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 = app.timesafari.TimeSafariShareExtension;
|
|
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;
|
|
};
|
|
/* End XCBuildConfiguration section */
|
|
|
|
/* Begin XCConfigurationList section */
|
|
504EC2FF1FED79650016851F /* Build configuration list for PBXProject "App" */ = {
|
|
isa = XCConfigurationList;
|
|
buildConfigurations = (
|
|
504EC3141FED79650016851F /* Debug */,
|
|
504EC3151FED79650016851F /* Release */,
|
|
);
|
|
defaultConfigurationIsVisible = 0;
|
|
defaultConfigurationName = Release;
|
|
};
|
|
504EC3161FED79650016851F /* Build configuration list for PBXNativeTarget "App" */ = {
|
|
isa = XCConfigurationList;
|
|
buildConfigurations = (
|
|
504EC3171FED79650016851F /* Debug */,
|
|
504EC3181FED79650016851F /* Release */,
|
|
);
|
|
defaultConfigurationIsVisible = 0;
|
|
defaultConfigurationName = Release;
|
|
};
|
|
C86585E42ED456DE00824752 /* Build configuration list for PBXNativeTarget "TimeSafariShareExtension" */ = {
|
|
isa = XCConfigurationList;
|
|
buildConfigurations = (
|
|
C86585E12ED456DE00824752 /* Debug */,
|
|
C86585E22ED456DE00824752 /* Release */,
|
|
);
|
|
defaultConfigurationIsVisible = 0;
|
|
defaultConfigurationName = Release;
|
|
};
|
|
/* End XCConfigurationList section */
|
|
};
|
|
rootObject = 504EC2FC1FED79650016851F /* Project object */;
|
|
}
|