Add basics for a working tuist workspace (#5248)

This commit is contained in:
Facundo Menzella authored and GitHub committed 2025-07-04 11:37:37 +02:00
1 parent 7edc6d0ccb
commit 03fbe30807
63 files changed
+2447 -641

No files matched your search

+15
View File
@@ -73,3 +73,18 @@ Local.xcconfig
/buildServer.json
*.orig
# tuist
**/Derived/
# Tuist workspaces
RevenueCat-Workspace.xcworkspace/
Projects/**/*.xcodeproj
Examples/**/*.xcodeproj
Projects/**/xcshareddata/
Projects/**/*.xcworkspacedata
Examples/**/.xcworkspacedata
Examples/**/*.xcscheme
Examples/**/xcshareddata/**
+1
View File
@@ -4,6 +4,7 @@ excluded:
- Tests/InstallationTests
- Tests/TestingApps
- Tests/APITesters
- Tuist
- vendor
- scan_derived_data
- .git
@@ -3,171 +3,204 @@
archiveVersion = 1;
classes = {
};
objectVersion = 54;
objectVersion = 55;
objects = {
/* Begin PBXBuildFile section */
4E9E1B2E2CAD38EC00B51150 /* RevenueCat in Frameworks */ = {isa = PBXBuildFile; productRef = 4E9E1B2D2CAD38EC00B51150 /* RevenueCat */; };
4E9E1B302CAD38EC00B51150 /* RevenueCatUI in Frameworks */ = {isa = PBXBuildFile; productRef = 4E9E1B2F2CAD38EC00B51150 /* RevenueCatUI */; };
5539DF1D258806A10073FB19 /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5539DF1C258806A10073FB19 /* Errors.swift */; };
5539DF2025880AB80073FB19 /* WeatherViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5539DF1F25880AB80073FB19 /* WeatherViewController.swift */; };
5539DF24258A9AA70073FB19 /* SampleData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5539DF23258A9AA70073FB19 /* SampleData.swift */; };
5539DF2D2592A07A0073FB19 /* SplashScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5539DF2C2592A0790073FB19 /* SplashScreen.storyboard */; };
5539DF302592A0C30073FB19 /* SplashScreenViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5539DF2F2592A0C30073FB19 /* SplashScreenViewController.swift */; };
5575FD49258801DE001B2F0D /* UserViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5575FD48258801DE001B2F0D /* UserViewController.swift */; };
5576344325A3C08400C0486A /* PackageCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5576344225A3C08400C0486A /* PackageCell.swift */; };
5582ECD72587EF8500ACB34B /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5582ECD62587EF8500ACB34B /* AppDelegate.swift */; };
5582ECD92587EF8500ACB34B /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5582ECD82587EF8500ACB34B /* SceneDelegate.swift */; };
5582ECDE2587EF8500ACB34B /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5582ECDC2587EF8500ACB34B /* Main.storyboard */; };
5582ECE02587EF8800ACB34B /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 5582ECDF2587EF8800ACB34B /* Assets.xcassets */; };
5582ECE32587EF8800ACB34B /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5582ECE12587EF8800ACB34B /* LaunchScreen.storyboard */; };
5582ECFA2587F29600ACB34B /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5582ECF92587F29600ACB34B /* Constants.swift */; };
1065CCB4BB3E94D66A063E21 /* PackageCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = A90A08146AE8C005B05144A5 /* PackageCell.swift */; };
2F704AC77AEC2A10D7C04E02 /* RevenueCat.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 00B11FF935E6C87A5BE6E8A8 /* RevenueCat.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
332A944A5C236E8A82994333 /* TuistAssets+MagicWeather.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33C3B1CAFF9927CE41F9CD70 /* TuistAssets+MagicWeather.swift */; };
3BDE45EEBBAC64E164985840 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = B7D83641A3BEA2A80D59F60A /* Assets.xcassets */; };
51DF56C7C248B3A0B686D3F4 /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 992DA96B41D15177E3631D3D /* Errors.swift */; };
5B4E25CAAA4308DE19AAE7B7 /* SplashScreenViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F3D4E82CB455B1FD93D38AA /* SplashScreenViewController.swift */; };
698C26102B365A2FD84131DA /* RevenueCatUI.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 67FC64E0DA7B5D33517AF018 /* RevenueCatUI.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
73679D6C3DB163AD856BE20A /* RevenueCat.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 00B11FF935E6C87A5BE6E8A8 /* RevenueCat.framework */; };
8DCF484195A00B76F1857EB2 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E83BD63E6C2A1D892E52B04 /* AppDelegate.swift */; };
924992EF3ACDCBA9B579CBA3 /* WeatherViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A459CB95735D6FC471FD001 /* WeatherViewController.swift */; };
A09967C4A53DA1E90827AD11 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 36B758C57A6EE6FE6212141C /* SceneDelegate.swift */; };
A9AD191CE4BA312FA9E100C3 /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F1BA8A04F72922EBAD819DA /* Constants.swift */; };
ABEC5D02D4D9C42BC19BBDBD /* UserViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0967EDE23CD011015F4D0613 /* UserViewController.swift */; };
D77941F01F2E367E6CF11536 /* SampleData.swift in Sources */ = {isa = PBXBuildFile; fileRef = D519AE4B2AB9A5325985CF36 /* SampleData.swift */; };
E2A3591BA48FDC19ED0C22C9 /* RevenueCatUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 67FC64E0DA7B5D33517AF018 /* RevenueCatUI.framework */; };
EF8E3C9CE86F24B1D7DA9E35 /* TuistBundle+MagicWeather.swift in Sources */ = {isa = PBXBuildFile; fileRef = 753C50E09FE1248725367386 /* TuistBundle+MagicWeather.swift */; };
/* End PBXBuildFile section */
/* Begin PBXCopyFilesBuildPhase section */
1A1F97EAA1D19CF6DA81AE1E /* Embed Frameworks */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 10;
files = (
2F704AC77AEC2A10D7C04E02 /* RevenueCat.framework in Embed Frameworks */,
698C26102B365A2FD84131DA /* RevenueCatUI.framework in Embed Frameworks */,
);
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
5539DF1C258806A10073FB19 /* Errors.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Errors.swift; sourceTree = "<group>"; };
5539DF1F25880AB80073FB19 /* WeatherViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WeatherViewController.swift; sourceTree = "<group>"; };
5539DF23258A9AA70073FB19 /* SampleData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SampleData.swift; sourceTree = "<group>"; };
5539DF2C2592A0790073FB19 /* SplashScreen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = SplashScreen.storyboard; sourceTree = "<group>"; };
5539DF2F2592A0C30073FB19 /* SplashScreenViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SplashScreenViewController.swift; sourceTree = "<group>"; };
5539DF392593E6D90073FB19 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = "<group>"; };
5575FD48258801DE001B2F0D /* UserViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserViewController.swift; sourceTree = "<group>"; };
5576344225A3C08400C0486A /* PackageCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PackageCell.swift; sourceTree = "<group>"; };
5582ECD32587EF8500ACB34B /* MagicWeather.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MagicWeather.app; sourceTree = BUILT_PRODUCTS_DIR; };
5582ECD62587EF8500ACB34B /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
5582ECD82587EF8500ACB34B /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = "<group>"; };
5582ECDD2587EF8500ACB34B /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
5582ECDF2587EF8800ACB34B /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
5582ECE22587EF8800ACB34B /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
5582ECE42587EF8800ACB34B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
5582ECF92587F29600ACB34B /* Constants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Constants.swift; sourceTree = "<group>"; };
00B11FF935E6C87A5BE6E8A8 /* RevenueCat.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RevenueCat.framework; sourceTree = BUILT_PRODUCTS_DIR; };
0967EDE23CD011015F4D0613 /* UserViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserViewController.swift; sourceTree = "<group>"; };
0E83BD63E6C2A1D892E52B04 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
33C3B1CAFF9927CE41F9CD70 /* TuistAssets+MagicWeather.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TuistAssets+MagicWeather.swift"; sourceTree = "<group>"; };
36B758C57A6EE6FE6212141C /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = "<group>"; };
67FC64E0DA7B5D33517AF018 /* RevenueCatUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RevenueCatUI.framework; sourceTree = BUILT_PRODUCTS_DIR; };
6A459CB95735D6FC471FD001 /* WeatherViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WeatherViewController.swift; sourceTree = "<group>"; };
6F1BA8A04F72922EBAD819DA /* Constants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Constants.swift; sourceTree = "<group>"; };
6F3D4E82CB455B1FD93D38AA /* SplashScreenViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SplashScreenViewController.swift; sourceTree = "<group>"; };
753C50E09FE1248725367386 /* TuistBundle+MagicWeather.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TuistBundle+MagicWeather.swift"; sourceTree = "<group>"; };
992DA96B41D15177E3631D3D /* Errors.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Errors.swift; sourceTree = "<group>"; };
A90A08146AE8C005B05144A5 /* PackageCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PackageCell.swift; sourceTree = "<group>"; };
B7D83641A3BEA2A80D59F60A /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
BBF3C1C7DC749E6602010842 /* MagicWeather-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "MagicWeather-Info.plist"; sourceTree = "<group>"; };
D519AE4B2AB9A5325985CF36 /* SampleData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SampleData.swift; sourceTree = "<group>"; };
F19D7D4D26AA12B64F5C344F /* MagicWeather.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MagicWeather.app; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
5582ECD02587EF8500ACB34B /* Frameworks */ = {
27C1CDA5786808E35C926307 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
4E9E1B302CAD38EC00B51150 /* RevenueCatUI in Frameworks */,
4E9E1B2E2CAD38EC00B51150 /* RevenueCat in Frameworks */,
73679D6C3DB163AD856BE20A /* RevenueCat.framework in Frameworks */,
E2A3591BA48FDC19ED0C22C9 /* RevenueCatUI.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
5576344125A3C06E00C0486A /* Views */ = {
1ADC5528742C8FC02CE97362 /* MagicWeather */ = {
isa = PBXGroup;
children = (
5576344225A3C08400C0486A /* PackageCell.swift */,
);
path = Views;
sourceTree = "<group>";
};
5582ECCA2587EF8500ACB34B = {
isa = PBXGroup;
children = (
5539DF392593E6D90073FB19 /* README.md */,
5582ECD52587EF8500ACB34B /* MagicWeather */,
5582ECD42587EF8500ACB34B /* Products */,
8380C26426FE001500922AB1 /* Frameworks */,
);
sourceTree = "<group>";
};
5582ECD42587EF8500ACB34B /* Products */ = {
isa = PBXGroup;
children = (
5582ECD32587EF8500ACB34B /* MagicWeather.app */,
);
name = Products;
sourceTree = "<group>";
};
5582ECD52587EF8500ACB34B /* MagicWeather */ = {
isa = PBXGroup;
children = (
5582ECF92587F29600ACB34B /* Constants.swift */,
5582ECEF2587EFD100ACB34B /* Sources */,
5582ECF42587F01E00ACB34B /* Resources */,
C4DD375A7F60D2C73E3110C2 /* Resources */,
98BCB06BF3D4F9B80450B731 /* Sources */,
6F1BA8A04F72922EBAD819DA /* Constants.swift */,
);
path = MagicWeather;
sourceTree = "<group>";
};
5582ECEF2587EFD100ACB34B /* Sources */ = {
27BCC4FE59AAAA420C21265B /* Views */ = {
isa = PBXGroup;
children = (
5582ECF22587F01100ACB34B /* Lifecycle */,
5582ECF12587EFFE00ACB34B /* Controllers */,
5576344125A3C06E00C0486A /* Views */,
5582ECF82587F28500ACB34B /* Helpers */,
A90A08146AE8C005B05144A5 /* PackageCell.swift */,
);
path = Views;
sourceTree = "<group>";
};
47A2962F7A060F89C47C162C /* Sources */ = {
isa = PBXGroup;
children = (
33C3B1CAFF9927CE41F9CD70 /* TuistAssets+MagicWeather.swift */,
753C50E09FE1248725367386 /* TuistBundle+MagicWeather.swift */,
);
path = Sources;
sourceTree = "<group>";
};
5582ECF12587EFFE00ACB34B /* Controllers */ = {
68B0497CA188975AE9EECB71 /* Helpers */ = {
isa = PBXGroup;
children = (
5539DF2F2592A0C30073FB19 /* SplashScreenViewController.swift */,
5575FD48258801DE001B2F0D /* UserViewController.swift */,
5539DF1F25880AB80073FB19 /* WeatherViewController.swift */,
);
path = Controllers;
sourceTree = "<group>";
};
5582ECF22587F01100ACB34B /* Lifecycle */ = {
isa = PBXGroup;
children = (
5582ECD62587EF8500ACB34B /* AppDelegate.swift */,
5582ECD82587EF8500ACB34B /* SceneDelegate.swift */,
);
path = Lifecycle;
sourceTree = "<group>";
};
5582ECF42587F01E00ACB34B /* Resources */ = {
isa = PBXGroup;
children = (
5582ECF52587F02400ACB34B /* UI */,
5582ECDF2587EF8800ACB34B /* Assets.xcassets */,
5582ECE12587EF8800ACB34B /* LaunchScreen.storyboard */,
5582ECE42587EF8800ACB34B /* Info.plist */,
);
path = Resources;
sourceTree = "<group>";
};
5582ECF52587F02400ACB34B /* UI */ = {
isa = PBXGroup;
children = (
5582ECDC2587EF8500ACB34B /* Main.storyboard */,
5539DF2C2592A0790073FB19 /* SplashScreen.storyboard */,
);
path = UI;
sourceTree = "<group>";
};
5582ECF82587F28500ACB34B /* Helpers */ = {
isa = PBXGroup;
children = (
5539DF1C258806A10073FB19 /* Errors.swift */,
5539DF23258A9AA70073FB19 /* SampleData.swift */,
992DA96B41D15177E3631D3D /* Errors.swift */,
D519AE4B2AB9A5325985CF36 /* SampleData.swift */,
);
path = Helpers;
sourceTree = "<group>";
};
8380C26426FE001500922AB1 /* Frameworks */ = {
6A571EB63F5968A07C8B2900 /* Controllers */ = {
isa = PBXGroup;
children = (
6F3D4E82CB455B1FD93D38AA /* SplashScreenViewController.swift */,
0967EDE23CD011015F4D0613 /* UserViewController.swift */,
6A459CB95735D6FC471FD001 /* WeatherViewController.swift */,
);
name = Frameworks;
path = Controllers;
sourceTree = "<group>";
};
927575168FFC0306B47AEE2F /* Derived */ = {
isa = PBXGroup;
children = (
C7DDEE374E324341D0012216 /* InfoPlists */,
47A2962F7A060F89C47C162C /* Sources */,
);
path = Derived;
sourceTree = "<group>";
};
98BCB06BF3D4F9B80450B731 /* Sources */ = {
isa = PBXGroup;
children = (
6A571EB63F5968A07C8B2900 /* Controllers */,
68B0497CA188975AE9EECB71 /* Helpers */,
A5FA5D2585CCC0DB760FD70F /* Lifecycle */,
27BCC4FE59AAAA420C21265B /* Views */,
);
path = Sources;
sourceTree = "<group>";
};
A5FA5D2585CCC0DB760FD70F /* Lifecycle */ = {
isa = PBXGroup;
children = (
0E83BD63E6C2A1D892E52B04 /* AppDelegate.swift */,
36B758C57A6EE6FE6212141C /* SceneDelegate.swift */,
);
path = Lifecycle;
sourceTree = "<group>";
};
AD7BBA323B2BE5671D526E23 = {
isa = PBXGroup;
children = (
F0B41D56B75357AA98087904 /* Project */,
E9A8966EEC7AEB12321CA495 /* Products */,
);
sourceTree = "<group>";
};
C4DD375A7F60D2C73E3110C2 /* Resources */ = {
isa = PBXGroup;
children = (
B7D83641A3BEA2A80D59F60A /* Assets.xcassets */,
);
path = Resources;
sourceTree = "<group>";
};
C7DDEE374E324341D0012216 /* InfoPlists */ = {
isa = PBXGroup;
children = (
BBF3C1C7DC749E6602010842 /* MagicWeather-Info.plist */,
);
path = InfoPlists;
sourceTree = "<group>";
};
E9A8966EEC7AEB12321CA495 /* Products */ = {
isa = PBXGroup;
children = (
F19D7D4D26AA12B64F5C344F /* MagicWeather.app */,
00B11FF935E6C87A5BE6E8A8 /* RevenueCat.framework */,
67FC64E0DA7B5D33517AF018 /* RevenueCatUI.framework */,
);
name = Products;
sourceTree = "<group>";
};
F0B41D56B75357AA98087904 /* Project */ = {
isa = PBXGroup;
children = (
927575168FFC0306B47AEE2F /* Derived */,
1ADC5528742C8FC02CE97362 /* MagicWeather */,
);
name = Project;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
5582ECD22587EF8500ACB34B /* MagicWeather */ = {
8CA00CCCA2D8A3F7370C14CB /* MagicWeather */ = {
isa = PBXNativeTarget;
buildConfigurationList = 5582ECE72587EF8800ACB34B /* Build configuration list for PBXNativeTarget "MagicWeather" */;
buildConfigurationList = 4A22AF8B35CDF2F1BB74343B /* Build configuration list for PBXNativeTarget "MagicWeather" */;
buildPhases = (
5582ECCF2587EF8500ACB34B /* Sources */,
5582ECD02587EF8500ACB34B /* Frameworks */,
5582ECD12587EF8500ACB34B /* Resources */,
0F6EA5C9012E5EFF4FEFE7CA /* Sources */,
DC138E2BE3D049A6372E9A77 /* Resources */,
27C1CDA5786808E35C926307 /* Frameworks */,
1A1F97EAA1D19CF6DA81AE1E /* Embed Frameworks */,
);
buildRules = (
);
@@ -175,105 +208,76 @@
);
name = MagicWeather;
packageProductDependencies = (
4E9E1B2D2CAD38EC00B51150 /* RevenueCat */,
4E9E1B2F2CAD38EC00B51150 /* RevenueCatUI */,
);
productName = "Magic Weather";
productReference = 5582ECD32587EF8500ACB34B /* MagicWeather.app */;
productName = MagicWeather;
productReference = F19D7D4D26AA12B64F5C344F /* MagicWeather.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
5582ECCB2587EF8500ACB34B /* Project object */ = {
6F6DC1CDA4E7E5EE45D2566A /* Project object */ = {
isa = PBXProject;
attributes = {
LastSwiftUpdateCheck = 1220;
LastUpgradeCheck = 1220;
TargetAttributes = {
5582ECD22587EF8500ACB34B = {
CreatedOnToolsVersion = 12.2;
};
};
BuildIndependentTargetsInParallel = YES;
ORGANIZATIONNAME = "RevenueCat, Inc.";
};
buildConfigurationList = 5582ECCE2587EF8500ACB34B /* Build configuration list for PBXProject "MagicWeather" */;
compatibilityVersion = "Xcode 9.3";
buildConfigurationList = 05BAB7B35F477C6D1EE6374B /* Build configuration list for PBXProject "MagicWeather" */;
compatibilityVersion = "Xcode 14.0";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
en,
);
mainGroup = 5582ECCA2587EF8500ACB34B;
packageReferences = (
4E9E1B2C2CAD38EC00B51150 /* XCRemoteSwiftPackageReference "purchases-ios-spm" */,
);
productRefGroup = 5582ECD42587EF8500ACB34B /* Products */;
mainGroup = AD7BBA323B2BE5671D526E23;
productRefGroup = E9A8966EEC7AEB12321CA495 /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
5582ECD22587EF8500ACB34B /* MagicWeather */,
8CA00CCCA2D8A3F7370C14CB /* MagicWeather */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
5582ECD12587EF8500ACB34B /* Resources */ = {
DC138E2BE3D049A6372E9A77 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
5582ECE32587EF8800ACB34B /* LaunchScreen.storyboard in Resources */,
5539DF2D2592A07A0073FB19 /* SplashScreen.storyboard in Resources */,
5582ECE02587EF8800ACB34B /* Assets.xcassets in Resources */,
5582ECDE2587EF8500ACB34B /* Main.storyboard in Resources */,
3BDE45EEBBAC64E164985840 /* Assets.xcassets in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
5582ECCF2587EF8500ACB34B /* Sources */ = {
0F6EA5C9012E5EFF4FEFE7CA /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
5576344325A3C08400C0486A /* PackageCell.swift in Sources */,
5575FD49258801DE001B2F0D /* UserViewController.swift in Sources */,
5539DF24258A9AA70073FB19 /* SampleData.swift in Sources */,
5582ECD72587EF8500ACB34B /* AppDelegate.swift in Sources */,
5582ECD92587EF8500ACB34B /* SceneDelegate.swift in Sources */,
5539DF2025880AB80073FB19 /* WeatherViewController.swift in Sources */,
5539DF1D258806A10073FB19 /* Errors.swift in Sources */,
5539DF302592A0C30073FB19 /* SplashScreenViewController.swift in Sources */,
5582ECFA2587F29600ACB34B /* Constants.swift in Sources */,
332A944A5C236E8A82994333 /* TuistAssets+MagicWeather.swift in Sources */,
EF8E3C9CE86F24B1D7DA9E35 /* TuistBundle+MagicWeather.swift in Sources */,
A9AD191CE4BA312FA9E100C3 /* Constants.swift in Sources */,
5B4E25CAAA4308DE19AAE7B7 /* SplashScreenViewController.swift in Sources */,
ABEC5D02D4D9C42BC19BBDBD /* UserViewController.swift in Sources */,
924992EF3ACDCBA9B579CBA3 /* WeatherViewController.swift in Sources */,
51DF56C7C248B3A0B686D3F4 /* Errors.swift in Sources */,
D77941F01F2E367E6CF11536 /* SampleData.swift in Sources */,
8DCF484195A00B76F1857EB2 /* AppDelegate.swift in Sources */,
A09967C4A53DA1E90827AD11 /* SceneDelegate.swift in Sources */,
1065CCB4BB3E94D66A063E21 /* PackageCell.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXVariantGroup section */
5582ECDC2587EF8500ACB34B /* Main.storyboard */ = {
isa = PBXVariantGroup;
children = (
5582ECDD2587EF8500ACB34B /* Base */,
);
name = Main.storyboard;
sourceTree = "<group>";
};
5582ECE12587EF8800ACB34B /* LaunchScreen.storyboard */ = {
isa = PBXVariantGroup;
children = (
5582ECE22587EF8800ACB34B /* Base */,
);
name = LaunchScreen.storyboard;
sourceTree = "<group>";
};
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
5582ECE52587EF8800ACB34B /* Debug */ = {
657983500F013B37ABFD9576 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
@@ -304,6 +308,7 @@
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
DEAD_CODE_STRIPPING = YES;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
@@ -321,20 +326,44 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
PRODUCT_NAME = "$(TARGET_NAME)";
};
name = Debug;
};
5582ECE62587EF8800ACB34B /* Release */ = {
9659AE5917ED4016C858310D /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_IDENTITY = "iPhone Developer";
CODE_SIGN_STYLE = Automatic;
DEVELOPMENT_TEAM = 8SXR2327BM;
ENABLE_PREVIEWS = YES;
INFOPLIST_FILE = "Derived/InfoPlists/MagicWeather-Info.plist";
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = com.revenuecat.sampleapp;
PRODUCT_NAME = MagicWeather;
SDKROOT = iphoneos;
SUPPORTS_MACCATALYST = NO;
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES;
SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
SWIFT_COMPILATION_MODE = wholemodule;
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Release;
};
96E0A57DF5232981213D6340 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
@@ -365,6 +394,7 @@
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
DEAD_CODE_STRIPPING = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
@@ -376,102 +406,65 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = iphoneos;
SWIFT_COMPILATION_MODE = wholemodule;
SWIFT_OPTIMIZATION_LEVEL = "-O";
PRODUCT_NAME = "$(TARGET_NAME)";
VALIDATE_PRODUCT = YES;
};
name = Release;
};
5582ECE82587EF8800ACB34B /* Debug */ = {
AA39FA72F2986C451DAD16C5 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_IDENTITY = "iPhone Developer";
CODE_SIGN_STYLE = Automatic;
DEVELOPMENT_TEAM = "";
INFOPLIST_FILE = MagicWeather/Resources/Info.plist;
DEVELOPMENT_TEAM = 8SXR2327BM;
ENABLE_PREVIEWS = YES;
INFOPLIST_FILE = "Derived/InfoPlists/MagicWeather-Info.plist";
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = com.revenuecat.sampleapp;
PRODUCT_NAME = "$(TARGET_NAME)";
PRODUCT_NAME = MagicWeather;
SDKROOT = iphoneos;
SUPPORTS_MACCATALYST = NO;
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES;
SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = (
"$(inherited)",
DEBUG,
);
SWIFT_COMPILATION_MODE = singlefile;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Debug;
};
5582ECE92587EF8800ACB34B /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_STYLE = Automatic;
DEVELOPMENT_TEAM = "";
INFOPLIST_FILE = MagicWeather/Resources/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = com.revenuecat.sampleapp;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
5582ECCE2587EF8500ACB34B /* Build configuration list for PBXProject "MagicWeather" */ = {
05BAB7B35F477C6D1EE6374B /* Build configuration list for PBXProject "MagicWeather" */ = {
isa = XCConfigurationList;
buildConfigurations = (
5582ECE52587EF8800ACB34B /* Debug */,
5582ECE62587EF8800ACB34B /* Release */,
657983500F013B37ABFD9576 /* Debug */,
96E0A57DF5232981213D6340 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
5582ECE72587EF8800ACB34B /* Build configuration list for PBXNativeTarget "MagicWeather" */ = {
4A22AF8B35CDF2F1BB74343B /* Build configuration list for PBXNativeTarget "MagicWeather" */ = {
isa = XCConfigurationList;
buildConfigurations = (
5582ECE82587EF8800ACB34B /* Debug */,
5582ECE92587EF8800ACB34B /* Release */,
AA39FA72F2986C451DAD16C5 /* Debug */,
9659AE5917ED4016C858310D /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
/* Begin XCRemoteSwiftPackageReference section */
4E9E1B2C2CAD38EC00B51150 /* XCRemoteSwiftPackageReference "purchases-ios-spm" */ = {
isa = XCRemoteSwiftPackageReference;
repositoryURL = "https://github.com/RevenueCat/purchases-ios-spm";
requirement = {
kind = upToNextMajorVersion;
minimumVersion = 5.5.0;
};
};
/* End XCRemoteSwiftPackageReference section */
/* Begin XCSwiftPackageProductDependency section */
4E9E1B2D2CAD38EC00B51150 /* RevenueCat */ = {
isa = XCSwiftPackageProductDependency;
package = 4E9E1B2C2CAD38EC00B51150 /* XCRemoteSwiftPackageReference "purchases-ios-spm" */;
productName = RevenueCat;
};
4E9E1B2F2CAD38EC00B51150 /* RevenueCatUI */ = {
isa = XCSwiftPackageProductDependency;
package = 4E9E1B2C2CAD38EC00B51150 /* XCRemoteSwiftPackageReference "purchases-ios-spm" */;
productName = RevenueCatUI;
};
/* End XCSwiftPackageProductDependency section */
};
rootObject = 5582ECCB2587EF8500ACB34B /* Project object */;
rootObject = 6F6DC1CDA4E7E5EE45D2566A /* Project object */;
}
+36
View File
@@ -0,0 +1,36 @@
import ProjectDescription
import ProjectDescriptionHelpers
let project = Project(
name: "MagicWeather",
organizationName: .revenueCatOrgName,
targets: [
.target(
name: "MagicWeather",
destinations: .iOS,
product: .app,
bundleId: "com.revenuecat.sampleapp",
deploymentTargets: .iOS("15.0"),
infoPlist: .extendingDefault(
with: [
"UILaunchScreen": [
"UIColorName": "",
"UIImageName": "",
]
]
),
sources: [
"MagicWeather/Sources/**/*.swift",
"MagicWeather/Constants.swift"
],
resources: [
"MagicWeather/Resources/**/*.xcassets",
],
dependencies: [
.revenueCat,
.revenueCatUI,
],
settings: .settings(base: [:].automaticCodeSigning(devTeam: .revenueCatTeamID))
)
]
)
@@ -0,0 +1,48 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>UIApplicationSceneManifest</key>
<dict>
<key>UIApplicationSupportsMultipleScenes</key>
<false/>
</dict>
<key>UIApplicationSupportsIndirectInputEvents</key>
<true/>
<key>UILaunchScreen</key>
<dict/>
<key>UIRequiredDeviceCapabilities</key>
<array>
<string>armv7</string>
</array>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
</array>
<key>UISupportedInterfaceOrientations~ipad</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationPortraitUpsideDown</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
</dict>
</plist>
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict/>
</plist>
@@ -0,0 +1,36 @@
import ProjectDescription
import ProjectDescriptionHelpers
let project = Project(
name: "MagicWeatherSwiftUI",
organizationName: .revenueCatOrgName,
settings: .settings(base: [:].automaticCodeSigning(devTeam: .revenueCatTeamID)),
targets: [
.target(
name: "MagicWeatherSwiftUI",
destinations: .iOS,
product: .app,
bundleId: "com.revenuecat.sampleapp",
deploymentTargets: .iOS("15.0"),
infoPlist: .extendingDefault(
with: [
"UILaunchScreen": [
"UIColorName": "",
"UIImageName": "",
]
]
),
sources: [
"MagicWeatherSwiftUI/Sources/**/*.swift",
"MagicWeatherSwiftUI/Constants.swift"
],
resources: [
"MagicWeatherSwiftUI/Resources/**/*.xcassets",
],
dependencies: [
.revenueCat,
.revenueCatUI,
]
)
],
)
+117
View File
@@ -0,0 +1,117 @@
import ProjectDescription
import ProjectDescriptionHelpers
let destinations: Destinations = [
.iPhone,
.iPad,
.mac,
.macCatalyst,
.appleTv,
.appleVision
]
let deploymentTargets: DeploymentTargets = .multiplatform(
iOS: "15.2",
macOS: "13.0",
tvOS: "15.2",
visionOS: "1.3"
)
let allDeploymentTargets: DeploymentTargets = .multiplatform(
iOS: "15.2",
macOS: "13.0",
watchOS: "8.0",
tvOS: "15.2",
visionOS: "1.3"
)
let allDestinations = destinations + [.appleWatch]
let project = Project(
name: "PurchaseTester",
organizationName: .revenueCatOrgName,
settings: .settings(base: [:].automaticCodeSigning(devTeam: .revenueCatTeamID)),
targets: [
.target(
name: "PurchaseTester",
destinations: destinations,
product: .app,
bundleId: "com.revenuecat.sampleapp",
deploymentTargets: deploymentTargets,
infoPlist: "../../Tests/TestingApps/PurchaseTesterSwiftUI/PurchaseTester-Info.plist",
sources: [
"../../Tests/TestingApps/PurchaseTesterSwiftUI/Shared/**/*.swift",
],
resources: [
"../../Tests/TestingApps/PurchaseTesterSwiftUI/AppIcon.xcassets",
"../../Tests/TestingApps/PurchaseTesterSwiftUI/Shared/Assets.xcassets",
"../../Tests/TestingApps/PurchaseTesterSwiftUI/Resources/**/LaunchScreen.storyboard",
],
dependencies: [
.target(name: "Core")
],
additionalFiles: [
"../../Tests/TestingApps/PurchaseTesterSwiftUI/PurchaseTester.entitlements",
"../../Tests/TestingApps/PurchaseTesterSwiftUI/PurchaseTesterStoreKitConfiguration.storekit"
]
),
.target(
name: "PurchaseTesterWatchOS",
destinations: [.appleWatch],
product: .app,
bundleId: "com.revenuecat.sampleapp.watchkitapp",
deploymentTargets: .watchOS("8.0"),
infoPlist: "../../Tests/TestingApps/PurchaseTesterSwiftUI/PurchaseTesterWatchOS/Info.plist",
sources: [
"../../Tests/TestingApps/PurchaseTesterSwiftUI/PurchaseTesterWatchOS/**/*.swift"
],
resources: [
"../../Tests/TestingApps/PurchaseTesterSwiftUI/AppIcon.xcassets",
"../../Tests/TestingApps/PurchaseTesterSwiftUI/Shared/Assets.xcassets",
],
dependencies: [
.target(name: "Core")
]
),
.target(
name: "Core",
destinations: Set(allDestinations),
product: .framework,
bundleId: "com.revenuecat.Core",
deploymentTargets: allDeploymentTargets,
sources: [
"../../Tests/TestingApps/PurchaseTesterSwiftUI/Core/**/*.swift",
],
dependencies: [
.revenueCat,
.revenueCatUI,
.receiptparser,
]
),
],
schemes: [
.scheme(
name: "PurchaseTester",
shared: true,
buildAction: .buildAction(targets: ["PurchaseTester"], findImplicitDependencies: true),
runAction: .runAction(
configuration: "Debug",
executable: "PurchaseTester",
options: .options(
storeKitConfigurationPath: "../../Tests/TestingApps/PurchaseTesterSwiftUI/PurchaseTesterStoreKitConfiguration.storekit"
)
)
),
.scheme(
name: "PurchaseTesterWatchOS",
shared: true,
buildAction: .buildAction(targets: ["PurchaseTesterWatchOS"], findImplicitDependencies: true),
runAction: .runAction(
configuration: "Debug",
executable: "PurchaseTesterWatchOS"
)
)
]
)
-73
View File
@@ -1,73 +0,0 @@
### macOS ###
# General
.DS_Store
.AppleDouble
.LSOverride
# Icon must end with two
Icon
# Thumbnails
._*
# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent
# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk
### Xcode ###
# Xcode
#
# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
## User settings
xcuserdata/
## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9)
*.xcscmblueprint
*.xccheckout
## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4)
build/
DerivedData/
*.moved-aside
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
### Xcode Patch ###
*.xcodeproj/*
!*.xcodeproj/project.pbxproj
!*.xcodeproj/xcshareddata/
!*.xcworkspace/contents.xcworkspacedata
/*.gcno
### Projects ###
*.xcodeproj
*.xcworkspace
### Tuist derived files ###
graph.dot
Derived/
### Tuist managed dependencies ###
Tuist/.build
### xcconfig
**/Local.xcconfig
Whitespace-only changes.
@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "group:Maestro.xcodeproj">
</FileRef>
<Group
location = "container:"
name = "Dependencies">
<FileRef
location = "group:Tuist/.build/tuist-derived/RevenueCat/RevenueCat.xcodeproj">
</FileRef>
</Group>
</Workspace>
+17 -11
View File
@@ -1,12 +1,21 @@
import ProjectDescription
import ProjectDescriptionHelpers
import Foundation
var additionalFiles: [FileElement] = [
.glob(pattern: "rc-maestro/Resources/**/Local.xcconfig.sample")
]
var shouldAddLocalConfig: Bool = false
if FileManager.default.fileExists(atPath: "rc-maestro/Resources/**/Local.xcconfig") {
shouldAddLocalConfig = true
additionalFiles.append(.glob(pattern: "rc-maestro/Resources/**/Local.xcconfig"))
}
let project = Project(
name: "Maestro",
organizationName: "RevenueCat",
organizationName: .revenueCatOrgName,
settings: .settings(
configurations: [
.debug(name: "Debug", xcconfig: .relativeToManifest("rc-maestro/Resources/Local.xcconfig"))
],
base: [:].automaticCodeSigning(devTeam: .revenueCatTeamID),
defaultSettings: .essential
),
targets: [
@@ -30,9 +39,9 @@ let project = Project(
"rc-maestro/Resources/**/*.xcassets",
],
dependencies: [
.external(name: "RevenueCat"),
.external(name: "RevenueCatUI"),
.sdk(name: "StoreKit", type: .framework, status: .required)
.revenueCat,
.revenueCatUI,
.storeKit
]
)
],
@@ -51,8 +60,5 @@ let project = Project(
)
)
],
additionalFiles: [
"rc-maestro/Resources/**/Local.xcconfig.sample",
"rc-maestro/Resources/**/Local.xcconfig"
]
additionalFiles: additionalFiles
)
-3
View File
@@ -1,3 +0,0 @@
import ProjectDescription
let tuist = Tuist(project: .tuist())
-24
View File
@@ -1,24 +0,0 @@
// swift-tools-version: 6.0
@preconcurrency import PackageDescription
#if TUIST
import ProjectDescription
let packageSettings = PackageSettings(
productTypes: [
"RevenueCat": .framework,
"RevenueCatUI": .framework // default is .staticFramework
]
)
#endif
let package = Package(
name: "Dependencies",
dependencies: [
.package(
url: "https://github.com/RevenueCat/purchases-ios",
branch: "main"
),
]
)
@@ -0,0 +1,43 @@
import ProjectDescription
import ProjectDescriptionHelpers
let allDestinations: Destinations = [
.iPhone,
.iPad,
.macWithiPadDesign,
.appleVisionWithiPadDesign
]
let project = Project(
name: "testCustomEntitlementsComputation",
organizationName: .revenueCatOrgName,
settings: .settings(base: [:].automaticCodeSigning(devTeam: .revenueCatTeamID)),
targets: [
.target(
name: "testCustomEntitlementsComputation",
destinations: allDestinations,
product: .app,
bundleId: "com.revenuecat.sampleapp",
deploymentTargets: .iOS("15.0"),
infoPlist: .extendingDefault(
with: [
"UILaunchScreen": [
"UIColorName": "",
"UIImageName": "",
]
]
),
sources: [
"testCustomEntitlementsComputation/Sources/**/*.swift",
"testCustomEntitlementsComputation/Constants.swift"
],
resources: [
"testCustomEntitlementsComputation/Resources/**/*.xcassets",
],
dependencies: [
.revenueCat,
.revenueCatUI,
]
)
],
)
@@ -3,95 +3,165 @@
archiveVersion = 1;
classes = {
};
objectVersion = 56;
objectVersion = 55;
objects = {
/* Begin PBXBuildFile section */
2D276F5629F1C85700F51382 /* testCustomEntitlementsComputationApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D276F5529F1C85700F51382 /* testCustomEntitlementsComputationApp.swift */; };
2D276F5829F1C85700F51382 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D276F5729F1C85700F51382 /* ContentView.swift */; };
2D276F5A29F1C85800F51382 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2D276F5929F1C85800F51382 /* Assets.xcassets */; };
2D276F5D29F1C85800F51382 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2D276F5C29F1C85800F51382 /* Preview Assets.xcassets */; };
2DB0898929F30ABD00A4DAE7 /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DB0898829F30ABD00A4DAE7 /* Constants.swift */; };
5714383029F86B4400CC2D44 /* RevenueCat_CustomEntitlementComputation in Frameworks */ = {isa = PBXBuildFile; productRef = 5714382F29F86B4400CC2D44 /* RevenueCat_CustomEntitlementComputation */; };
08925B4E584FC5D20CA59FBE /* TuistBundle+TestCustomEntitlementsComputation.swift in Sources */ = {isa = PBXBuildFile; fileRef = B279D5A7966CB41CCBF05D66 /* TuistBundle+TestCustomEntitlementsComputation.swift */; };
165EA4DBD39926FC9A7FF580 /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2AE116B293A2B413F35DFEAD /* Constants.swift */; };
2185E8F026F4ED75FACD2635 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2B97AF29CED8B6B137A91DBC /* Assets.xcassets */; };
2451FCD2806B9E943175C4C6 /* RevenueCat.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DBA5CC143913C7C0176E9BC0 /* RevenueCat.framework */; };
372A6651DC7ABDE7AA4C0DB8 /* TuistAssets+TestCustomEntitlementsComputation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F7B3A4A14B2E020B9CE706B /* TuistAssets+TestCustomEntitlementsComputation.swift */; };
4BE4152BEE86A9A5B28D9F9C /* RevenueCat.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = DBA5CC143913C7C0176E9BC0 /* RevenueCat.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
682A311FBF1D51A8F99BB80B /* RevenueCatUI.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 7B56A335C3599AE98135A29B /* RevenueCatUI.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
934F4A57DA874AB9FEC7DEAE /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4299FA8156FAC6F41B1D3E2E /* ContentView.swift */; };
988FDB03EA1FAA46FD5D4060 /* testCustomEntitlementsComputationApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1AE9B635F241F5E679A0AA70 /* testCustomEntitlementsComputationApp.swift */; };
C5E7710847748C154EF4D353 /* RevenueCatUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7B56A335C3599AE98135A29B /* RevenueCatUI.framework */; };
F060823B8F8D63C71CEED067 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 5D3D43B0F1902135F3556572 /* Preview Assets.xcassets */; };
/* End PBXBuildFile section */
/* Begin PBXCopyFilesBuildPhase section */
DEDB9AEAB198712CBD836B3D /* Embed Frameworks */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 10;
files = (
4BE4152BEE86A9A5B28D9F9C /* RevenueCat.framework in Embed Frameworks */,
682A311FBF1D51A8F99BB80B /* RevenueCatUI.framework in Embed Frameworks */,
);
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
2D276F5229F1C85700F51382 /* testCustomEntitlementsComputation.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = testCustomEntitlementsComputation.app; sourceTree = BUILT_PRODUCTS_DIR; };
2D276F5529F1C85700F51382 /* testCustomEntitlementsComputationApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = testCustomEntitlementsComputationApp.swift; sourceTree = "<group>"; };
2D276F5729F1C85700F51382 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = "<group>"; };
2D276F5929F1C85800F51382 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
2D276F5C29F1C85800F51382 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = "<group>"; };
2DB0898829F30ABD00A4DAE7 /* Constants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Constants.swift; sourceTree = "<group>"; };
2DB0899029F32C9400A4DAE7 /* purchases-ios */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = "purchases-ios"; path = ../../..; sourceTree = "<group>"; };
1AE9B635F241F5E679A0AA70 /* testCustomEntitlementsComputationApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = testCustomEntitlementsComputationApp.swift; sourceTree = "<group>"; };
2AE116B293A2B413F35DFEAD /* Constants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Constants.swift; sourceTree = "<group>"; };
2B97AF29CED8B6B137A91DBC /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
2F7B3A4A14B2E020B9CE706B /* TuistAssets+TestCustomEntitlementsComputation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TuistAssets+TestCustomEntitlementsComputation.swift"; sourceTree = "<group>"; };
4299FA8156FAC6F41B1D3E2E /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = "<group>"; };
57BE31076EE78CAC5D802898 /* testCustomEntitlementsComputation-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "testCustomEntitlementsComputation-Info.plist"; sourceTree = "<group>"; };
5D3D43B0F1902135F3556572 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = "<group>"; };
7B56A335C3599AE98135A29B /* RevenueCatUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RevenueCatUI.framework; sourceTree = BUILT_PRODUCTS_DIR; };
ABECB7BAA86F9315475B0DC4 /* testCustomEntitlementsComputation.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = testCustomEntitlementsComputation.app; sourceTree = BUILT_PRODUCTS_DIR; };
B279D5A7966CB41CCBF05D66 /* TuistBundle+TestCustomEntitlementsComputation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TuistBundle+TestCustomEntitlementsComputation.swift"; sourceTree = "<group>"; };
DBA5CC143913C7C0176E9BC0 /* RevenueCat.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RevenueCat.framework; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
2D276F4F29F1C85700F51382 /* Frameworks */ = {
7E2DEFF12B0AA3C1D3DA9A28 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
5714383029F86B4400CC2D44 /* RevenueCat_CustomEntitlementComputation in Frameworks */,
2451FCD2806B9E943175C4C6 /* RevenueCat.framework in Frameworks */,
C5E7710847748C154EF4D353 /* RevenueCatUI.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
2D276F4929F1C85700F51382 = {
0707E46784F11FB53488F02E /* Preview Content */ = {
isa = PBXGroup;
children = (
2D276F5429F1C85700F51382 /* testCustomEntitlementsComputation */,
2D276F5329F1C85700F51382 /* Products */,
2DB0899129F32C9F00A4DAE7 /* Frameworks */,
);
sourceTree = "<group>";
};
2D276F5329F1C85700F51382 /* Products */ = {
isa = PBXGroup;
children = (
2D276F5229F1C85700F51382 /* testCustomEntitlementsComputation.app */,
);
name = Products;
sourceTree = "<group>";
};
2D276F5429F1C85700F51382 /* testCustomEntitlementsComputation */ = {
isa = PBXGroup;
children = (
2D276F5529F1C85700F51382 /* testCustomEntitlementsComputationApp.swift */,
2D276F5729F1C85700F51382 /* ContentView.swift */,
2D276F5929F1C85800F51382 /* Assets.xcassets */,
2D276F5B29F1C85800F51382 /* Preview Content */,
2DB0898829F30ABD00A4DAE7 /* Constants.swift */,
2DB0899029F32C9400A4DAE7 /* purchases-ios */,
);
path = testCustomEntitlementsComputation;
sourceTree = "<group>";
};
2D276F5B29F1C85800F51382 /* Preview Content */ = {
isa = PBXGroup;
children = (
2D276F5C29F1C85800F51382 /* Preview Assets.xcassets */,
5D3D43B0F1902135F3556572 /* Preview Assets.xcassets */,
);
path = "Preview Content";
sourceTree = "<group>";
};
2DB0899129F32C9F00A4DAE7 /* Frameworks */ = {
07E088A7C1D042A64FC53D06 = {
isa = PBXGroup;
children = (
677B10069913F47E2FAFBBB6 /* Project */,
40E598C55A2D32212EB03801 /* Products */,
);
name = Frameworks;
sourceTree = "<group>";
};
1742866A69D0D9E0B638A3D6 /* Sources */ = {
isa = PBXGroup;
children = (
2F7B3A4A14B2E020B9CE706B /* TuistAssets+TestCustomEntitlementsComputation.swift */,
B279D5A7966CB41CCBF05D66 /* TuistBundle+TestCustomEntitlementsComputation.swift */,
);
path = Sources;
sourceTree = "<group>";
};
1CFCD15AB796063A4BF9406D /* Sources */ = {
isa = PBXGroup;
children = (
4299FA8156FAC6F41B1D3E2E /* ContentView.swift */,
1AE9B635F241F5E679A0AA70 /* testCustomEntitlementsComputationApp.swift */,
);
path = Sources;
sourceTree = "<group>";
};
40E598C55A2D32212EB03801 /* Products */ = {
isa = PBXGroup;
children = (
DBA5CC143913C7C0176E9BC0 /* RevenueCat.framework */,
7B56A335C3599AE98135A29B /* RevenueCatUI.framework */,
ABECB7BAA86F9315475B0DC4 /* testCustomEntitlementsComputation.app */,
);
name = Products;
sourceTree = "<group>";
};
677B10069913F47E2FAFBBB6 /* Project */ = {
isa = PBXGroup;
children = (
A40080F28EB3880802B7FB10 /* Derived */,
E7D1F5B3665A2D7448CCB79D /* testCustomEntitlementsComputation */,
);
name = Project;
sourceTree = "<group>";
};
845B9BF54C2CE410488320FA /* InfoPlists */ = {
isa = PBXGroup;
children = (
57BE31076EE78CAC5D802898 /* testCustomEntitlementsComputation-Info.plist */,
);
path = InfoPlists;
sourceTree = "<group>";
};
A40080F28EB3880802B7FB10 /* Derived */ = {
isa = PBXGroup;
children = (
845B9BF54C2CE410488320FA /* InfoPlists */,
1742866A69D0D9E0B638A3D6 /* Sources */,
);
path = Derived;
sourceTree = "<group>";
};
D2532C3692EA740F87F11286 /* Resources */ = {
isa = PBXGroup;
children = (
0707E46784F11FB53488F02E /* Preview Content */,
2B97AF29CED8B6B137A91DBC /* Assets.xcassets */,
);
path = Resources;
sourceTree = "<group>";
};
E7D1F5B3665A2D7448CCB79D /* testCustomEntitlementsComputation */ = {
isa = PBXGroup;
children = (
D2532C3692EA740F87F11286 /* Resources */,
1CFCD15AB796063A4BF9406D /* Sources */,
2AE116B293A2B413F35DFEAD /* Constants.swift */,
);
path = testCustomEntitlementsComputation;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
2D276F5129F1C85700F51382 /* testCustomEntitlementsComputation */ = {
A87D977F7D7103389A52F6AC /* testCustomEntitlementsComputation */ = {
isa = PBXNativeTarget;
buildConfigurationList = 2D276F6029F1C85800F51382 /* Build configuration list for PBXNativeTarget "testCustomEntitlementsComputation" */;
buildConfigurationList = 91129418DFF6B3F3158762A5 /* Build configuration list for PBXNativeTarget "testCustomEntitlementsComputation" */;
buildPhases = (
2D276F4E29F1C85700F51382 /* Sources */,
2D276F4F29F1C85700F51382 /* Frameworks */,
2D276F5029F1C85700F51382 /* Resources */,
480572A80E3D0E21EB91AB69 /* Sources */,
0C4E874BC2D10DA93EE1A6E5 /* Resources */,
7E2DEFF12B0AA3C1D3DA9A28 /* Frameworks */,
DEDB9AEAB198712CBD836B3D /* Embed Frameworks */,
);
buildRules = (
);
@@ -99,80 +169,129 @@
);
name = testCustomEntitlementsComputation;
packageProductDependencies = (
5714382F29F86B4400CC2D44 /* RevenueCat_CustomEntitlementComputation */,
);
productName = testCustomEntitlementsComputation;
productReference = 2D276F5229F1C85700F51382 /* testCustomEntitlementsComputation.app */;
productReference = ABECB7BAA86F9315475B0DC4 /* testCustomEntitlementsComputation.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
2D276F4A29F1C85700F51382 /* Project object */ = {
0F199CE67194A4C3A8E8CB74 /* Project object */ = {
isa = PBXProject;
attributes = {
BuildIndependentTargetsInParallel = 1;
LastSwiftUpdateCheck = 1430;
LastUpgradeCheck = 1430;
TargetAttributes = {
2D276F5129F1C85700F51382 = {
CreatedOnToolsVersion = 14.3;
};
};
BuildIndependentTargetsInParallel = YES;
ORGANIZATIONNAME = "RevenueCat, Inc.";
};
buildConfigurationList = 2D276F4D29F1C85700F51382 /* Build configuration list for PBXProject "testCustomEntitlementsComputation" */;
buildConfigurationList = 928B6F5BF967A7DC15FFC616 /* Build configuration list for PBXProject "testCustomEntitlementsComputation" */;
compatibilityVersion = "Xcode 14.0";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
en,
);
mainGroup = 2D276F4929F1C85700F51382;
packageReferences = (
);
productRefGroup = 2D276F5329F1C85700F51382 /* Products */;
mainGroup = 07E088A7C1D042A64FC53D06;
productRefGroup = 40E598C55A2D32212EB03801 /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
2D276F5129F1C85700F51382 /* testCustomEntitlementsComputation */,
A87D977F7D7103389A52F6AC /* testCustomEntitlementsComputation */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
2D276F5029F1C85700F51382 /* Resources */ = {
0C4E874BC2D10DA93EE1A6E5 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
2D276F5D29F1C85800F51382 /* Preview Assets.xcassets in Resources */,
2D276F5A29F1C85800F51382 /* Assets.xcassets in Resources */,
2185E8F026F4ED75FACD2635 /* Assets.xcassets in Resources */,
F060823B8F8D63C71CEED067 /* Preview Assets.xcassets in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
2D276F4E29F1C85700F51382 /* Sources */ = {
480572A80E3D0E21EB91AB69 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
2D276F5829F1C85700F51382 /* ContentView.swift in Sources */,
2D276F5629F1C85700F51382 /* testCustomEntitlementsComputationApp.swift in Sources */,
2DB0898929F30ABD00A4DAE7 /* Constants.swift in Sources */,
372A6651DC7ABDE7AA4C0DB8 /* TuistAssets+TestCustomEntitlementsComputation.swift in Sources */,
08925B4E584FC5D20CA59FBE /* TuistBundle+TestCustomEntitlementsComputation.swift in Sources */,
165EA4DBD39926FC9A7FF580 /* Constants.swift in Sources */,
934F4A57DA874AB9FEC7DEAE /* ContentView.swift in Sources */,
988FDB03EA1FAA46FD5D4060 /* testCustomEntitlementsComputationApp.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin XCBuildConfiguration section */
2D276F5E29F1C85800F51382 /* Debug */ = {
307B9D6AEF6EED4E56F5F658 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_IDENTITY = "iPhone Developer";
ENABLE_PREVIEWS = YES;
INFOPLIST_FILE = "Derived/InfoPlists/testCustomEntitlementsComputation-Info.plist";
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = com.revenuecat.sampleapp;
PRODUCT_NAME = testCustomEntitlementsComputation;
SDKROOT = iphoneos;
SUPPORTS_MACCATALYST = NO;
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES;
SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = YES;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = (
"$(inherited)",
DEBUG,
);
SWIFT_COMPILATION_MODE = singlefile;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Debug;
};
3634D661A8E0A97836805213 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_IDENTITY = "iPhone Developer";
ENABLE_PREVIEWS = YES;
INFOPLIST_FILE = "Derived/InfoPlists/testCustomEntitlementsComputation-Info.plist";
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = com.revenuecat.sampleapp;
PRODUCT_NAME = testCustomEntitlementsComputation;
SDKROOT = iphoneos;
SUPPORTS_MACCATALYST = NO;
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES;
SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = YES;
SWIFT_COMPILATION_MODE = wholemodule;
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Release;
};
7156FB3704DF8A365714742C /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
@@ -198,8 +317,66 @@
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_STYLE = Automatic;
COPY_PHASE_STRIP = NO;
DEAD_CODE_STRIPPING = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEVELOPMENT_TEAM = 8SXR2327BM;
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = 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;
MTL_ENABLE_DEBUG_INFO = NO;
PRODUCT_NAME = "$(TARGET_NAME)";
VALIDATE_PRODUCT = YES;
};
name = Release;
};
741F762893818BD5864928D4 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
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_ENABLE_OBJC_WEAK = 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_STYLE = Automatic;
COPY_PHASE_STRIP = NO;
DEAD_CODE_STRIPPING = YES;
DEBUG_INFORMATION_FORMAT = dwarf;
DEVELOPMENT_TEAM = 8SXR2327BM;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
@@ -216,157 +393,34 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 16.4;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
PRODUCT_NAME = "$(TARGET_NAME)";
};
name = Debug;
};
2D276F5F29F1C85800F51382 /* 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++20";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = 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;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = 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 = 16.4;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = iphoneos;
SWIFT_COMPILATION_MODE = wholemodule;
SWIFT_OPTIMIZATION_LEVEL = "-O";
VALIDATE_PRODUCT = YES;
};
name = Release;
};
2D276F6129F1C85800F51382 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_ASSET_PATHS = "\"testCustomEntitlementsComputation/Preview Content\"";
DEVELOPMENT_TEAM = 8SXR2327BM;
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
INFOPLIST_KEY_UILaunchScreen_Generation = YES;
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.revenuecat.sampleapp;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Debug;
};
2D276F6229F1C85800F51382 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_ASSET_PATHS = "\"testCustomEntitlementsComputation/Preview Content\"";
DEVELOPMENT_TEAM = 8SXR2327BM;
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
INFOPLIST_KEY_UILaunchScreen_Generation = YES;
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.revenuecat.sampleapp;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
2D276F4D29F1C85700F51382 /* Build configuration list for PBXProject "testCustomEntitlementsComputation" */ = {
91129418DFF6B3F3158762A5 /* Build configuration list for PBXNativeTarget "testCustomEntitlementsComputation" */ = {
isa = XCConfigurationList;
buildConfigurations = (
2D276F5E29F1C85800F51382 /* Debug */,
2D276F5F29F1C85800F51382 /* Release */,
307B9D6AEF6EED4E56F5F658 /* Debug */,
3634D661A8E0A97836805213 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
2D276F6029F1C85800F51382 /* Build configuration list for PBXNativeTarget "testCustomEntitlementsComputation" */ = {
928B6F5BF967A7DC15FFC616 /* Build configuration list for PBXProject "testCustomEntitlementsComputation" */ = {
isa = XCConfigurationList;
buildConfigurations = (
2D276F6129F1C85800F51382 /* Debug */,
2D276F6229F1C85800F51382 /* Release */,
741F762893818BD5864928D4 /* Debug */,
7156FB3704DF8A365714742C /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
/* Begin XCSwiftPackageProductDependency section */
5714382F29F86B4400CC2D44 /* RevenueCat_CustomEntitlementComputation */ = {
isa = XCSwiftPackageProductDependency;
productName = RevenueCat_CustomEntitlementComputation;
};
/* End XCSwiftPackageProductDependency section */
};
rootObject = 2D276F4A29F1C85700F51382 /* Project object */;
rootObject = 0F199CE67194A4C3A8E8CB74 /* Project object */;
}
@@ -1,20 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1430"
version = "1.7">
LastUpgradeVersion = "1010"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "NO"
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "2D276F5129F1C85700F51382"
BlueprintIdentifier = "A87D977F7D7103389A52F6AC"
BuildableName = "testCustomEntitlementsComputation.app"
BlueprintName = "testCustomEntitlementsComputation"
ReferencedContainer = "container:testCustomEntitlementsComputation.xcodeproj">
@@ -27,7 +27,9 @@
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES"
shouldAutocreateTestPlan = "YES">
disableMainThreadChecker = "YES">
<Testables>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
@@ -43,7 +45,7 @@
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "2D276F5129F1C85700F51382"
BlueprintIdentifier = "A87D977F7D7103389A52F6AC"
BuildableName = "testCustomEntitlementsComputation.app"
BlueprintName = "testCustomEntitlementsComputation"
ReferencedContainer = "container:testCustomEntitlementsComputation.xcodeproj">
@@ -60,7 +62,7 @@
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "2D276F5129F1C85700F51382"
BlueprintIdentifier = "A87D977F7D7103389A52F6AC"
BuildableName = "testCustomEntitlementsComputation.app"
BlueprintName = "testCustomEntitlementsComputation"
ReferencedContainer = "container:testCustomEntitlementsComputation.xcodeproj">
@@ -0,0 +1,11 @@
{
"colors" : [
{
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
@@ -0,0 +1,13 @@
{
"images" : [
{
"idiom" : "universal",
"platform" : "ios",
"size" : "1024x1024"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
@@ -0,0 +1,6 @@
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
@@ -0,0 +1,6 @@
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
@@ -89,19 +89,6 @@ struct ContentView: View {
.cornerRadius(20)
.padding()
Button("Fetch product's intro/trial eligibility") {
Task<Void, Never> {
await checkProductTrialIntroEligibility()
}
}
.font(.system(size: 20))
.foregroundColor(.white)
.frame(maxWidth: .infinity)
.padding()
.background(Color.blue)
.cornerRadius(20)
.padding()
.task {
Purchases.configureInCustomEntitlementsComputationMode(apiKey: Constants.apiKey,
appUserID: appUserID)
@@ -244,43 +231,6 @@ struct ContentView: View {
}
func checkProductTrialIntroEligibility() async {
guard let offerings = self.offerings,
let offering = offerings.current,
let package = offering.availablePackages.first else {
print("no offerings, can't check product's eligibility")
return
}
print("Checking intro offers with the async functions.")
print("Checking product trial intro eligibility with async checkTrialOrIntroDiscountEligibility(product:)...")
let introStatus = await Purchases.shared.checkTrialOrIntroDiscountEligibility(product: package.storeProduct)
print("Intro status: \(introStatus)")
print("Checking product trial intro eligibility with async checkTrialOrIntroDiscountEligibility(packages:)...")
let introStatusDict = await Purchases.shared.checkTrialOrIntroDiscountEligibility(packages: [package])
print("Intro status dictionary: \(introStatusDict)")
print("Checking product trial intro eligibility with async checkTrialOrIntroDiscountEligibility(productIdentifiers:)")
let introStatusDict2 = await Purchases.shared.checkTrialOrIntroDiscountEligibility(
productIdentifiers: [package.storeProduct.productIdentifier]
)
print("Intro status dictionary: \(introStatusDict2)")
print("Checking intro offers with the completion handler functions.")
print("Checking product trial intro eligibility with checkTrialOrIntroDiscountEligibility(product:completion:)")
Purchases.shared.checkTrialOrIntroDiscountEligibility(product: package.storeProduct) { introEligibilityStatus in
print("Intro status: \(introEligibilityStatus)")
print("Checking checkTrialOrIntroDiscountEligibility(productIdentifiers:completion:")
Purchases.shared.checkTrialOrIntroDiscountEligibility(
productIdentifiers: [package.storeProduct.productIdentifier]
) { introStatusDict3 in
print("Intro status dict: \(introStatusDict3)")
}
}
}
private let dateFormatter: DateFormatter = {
let formatter = DateFormatter()
@@ -0,0 +1,17 @@
//
// testCustomEntitlementsComputationApp.swift
// testCustomEntitlementsComputation
//
// Created by Andrés Boedo on 4/20/23.
//
import SwiftUI
@main
struct testCustomEntitlementsComputationApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
+141
View File
@@ -0,0 +1,141 @@
import ProjectDescription
import ProjectDescriptionHelpers
// swiftlint:disable line_length
let allDestinations: Destinations = [
.iPhone,
.iPad,
.mac,
.macWithiPadDesign,
.macCatalyst,
.appleWatch,
.appleTv,
.appleVision,
.appleVisionWithiPadDesign
]
let allDeploymentTargets: DeploymentTargets = .multiplatform(
iOS: "13.0",
macOS: "10.15",
watchOS: "1.0",
tvOS: "13.0"
)
let project = Project(
name: "APITesters",
organizationName: .revenueCatOrgName,
settings: .settings(base: [:].automaticCodeSigning(devTeam: .revenueCatTeamID)),
targets: [
.target(
name: "ObjcAPITester",
destinations: allDestinations,
product: .framework,
bundleId: "com.revenuecat.ObjcAPITester",
deploymentTargets: allDeploymentTargets,
sources: [
"../../Tests/APITesters/AllAPITests/ObjcAPITester/**/*.m"
],
headers: .headers(
public: [
"../../Tests/APITesters/AllAPITests/ObjcAPITester/RCSubscriptionInfoAPI.h"
],
project: [
"../../Tests/APITesters/AllAPITests/ObjcAPITester/ObjcAPITester.h"
]
),
dependencies: [
.revenueCat
]
),
.target(
name: "SwiftAPITester",
destinations: allDestinations,
product: .framework,
bundleId: "com.revenuecat.SwiftAPITester",
deploymentTargets: allDeploymentTargets,
sources: [
"../../Tests/APITesters/AllAPITests/SwiftAPITester/**/*.swift"
],
headers: .headers(
public: [
"../../Tests/APITesters/AllAPITests/SwiftAPITester/SwiftAPITester.h"
]
),
dependencies: [
.revenueCat
]
),
.target(
name: "ReceiptParserAPITester",
destinations: allDestinations,
product: .framework,
bundleId: "com.revenuecat.ReceiptParserAPITester",
deploymentTargets: allDeploymentTargets,
sources: [
"../../Tests/APITesters/AllAPITests/ReceiptParserAPITester/**/*.swift"
],
headers: .headers(
public: [
"../../Tests/APITesters/AllAPITests/ReceiptParserAPITester/ReceiptParserAPITester.h"
]
),
dependencies: [
.receiptparser
]
),
.target(
name: "RevenueCatUISwiftAPITester",
destinations: allDestinations,
product: .framework,
bundleId: "com.revenuecat.RevenueCatUISwiftAPITester",
deploymentTargets: .multiplatform(
iOS: "15.0",
macOS: "10.15",
watchOS: "1.0",
tvOS: "13.0"
),
sources: [
"../../Tests/APITesters/AllAPITests/RevenueCatUISwiftAPITester/**/*.swift"
],
headers: .headers(
public: [
"../../Tests/APITesters/AllAPITests/RevenueCatUISwiftAPITester/RevenueCatUISwiftAPITester.h"
]
),
dependencies: [
.revenueCatUI
]
),
.target(
name: "CustomEntitlementComputationSwiftAPITester",
destinations: allDestinations,
product: .framework,
bundleId: "com.revenuecat.CustomEntitlementComputationSwiftAPITester",
deploymentTargets: allDeploymentTargets,
sources: [
"../../Tests/APITesters/AllAPITests/CustomEntitlementComputationSwiftAPITester/**/*.swift"
],
headers: .headers(
public: [
"../../Tests/APITesters/AllAPITests/CustomEntitlementComputationSwiftAPITester/CustomEntitlementComputationSwiftAPITester.h"
]
),
dependencies: [
.revenueCatCustomEntitlementComputation
]
)
],
schemes: [],
additionalFiles: [
"../../Tests/APITesters/AllAPITests/ObjcAPITester/**/*.h",
"../../Tests/APITesters/AllAPITests/SwiftAPITester/SwiftAPITester.h",
"../../Tests/APITesters/AllAPITests/CustomEntitlementComputationSwiftAPITester/CustomEntitlementComputationSwiftAPITester.h",
"../../Tests/APITesters/AllAPITests/RevenueCatUISwiftAPITester/RevenueCatUISwiftAPITester.h",
"../../Tests/APITesters/AllAPITests/ReceiptParserAPITester/ReceiptParserAPITester.h"
]
)
+83
View File
@@ -0,0 +1,83 @@
import Foundation
import ProjectDescription
import ProjectDescriptionHelpers
let allDestinations: Destinations = [
.iPhone,
.iPad,
.mac,
.macWithiPadDesign,
.macCatalyst,
.appleWatch,
.appleTv,
.appleVision,
.appleVisionWithiPadDesign
]
let allDeploymentTargets: DeploymentTargets = .multiplatform(
iOS: "15.0",
watchOS: "10.0",
visionOS: "1.3"
)
var additionalFiles: [FileElement] = [
.glob(pattern: "../../Global.xcconfig")
]
if FileManager.default.fileExists(atPath: "../../Local.xcconfig") {
additionalFiles.append(.glob(pattern: "../../Local.xcconfig"))
}
let project = Project(
name: "PaywallTester",
organizationName: .revenueCatOrgName,
settings: .settings(
base: [:].automaticCodeSigning(devTeam: .revenueCatTeamID),
configurations: [
.debug(name: "Debug-SK", xcconfig: .relativeToRoot("Global.xcconfig")),
.debug(name: "Debug")
],
defaultSettings: .essential
),
targets: [
.target(
name: "PaywallTester",
destinations: allDestinations,
product: .app,
bundleId: "com.revenuecat.PaywallTester",
deploymentTargets: allDeploymentTargets,
infoPlist: "../../Tests/TestingApps/PaywallsTester/PaywallsTester/Info.plist",
sources: [
"../../Tests/TestingApps/PaywallsTester/PaywallsTester/**/*.swift"
],
dependencies: [
.revenueCat,
.revenueCatUI,
.storeKit
]
)
],
schemes: [
.scheme(
name: "PaywallTester - SK Config",
shared: true,
buildAction: .buildAction(targets: ["PaywallTester"]),
runAction: .runAction(
configuration: "Debug-SK",
executable: "PaywallTester",
options: .options(
storeKitConfigurationPath: "../../Tests/TestingApps/PaywallsTester/PaywallsTester/Products.storekit"
)
)
),
.scheme(
name: "PaywallTester - Live Config",
shared: true,
buildAction: .buildAction(targets: ["PaywallTester"]),
runAction: .runAction(
configuration: "Debug",
executable: "PaywallTester"
)
)
],
additionalFiles: additionalFiles
)
+349
View File
@@ -0,0 +1,349 @@
import ProjectDescription
import ProjectDescriptionHelpers
// MARK: - Shared Constants
func allDestinations(macWithiPadDesign: Bool) -> Destinations {
let destinations: [Destination?] = [
.iPhone,
.iPad,
.mac,
macWithiPadDesign ? .macWithiPadDesign : nil,
.macCatalyst,
.appleWatch,
.appleTv,
.appleVision,
.appleVisionWithiPadDesign
]
return Set(destinations.compactMap { $0 })
}
let allDeploymentTargets: DeploymentTargets = .multiplatform(
iOS: "13.0",
macOS: "11.0",
watchOS: "7.0",
tvOS: "14.0"
)
// MARK: - Project Definition
let project = Project(
name: "RevenueCat",
organizationName: .revenueCatOrgName,
settings: .settings(base: [:].automaticCodeSigning(devTeam: .revenueCatTeamID)),
targets: [
// MARK: – Main Library
.target(
name: "RevenueCat",
destinations: .allRevenueCat,
product: .framework,
bundleId: "com.revenuecat.Purchases",
deploymentTargets: .allRevenueCat,
infoPlist: "../../Sources/Info.plist",
sources: [
.glob(
"../../Sources/**/*.swift",
excluding: [
"../../Sources/LocalReceiptParsing/ReceiptParser-only-files/**/*.swift"
]
)
],
headers: .headers(
public: ["../../Sources/RevenueCat.h"]
),
settings: .settings(
base: [
"APPLICATION_EXTENSION_API_ONLY": "YES"
]
)
),
.target(
name: "UnitTests",
destinations: .allRevenueCat,
product: .unitTests,
bundleId: "com.revenuecat.PurchasesTests",
deploymentTargets: .allRevenueCat,
infoPlist: .default,
sources: [
"../../Tests/UnitTests/**/*.swift",
"../../Tests/ReceiptParserTests/Helpers/MockBundle.swift",
"../../Tests/StoreKitUnitTests/TestHelpers/AvailabilityChecks.swift",
"../../Tests/StoreKitUnitTests/TestHelpers/StoreKitTestHelpers.swift",
"../../Tests/StoreKitUnitTests/TestHelpers/ImageSnapshot.swift"
],
dependencies: [
.target(name: "RevenueCat"),
.nimble,
.snapshotTesting,
.ohHTTPStubsSwift
],
),
.target(
name: "RevenueCat_CustomEntitlementComputation",
destinations: allDestinations(macWithiPadDesign: true),
product: .framework,
bundleId: "com.revenuecat.RevenueCatCustomEntitlementComputation",
deploymentTargets: allDeploymentTargets,
infoPlist: "../../Sources/Info.plist",
sources: [
.glob(
"../../Sources/**/*.swift",
excluding: [
"../../Sources/LocalReceiptParsing/ReceiptParser-only-files/**/*.swift"
]
)
],
headers: .headers(
project: ["../../Sources/RevenueCat.h"]
),
settings: .settings(
base: [
"APPLICATION_EXTENSION_API_ONLY": "YES"
]
.swiftActiveCompilationConditions([.enableCustomEntitlementComputation])
)
),
// MARK: – Receipt Parser
.target(
name: "ReceiptParser",
destinations: allDestinations(macWithiPadDesign: false),
product: .framework,
bundleId: "com.revenuecat.ReceiptParser",
deploymentTargets: allDeploymentTargets,
infoPlist: .default,
sources: [
"../../Sources/LocalReceiptParsing/**/*.swift"
]
),
.target(
name: "ReceiptParserTests",
destinations: allDestinations(macWithiPadDesign: false),
product: .unitTests,
bundleId: "com.revenuecat.ReceiptParserTests",
deploymentTargets: allDeploymentTargets,
infoPlist: .default,
sources: [
"../../Tests/ReceiptParserTests/**/*.swift"
],
resources: [
"../../Tests/UnitTests/Resources/receipts/**/*.txt"
],
dependencies: [
.target(name: "ReceiptParser"),
.nimble
]
),
// MARK: – Unit Tests Host App
.target(
name: "UnitTestsHostApp",
destinations: allDestinations(macWithiPadDesign: true),
product: .app,
bundleId: "com.revenuecat.StoreKitUnitTestsHostApp",
deploymentTargets: .multiplatform(
iOS: "13.0",
macOS: "10.15",
watchOS: "6.2",
tvOS: "13.0",
visionOS: "1.0"
),
infoPlist: .file(path: "../../Tests/UnitTestsHostApp/Info.plist"),
sources: [
"../../Tests/UnitTestsHostApp/**/*.swift"
],
dependencies: [],
),
// MARK: – StoreKit Unit Tests
.target(
name: "StoreKitUnitTests",
destinations: allDestinations(macWithiPadDesign: true),
product: .unitTests,
bundleId: "com.revenuecat.StoreKitUnitTests",
deploymentTargets: allDeploymentTargets,
infoPlist: .default,
sources: [
"../../Tests/StoreKitUnitTests/**/*.swift",
"../../Tests/UnitTests/TestHelpers/**/*.swift",
"../../Tests/UnitTests/Misc/**/TestCase.swift",
"../../Tests/UnitTests/Misc/**/CustomerInfo+TestExtensions.swift",
"../../Tests/UnitTests/Misc/**/XCTestCase+Extensions.swift",
"../../Tests/UnitTests/Mocks/**/*.swift"
],
resources: [
"../../Tests/StoreKitUnitTests/UnitTestsConfiguration.storekit"
],
dependencies: [
.target(name: "RevenueCat"),
.target(name: "UnitTestsHostApp"),
.nimble,
.ohHTTPStubsSwift,
.snapshotTesting
],
additionalFiles: [
"../../Tests/StoreKitUnitTests/UnitTestsConfiguration.storekit"
]
),
// MARK: – BackendIntegrationTests Host App
.target(
name: "BackendIntegrationTestsHostApp",
destinations: allDestinations(macWithiPadDesign: true),
product: .app,
bundleId: "com.revenuecat.StoreKitTestApp",
deploymentTargets: .multiplatform(
iOS: "14.1",
macOS: "10.15",
tvOS: "14.1"
),
infoPlist: .file(path: "../../Tests/UnitTestsHostApp/Info.plist"),
sources: [
"../../Tests/BackendIntegrationTestApp/**/*.swift"
],
dependencies: [
.storeKit
],
settings: .settings(
base: [
"APPLICATION_EXTENSION_API_ONLY": "YES"
]
.swiftActiveCompilationConditions([.enableCustomEntitlementComputation])
)
),
.target(
name: "BackendCustomEntitlementsIntegrationTests",
destinations: allDestinations(macWithiPadDesign: true),
product: .unitTests,
bundleId: "com.revenuecat.BackendIntBackendCustomEntitlementsIntegrationTestsegrationTests",
deploymentTargets: .iOS("16.0"),
infoPlist: .default,
sources: [
"../../Tests/BackendIntegrationTests/CustomEntitlementsComputationIntegrationTests.swift",
"../../Tests/BackendIntegrationTests/BaseBackendIntegrationTests.swift",
"../../Tests/BackendIntegrationTests/BaseStoreKitIntegrationTests.swift",
"../../Tests/BackendIntegrationTests/MainThreadMonitor.swift",
"../../Tests/BackendIntegrationTests/Constants.swift",
"../../Tests/BackendIntegrationTests/Helpers/**/*.swift",
"../../Tests/UnitTests/Misc/**/TestCase.swift",
"../../Tests/UnitTests/Mocks/MockSandboxEnvironmentDetector.swift",
"../../Tests/UnitTests/TestHelpers/**/TestLogHandler.swift",
"../../Tests/UnitTests/TestHelpers/**/CurrentTestCaseTracker.swift",
"../../Tests/UnitTests/TestHelpers/**/AsyncTestHelpers.swift",
"../../Tests/UnitTests/TestHelpers/**/OSVersionEquivalent.swift",
"../../Tests/UnitTests/Misc/XCTestCase+Extensions.swift",
"../../Tests/StoreKitUnitTests/TestHelpers/StoreKitTestHelpers.swift",
"../../Tests/StoreKitUnitTests/TestHelpers/AvailabilityChecks.swift"
],
dependencies: [
.target(name: "RevenueCat_CustomEntitlementComputation"),
.target(name: "BackendIntegrationTestsHostApp"),
.nimble,
.snapshotTesting,
.storeKitTests
],
settings: .settings(
base: [:].swiftActiveCompilationConditions([.enableCustomEntitlementComputation])
)
),
.target(
name: "BackendIntegrationTests",
destinations: allDestinations(macWithiPadDesign: true),
product: .unitTests,
bundleId: "com.revenuecat.BackendIntegrationTests",
deploymentTargets: .iOS("16.0"),
infoPlist: .default,
sources: [
.glob(
"../../Tests/BackendIntegrationTests/**/*.swift",
excluding: [
"../../Tests/BackendIntegrationTests/CustomEntitlementsComputationIntegrationTests.swift"
]
),
"../../Tests/UnitTests/Mocks/MockSandboxEnvironmentDetector.swift",
"../../Tests/UnitTests/Misc/**/TestCase.swift",
"../../Tests/UnitTests/Misc/**/XCTestCase+Extensions.swift",
"../../Tests/UnitTests/TestHelpers/**/*.swift",
.glob(
"../../Tests/StoreKitUnitTests/TestHelpers/**/*.swift",
excluding: [
"../../Tests/StoreKitUnitTests/TestHelpers/StoreKitConfigTestCase+Extensions.swift"
]
)
],
resources: [
"../../Tests/BackendIntegrationTests/RevenueCat_IntegrationPurchaseTesterConfiguration.storekit"
],
dependencies: [
.target(name: "RevenueCat"),
.nimble,
.ohHTTPStubsSwift,
.snapshotTesting,
.storeKitTests
],
additionalFiles: [
"../../Tests/BackendIntegrationTests/RevenueCat_IntegrationPurchaseTesterConfiguration.storekit",
"../../BackendIntegrationTests/**.xctestplan"
]
)
],
schemes: [
.scheme(
name: "RevenueCat",
shared: true,
buildAction: .buildAction(targets: ["RevenueCat"]),
testAction: .testPlans([
.relativeToRoot("Tests/TestPlans/AllTests.xctestplan")
]
),
runAction: .runAction(
executable: "RevenueCat",
options: .options(
storeKitConfigurationPath: .relativeToRoot(
"Tests/StoreKitUnitTests/UnitTestsConfiguration.storekit"
)
)
),
archiveAction: .archiveAction(configuration: "Release"),
profileAction: .profileAction(configuration: "Release"),
analyzeAction: .analyzeAction(configuration: "Debug")
),
.scheme(
name: "BackendIntegrationTests",
shared: true,
buildAction: .buildAction(targets: ["BackendIntegrationTests"]),
testAction: .testPlans([
.relativeToRoot("BackendIntegrationTests/BackendIntegrationTests-All-CI.xctestplan")
]
),
runAction: .runAction(
executable: "BackendIntegrationTestsHostApp",
options: .options(
storeKitConfigurationPath: .relativeToRoot(
"Tests/BackendIntegrationTests/RevenueCat_IntegrationPurchaseTesterConfiguration.storekit"
)
)
),
archiveAction: .archiveAction(configuration: "Release"),
profileAction: .profileAction(configuration: "Release"),
analyzeAction: .analyzeAction(configuration: "Debug")
),
.scheme(
name: "ReceiptParser",
shared: true,
buildAction: .buildAction(targets: ["ReceiptParser"]),
testAction: .targets([
.testableTarget(target: .init(stringLiteral: "ReceiptParserTests"))
]),
runAction: .runAction(configuration: "Debug")
)
],
)
+65
View File
@@ -0,0 +1,65 @@
import ProjectDescription
import ProjectDescriptionHelpers
let allDeploymentTargets: DeploymentTargets = .multiplatform(
iOS: "13.0",
macOS: "10.15",
watchOS: "6.2",
tvOS: "13.0",
visionOS: "1.0"
)
let project = Project(
name: "RevenueCatUI",
organizationName: .revenueCatOrgName,
settings: .settings(base: [:].automaticCodeSigning(devTeam: .revenueCatTeamID)),
targets: [
.target(
name: "RevenueCatUI",
destinations: .allRevenueCat,
product: .framework,
bundleId: "com.revenuecat.RevenueCatUI",
deploymentTargets: .allRevenueCat,
infoPlist: .default,
sources: [
"../../RevenueCatUI/**/*.swift"
],
dependencies: [
.revenueCat
]
),
// MARK: – RevenueCat Tests
.target(
name: "RevenueCatUITests",
destinations: .allRevenueCat,
product: .unitTests,
bundleId: "com.revenuecat.sampleapp.tests",
deploymentTargets: .allRevenueCat,
infoPlist: .default,
sources: [
"../../Tests/RevenueCatUITests/**/*.swift"
],
dependencies: [
.target(name: "RevenueCatUI"),
.nimble,
.snapshotTesting,
.ohHTTPStubsSwift
]
)
],
schemes: [
.scheme(
name: "RevenueCatUI",
shared: true,
buildAction: .buildAction(targets: ["RevenueCatUI"]),
testAction: .targets([
.testableTarget(target: .init(stringLiteral: "RevenueCatUITests"))
]),
runAction: .runAction(configuration: "Debug"),
archiveAction: .archiveAction(configuration: "Release"),
profileAction: .profileAction(configuration: "Release"),
analyzeAction: .analyzeAction(configuration: "Debug")
)
]
)
@@ -0,0 +1,91 @@
import ProjectDescription
import ProjectDescriptionHelpers
// swiftlint:disable line_length
// MARK: - Shared Constants
let allDestinations: Destinations = [
.iPhone,
.iPad
]
let allDeploymentTargets: DeploymentTargets = .multiplatform(
iOS: "16.2",
)
// MARK: - Project Definition
let project = Project(
name: "v3LoadShedderIntegration",
organizationName: .revenueCatOrgName,
targets: [
// MARK: – Main Library
.target(
name: "v3LoadShedderIntegration",
destinations: allDestinations,
product: .app,
bundleId: "com.revenuecat.v3LoadShedderIntegration",
deploymentTargets: allDeploymentTargets,
infoPlist: .file(path: "../../Tests/v3LoadShedderIntegration/v3LoadShedderIntegration/Info.plist"),
sources: [
.glob(
"../../Tests/v3LoadShedderIntegration/v3LoadShedderIntegration/**/*.swift"
)
],
resources: [
"../../Tests/v3LoadShedderIntegration/v3LoadShedderIntegration/Assets.xcassets",
"../../Tests/v3LoadShedderIntegration/v3LoadShedderIntegration/Base.lproj/LaunchScreen.storyboard",
"../../Tests/v3LoadShedderIntegration/v3LoadShedderIntegration/Base.lproj/Main.storyboard",
"../../Tests/v3LoadShedderIntegration/v3LoadShedderIntegrationTests/V3LoadShedderIntegrationTestsConfiguration.storekit"
],
headers: .headers(
project: ["../../Tests/v3LoadShedderIntegration/v3LoadShedderIntegration/v3LoadShedderIntegrationTests-Info.h"]
),
additionalFiles: [
"../../Tests/v3LoadShedderIntegration/v3LoadShedderIntegrationTests/V3LoadShedderIntegrationTestsConfiguration.storekit",
"../../Tests/v3LoadShedderIntegration/v3LoadShedderIntegration/Info.plist"
]
),
.target(
name: "v3LoadShedderIntegrationTests",
destinations: allDestinations,
product: .unitTests,
bundleId: "com.revenuecat.v3LoadShedderIntegrationTests",
deploymentTargets: allDeploymentTargets,
infoPlist: .default,
sources: [
"../../Tests/v3LoadShedderIntegration/v3LoadShedderIntegrationTests/**/*.swift"
],
dependencies: [
.target(name: "v3LoadShedderIntegration"),
.external(name: "Purchases")
],
additionalFiles: [
"../../Tests/v3LoadShedderIntegration/v3LoadShedderIntegrationTests/V3LoadShedderIntegrationTestsConfiguration.storekit"
]
)
],
schemes: [
.scheme(
name: "v3LoadShedderIntegration",
shared: true,
buildAction: .buildAction(targets: [
"v3LoadShedderIntegration",
"v3LoadShedderIntegrationTests"
]),
testAction: .targets(["v3LoadShedderIntegrationTests"]),
runAction: .runAction(
executable: "v3LoadShedderIntegration",
options: .options(
storeKitConfigurationPath: "../../Tests/v3LoadShedderIntegration/v3LoadShedderIntegrationTests/V3LoadShedderIntegrationTestsConfiguration.storekit"
)
),
archiveAction: .archiveAction(configuration: "Release"),
profileAction: .profileAction(configuration: "Release"),
analyzeAction: .analyzeAction(configuration: "Debug")
)
],
settings: .settings(base: [:].automaticCodeSigning(devTeam: .revenueCatTeamID))
)
@@ -2,6 +2,10 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundleURLTypes</key>
<array>
<dict>
@@ -28,5 +32,58 @@
<string>$(REVENUECAT_PROXY_URL_HOST)</string>
<key>REVENUECAT_PROXY_URL_SCHEME</key>
<string>$(REVENUECAT_PROXY_URL_SCHEME)</string>
<key>WKWatchOnly</key>
<false/>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleVersion</key>
<string>$(CURRENT_PROJECT_VERSION)</string>
<key>UISupportedInterfaceOrientations~iphone</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>CFBundlePackageType</key>
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
<key>CFBundleShortVersionString</key>
<string>$(MARKETING_VERSION)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>UISupportedInterfaceOrientations~ipad</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationPortraitUpsideDown</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UIRequiresFullScreen</key>
<false/>
<key>LSApplicationCategoryType</key>
<string>public.app-category.developer-tools</string>
<key>CFBundleDisplayName</key>
<string>RevenueCat</string>
<key>UIApplicationSceneManifest</key>
<dict>
<key>UIApplicationSupportsMultipleScenes</key>
<true/>
<key>UISceneConfigurations</key>
<dict>
<key>UIWindowSceneSessionRoleApplication</key>
<array>
<dict>
<key>UISceneConfigurationName</key>
<string>Default</string>
</dict>
</array>
</dict>
</dict>
<key>UILaunchScreen</key>
<dict>
<key>UILaunchScreen</key>
<dict/>
</dict>
</dict>
</plist>
@@ -11,7 +11,7 @@ import SwiftUI
struct OfferingsList: View {
@Binding
@Binding
private var introEligility: IntroEligibilityStatus
var body: some View {
@@ -75,7 +75,7 @@ struct OfferingsList: View {
#endif
}
}
@ViewBuilder
private func offeringsList(with data: PaywallsData) -> some View {
List {
@@ -2,6 +2,22 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleDisplayName</key>
<string>Purchase Tester</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
<key>CFBundleShortVersionString</key>
<string>$(MARKETING_VERSION)</string>
<key>CFBundleURLTypes</key>
<array>
<dict>
@@ -15,8 +31,12 @@
</array>
</dict>
</array>
<key>CFBundleVersion</key>
<string>$(CURRENT_PROJECT_VERSION)</string>
<key>ITSAppUsesNonExemptEncryption</key>
<false/>
<key>LSApplicationCategoryType</key>
<string>public.app-category.developer-tools</string>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
@@ -39,5 +59,25 @@
</array>
</dict>
</dict>
<key>UIApplicationSupportsIndirectInputEvents</key>
<true/>
<key>UILaunchScreen</key>
<dict>
<key>UILaunchScreen</key>
<dict/>
</dict>
<key>UISupportedInterfaceOrientations~ipad</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationPortraitUpsideDown</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UISupportedInterfaceOrientations~iphone</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
</dict>
</plist>
@@ -810,7 +810,6 @@
INFOPLIST_FILE = PurchaseTesterWatchOS/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = PurchaseTesterWatchOS;
INFOPLIST_KEY_UISupportedInterfaceOrientations = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown";
INFOPLIST_KEY_WKCompanionAppBundleIdentifier = com.revenuecat.sampleapp;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
@@ -839,7 +838,6 @@
INFOPLIST_FILE = PurchaseTesterWatchOS/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = PurchaseTesterWatchOS;
INFOPLIST_KEY_UISupportedInterfaceOrientations = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown";
INFOPLIST_KEY_WKCompanionAppBundleIdentifier = com.revenuecat.sampleapp;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
@@ -2,7 +2,34 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleDisplayName</key>
<string>PurchaseTesterWatchOS</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
<key>CFBundleShortVersionString</key>
<string>$(MARKETING_VERSION)</string>
<key>CFBundleVersion</key>
<string>$(CURRENT_PROJECT_VERSION)</string>
<key>LSApplicationCategoryType</key>
<string>WKWatchKitApp</string>
<key>REVENUECAT_API_KEY</key>
<string>$(REVENUECAT_API_KEY)</string>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationPortraitUpsideDown</string>
</array>
<key>WKCompanionAppBundleIdentifier</key>
<string>com.revenuecat.sampleapp</string>
</dict>
</plist>
@@ -0,0 +1,238 @@
{
"images" : [
{
"extent" : "full-screen",
"idiom" : "iphone",
"minimum-system-version" : "12.0",
"orientation" : "portrait",
"scale" : "3x",
"subtype" : "2688h"
},
{
"extent" : "full-screen",
"idiom" : "iphone",
"minimum-system-version" : "12.0",
"orientation" : "landscape",
"scale" : "3x",
"subtype" : "2688h"
},
{
"extent" : "full-screen",
"idiom" : "iphone",
"minimum-system-version" : "12.0",
"orientation" : "portrait",
"scale" : "2x",
"subtype" : "1792h"
},
{
"extent" : "full-screen",
"idiom" : "iphone",
"minimum-system-version" : "12.0",
"orientation" : "landscape",
"scale" : "2x",
"subtype" : "1792h"
},
{
"extent" : "full-screen",
"idiom" : "ipad",
"minimum-system-version" : "12.0",
"orientation" : "portrait",
"scale" : "2x",
"subtype" : "2388h"
},
{
"extent" : "full-screen",
"idiom" : "ipad",
"minimum-system-version" : "12.0",
"orientation" : "landscape",
"scale" : "2x",
"subtype" : "2388h"
},
{
"extent" : "full-screen",
"idiom" : "iphone",
"minimum-system-version" : "11.0",
"orientation" : "portrait",
"scale" : "3x",
"subtype" : "2436h"
},
{
"extent" : "full-screen",
"idiom" : "iphone",
"minimum-system-version" : "11.0",
"orientation" : "landscape",
"scale" : "3x",
"subtype" : "2436h"
},
{
"extent" : "full-screen",
"idiom" : "ipad",
"minimum-system-version" : "10.0",
"orientation" : "portrait",
"scale" : "2x",
"subtype" : "2224h"
},
{
"extent" : "full-screen",
"idiom" : "ipad",
"minimum-system-version" : "10.0",
"orientation" : "landscape",
"scale" : "2x",
"subtype" : "2224h"
},
{
"extent" : "full-screen",
"idiom" : "ipad",
"minimum-system-version" : "9.0",
"orientation" : "portrait",
"scale" : "2x",
"subtype" : "1366h"
},
{
"extent" : "full-screen",
"idiom" : "ipad",
"minimum-system-version" : "9.0",
"orientation" : "landscape",
"scale" : "2x",
"subtype" : "1366h"
},
{
"extent" : "full-screen",
"idiom" : "iphone",
"minimum-system-version" : "8.0",
"orientation" : "portrait",
"scale" : "3x",
"subtype" : "736h"
},
{
"extent" : "full-screen",
"idiom" : "iphone",
"minimum-system-version" : "8.0",
"orientation" : "landscape",
"scale" : "3x",
"subtype" : "736h"
},
{
"extent" : "full-screen",
"idiom" : "iphone",
"minimum-system-version" : "8.0",
"orientation" : "portrait",
"scale" : "2x",
"subtype" : "667h"
},
{
"extent" : "full-screen",
"idiom" : "iphone",
"minimum-system-version" : "7.0",
"orientation" : "portrait",
"scale" : "2x"
},
{
"extent" : "full-screen",
"idiom" : "iphone",
"minimum-system-version" : "7.0",
"orientation" : "portrait",
"scale" : "2x",
"subtype" : "retina4"
},
{
"extent" : "full-screen",
"idiom" : "ipad",
"minimum-system-version" : "7.0",
"orientation" : "portrait",
"scale" : "1x"
},
{
"extent" : "full-screen",
"idiom" : "ipad",
"minimum-system-version" : "7.0",
"orientation" : "landscape",
"scale" : "1x"
},
{
"extent" : "full-screen",
"idiom" : "ipad",
"minimum-system-version" : "7.0",
"orientation" : "portrait",
"scale" : "2x"
},
{
"extent" : "full-screen",
"idiom" : "ipad",
"minimum-system-version" : "7.0",
"orientation" : "landscape",
"scale" : "2x"
},
{
"extent" : "full-screen",
"idiom" : "iphone",
"orientation" : "portrait",
"scale" : "1x"
},
{
"extent" : "full-screen",
"idiom" : "iphone",
"orientation" : "portrait",
"scale" : "2x"
},
{
"extent" : "full-screen",
"idiom" : "iphone",
"orientation" : "portrait",
"scale" : "2x",
"subtype" : "retina4"
},
{
"extent" : "to-status-bar",
"idiom" : "ipad",
"orientation" : "portrait",
"scale" : "1x"
},
{
"extent" : "full-screen",
"idiom" : "ipad",
"orientation" : "portrait",
"scale" : "1x"
},
{
"extent" : "to-status-bar",
"idiom" : "ipad",
"orientation" : "landscape",
"scale" : "1x"
},
{
"extent" : "full-screen",
"idiom" : "ipad",
"orientation" : "landscape",
"scale" : "1x"
},
{
"extent" : "to-status-bar",
"idiom" : "ipad",
"orientation" : "portrait",
"scale" : "2x"
},
{
"extent" : "full-screen",
"idiom" : "ipad",
"orientation" : "portrait",
"scale" : "2x"
},
{
"extent" : "to-status-bar",
"idiom" : "ipad",
"orientation" : "landscape",
"scale" : "2x"
},
{
"extent" : "full-screen",
"idiom" : "ipad",
"orientation" : "landscape",
"scale" : "2x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
@@ -212,16 +212,6 @@ final class ReceiptStringsTests: TestCase {
expect(subject.description).to(equal(expectedDescription))
}
func testReceiptRetryingMechanismNotAvailable() {
let subject = ReceiptStrings
.receipt_retrying_mechanism_not_available
let expectedDescription = "Receipt retrying mechanism is not available in iOS 12. " +
"Will only attempt to fetch once."
expect(subject.category).to(equal("receipt"))
expect(subject.description).to(equal(expectedDescription))
}
func testLocalReceiptMissingPurchase() {
let receipt = AppleReceipt(
environment: .unknown,
@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "self:">
</FileRef>
</Workspace>
@@ -0,0 +1,15 @@
{
"originHash" : "fbdec518f66720abc9cceef1ea36ee3229c4faa09fdcfd36f45e77839c989f98",
"pins" : [
{
"identity" : "purchases-ios",
"kind" : "remoteSourceControl",
"location" : "https://github.com/RevenueCat/purchases-ios",
"state" : {
"revision" : "590804fc3a141fb52762b9232ba5791fce645fe7",
"version" : "3.14.4"
}
}
],
"version" : 3
}
@@ -21,5 +21,42 @@
</array>
</dict>
</dict>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>UIMainStoryboardFile</key>
<string>Main</string>
<key>CFBundleVersion</key>
<string>$(CURRENT_PROJECT_VERSION)</string>
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>UISupportedInterfaceOrientations~iphone</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UIApplicationSupportsIndirectInputEvents</key>
<true/>
<key>CFBundlePackageType</key>
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>UISupportedInterfaceOrientations~ipad</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationPortraitUpsideDown</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>CFBundleShortVersionString</key>
<string>$(MARKETING_VERSION)</string>
</dict>
</plist>
@@ -1,4 +1,14 @@
{
"appPolicies" : {
"eula" : "",
"policies" : [
{
"locale" : "en_US",
"policyText" : "",
"policyURL" : ""
}
]
},
"identifier" : "B495CDA2",
"nonRenewingSubscriptions" : [
@@ -7,6 +17,56 @@
],
"settings" : {
"_failTransactionsEnabled" : false,
"_locale" : "en_US",
"_storefront" : "USA",
"_storeKitErrors" : [
{
"current" : null,
"enabled" : false,
"name" : "Load Products"
},
{
"current" : null,
"enabled" : false,
"name" : "Purchase"
},
{
"current" : null,
"enabled" : false,
"name" : "Verification"
},
{
"current" : null,
"enabled" : false,
"name" : "App Store Sync"
},
{
"current" : null,
"enabled" : false,
"name" : "Subscription Status"
},
{
"current" : null,
"enabled" : false,
"name" : "App Transaction"
},
{
"current" : null,
"enabled" : false,
"name" : "Manage Subscriptions Sheet"
},
{
"current" : null,
"enabled" : false,
"name" : "Refund Request Sheet"
},
{
"current" : null,
"enabled" : false,
"name" : "Offer Code Redeem Sheet"
}
],
"_timeRate" : 6
},
"subscriptionGroups" : [
@@ -40,7 +100,10 @@
"recurringSubscriptionPeriod" : "P1M",
"referenceName" : "loadShedder monthly",
"subscriptionGroupID" : "ADE6FE00",
"type" : "RecurringSubscription"
"type" : "RecurringSubscription",
"winbackOffers" : [
]
}
]
}
@@ -50,7 +113,7 @@
"privateKey" : "MIGTAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBHkwdwIBAQQgMpw0LScUC+8o+WsEAM20KOMzZOMSWKFjUixtwDidPMugCgYIKoZIzj0DAQehRANCAAQIMw4YEVZrDPrk/1dx5WV3hpkuy8enQs+yDAuJRtsrOnzRH6EFgTyiydprKlgUOHW6xBocrRNTMZXioCBQtchg"
},
"version" : {
"major" : 2,
"major" : 4,
"minor" : 0
}
}
+11
View File
@@ -0,0 +1,11 @@
import ProjectDescription
let tuist = Tuist(
project: .tuist(
swiftVersion: Version(5, 10, 0),
generationOptions: .options(
staticSideEffectsWarningTargets: .all,
enforceExplicitDependencies: true
)
)
)
+68
View File
@@ -0,0 +1,68 @@
{
"originHash" : "307cbbbed5d781834365009af8023abbc6ef88a08803b78642391c6cfb4b3ab3",
"pins" : [
{
"identity" : "cwlcatchexception",
"kind" : "remoteSourceControl",
"location" : "https://github.com/mattgallagher/CwlCatchException.git",
"state" : {
"revision" : "07b2ba21d361c223e25e3c1e924288742923f08c",
"version" : "2.2.1"
}
},
{
"identity" : "cwlpreconditiontesting",
"kind" : "remoteSourceControl",
"location" : "https://github.com/mattgallagher/CwlPreconditionTesting.git",
"state" : {
"revision" : "0139c665ebb45e6a9fbdb68aabfd7c39f3fe0071",
"version" : "2.2.2"
}
},
{
"identity" : "nimble",
"kind" : "remoteSourceControl",
"location" : "https://github.com/quick/nimble",
"state" : {
"revision" : "7795df4fff1a9cd231fe4867ae54f4dc5f5734f9",
"version" : "13.7.1"
}
},
{
"identity" : "ohhttpstubs",
"kind" : "remoteSourceControl",
"location" : "https://github.com/AliSoftware/OHHTTPStubs",
"state" : {
"branch" : "9.1.0",
"revision" : "12f19662426d0434d6c330c6974d53e2eb10ecd9"
}
},
{
"identity" : "purchases-ios",
"kind" : "remoteSourceControl",
"location" : "https://github.com/RevenueCat/purchases-ios",
"state" : {
"branch" : "main",
"revision" : "b715caf85ab9298db7ab16976ac3ed196a837993"
}
},
{
"identity" : "purchases-ios-spm",
"kind" : "remoteSourceControl",
"location" : "https://github.com/RevenueCat/purchases-ios-spm",
"state" : {
"branch" : "3.14.4",
"revision" : "590804fc3a141fb52762b9232ba5791fce645fe7"
}
},
{
"identity" : "swift-snapshot-testing",
"kind" : "remoteSourceControl",
"location" : "https://github.com/pointfreeco/swift-snapshot-testing",
"state" : {
"revision" : "26ed3a2b4a2df47917ca9b790a57f91285b923fb"
}
}
],
"version" : 3
}
+45
View File
@@ -0,0 +1,45 @@
// swift-tools-version: 6.0
@preconcurrency import PackageDescription
#if TUIST
import ProjectDescription
let packageSettings = PackageSettings(
productTypes: [
"Nimble": .framework,
"SnapshotTesting": .framework, // default is .staticFramework,
"RevenueCat": .framework,
"RevenueCatUI": .framework,
"Purchases": .framework,
"OHHTTPStubs": .framework,
"OHHTTPStubsSwift": .framework
]
)
#endif
let package = Package(
name: "Dependencies",
dependencies: [
.package(
url: "https://github.com/quick/nimble",
exact: "13.7.1"
),
.package(
url: "https://github.com/pointfreeco/swift-snapshot-testing",
revision: "26ed3a2b4a2df47917ca9b790a57f91285b923fb"
),
.package(
url: "https://github.com/RevenueCat/purchases-ios",
branch: "main"
),
.package(
url: "https://github.com/RevenueCat/purchases-ios-spm",
revision: "3.14.4"
),
.package(
url: "https://github.com/AliSoftware/OHHTTPStubs",
revision: "9.1.0"
)
]
)
@@ -0,0 +1,15 @@
import ProjectDescription
extension DeploymentTargets {
/// Deployment targets for all RevenueCat targets (RevenueCat, RevenueCatUI)
public static var allRevenueCat: DeploymentTargets {
.multiplatform(
iOS: "13.0",
macOS: "10.15",
watchOS: "6.2",
tvOS: "13.0",
visionOS: "1.0"
)
}
}
@@ -0,0 +1,19 @@
import ProjectDescription
extension Destinations {
/// Destinations for all RevenueCat targets (RevenueCat, RevenueCatUI)
public static var allRevenueCat: Destinations {
[
.iPhone,
.iPad,
.mac,
.macWithiPadDesign,
.macCatalyst,
.appleWatch,
.appleTv,
.appleVision,
.appleVisionWithiPadDesign
]
}
}
@@ -0,0 +1,18 @@
import ProjectDescription
extension Environment {
/// Returns whether the current environment is local.
/// This is determined by the `rcLocal` environment variable, defaulting to `true` if not set.
///
/// Example usage:
/// ```bash
/// # Generate project with local environment (default)
/// tuist generate
///
/// # Generate project with non-local environment
/// TUIST_RC_LOCAL=false tuist generate
/// ```
public static var local: Bool {
Environment.rcLocal.getBoolean(default: true)
}
}
@@ -0,0 +1,14 @@
import ProjectDescription
extension String {
/// Enable custom entitlement computation key
public static let enableCustomEntitlementComputation: String = "ENABLE_CUSTOM_ENTITLEMENT_COMPUTATION"
/// The team ID for RevenueCat
public static let revenueCatTeamID: String = "8SXR2327BM"
/// The name of the RevenueCat team
public static let revenueCatOrgName: String = "RevenueCat, Inc."
}
@@ -0,0 +1,107 @@
import ProjectDescription
extension TargetDependency {
/// Returns a RevenueCat dependency that can be either local or external
/// - Parameter local: If true, returns a local project dependency. If false, returns an external dependency
/// from spm
/// - Returns: A TargetDependency for RevenueCat
public static var revenueCat: TargetDependency {
if Environment.local {
.project(
target: "RevenueCat",
path: .relativeToRoot("Projects/RevenueCat")
)
} else {
.revenueCatLocal
}
}
/// Returns a local RevenueCat dependency from SPM
/// - Returns: A TargetDependency for RevenueCat from external source
public static var revenueCatLocal: TargetDependency {
.external(
name: "RevenueCat"
)
}
/// Returns a RevenueCat dependency with custom entitlement computation enabled
/// - Returns: A TargetDependency for RevenueCat_CustomEntitlementComputation
public static var revenueCatCustomEntitlementComputation: TargetDependency {
.project(
target: "RevenueCat_CustomEntitlementComputation",
path: .relativeToRoot("Projects/RevenueCat")
)
}
/// Returns a RevenueCatUI dependency that can be either local or external
/// - Parameter local: If true, returns a local project dependency. If false, returns an external dependency
/// from spm
/// - Returns: A TargetDependency for RevenueCatUI
public static var revenueCatUI: TargetDependency {
if Environment.local {
.project(
target: "RevenueCatUI",
path: .relativeToRoot("Projects/RevenueCatUI")
)
} else {
.revenueCatUILocal
}
}
/// Returns a local RevenueCatUI dependency from SPM
/// - Returns: A TargetDependency for RevenueCatUI from external source
public static var revenueCatUILocal: TargetDependency {
.external(
name: "RevenueCatUI"
)
}
/// Returns a ReceiptParser dependency
/// - Returns: A TargetDependency for ReceiptParser
public static var receiptparser: TargetDependency {
.project(
target: "ReceiptParser",
path: .relativeToRoot("Projects/RevenueCat")
)
}
/// Returns a dependency for the Nimble testing framework
/// - Returns: A TargetDependency for Nimble
public static var nimble: TargetDependency {
.external(
name: "Nimble"
)
}
/// Returns a dependency for the SnapshotTesting framework
/// - Returns: A TargetDependency for SnapshotTesting
public static var snapshotTesting: TargetDependency {
.external(
name: "SnapshotTesting"
)
}
/// Returns a dependency for the OHHTTPStubs framework
/// - Returns: A TargetDependency for OHHTTPStubs
public static var ohHTTPStubs: TargetDependency {
.external(name: "OHHTTPStubs")
}
/// Returns a dependency for the OHHTTPStubsSwift framework
/// - Returns: A TargetDependency for OHHTTPStubsSwift
public static var ohHTTPStubsSwift: TargetDependency {
.external(name: "OHHTTPStubsSwift")
}
/// Returns a dependency for the StoreKit framework
/// - Returns: A TargetDependency for StoreKit
public static var storeKit: TargetDependency {
.sdk(name: "StoreKit", type: .framework)
}
/// Returns a dependency for the StoreKitTest framework
/// - Returns: A TargetDependency for StoreKitTest
public static var storeKitTests: TargetDependency {
.sdk(name: "StoreKitTest", type: .framework)
}
}
+35
View File
@@ -0,0 +1,35 @@
import Foundation
import ProjectDescription
import ProjectDescriptionHelpers
var projects: [Path] = [
"./Examples/rc-maestro/",
"./Examples/MagicWeather/",
"./Examples/MagicWeatherSwiftUI/",
"./Examples/testCustomEntitlementsComputation/",
"./Examples/PurchaseTester/",
"./Projects/PaywallTester",
"./Projects/APITesters"
]
if Environment.local {
projects.append("./Projects/RevenueCat")
projects.append("./Projects/RevenueCatUI")
} else {
// Needs 3.0.0 of Purchases.
// Only when TUIST_RC_LOCAL=false tuist generate
projects.append("./Projects/v3LoadShedderIntegration")
}
var additionalFiles: [FileElement] = [
.glob(pattern: "Global.xcconfig")
]
if FileManager.default.fileExists(atPath: "Local.xcconfig") {
additionalFiles.append(.glob(pattern: "Local.xcconfig"))
}
let workspace = Workspace(
name: "RevenueCat-Workspace",
projects: projects,
additionalFiles: additionalFiles
)