diff --git a/pkg/apple/RetroArchTopShelfExtension/ContentProvider.h b/pkg/apple/RetroArchTopShelfExtension/ContentProvider.h index 004de6fdd6..ff25382b08 100644 --- a/pkg/apple/RetroArchTopShelfExtension/ContentProvider.h +++ b/pkg/apple/RetroArchTopShelfExtension/ContentProvider.h @@ -8,7 +8,9 @@ #import +#ifndef kRetroArchAppGroup #define kRetroArchAppGroup @"group.com.libretro.dist.tvos.RetroArchAppGroup" +#endif @interface ContentProvider : TVTopShelfContentProvider diff --git a/pkg/apple/RetroArchTopShelfExtension/RetroArchTopShelfExtension.entitlements b/pkg/apple/RetroArchTopShelfExtension/RetroArchTopShelfExtension.entitlements deleted file mode 100644 index 0c67376eba..0000000000 --- a/pkg/apple/RetroArchTopShelfExtension/RetroArchTopShelfExtension.entitlements +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/pkg/apple/RetroArch_iOS13.xcodeproj/project.pbxproj b/pkg/apple/RetroArch_iOS13.xcodeproj/project.pbxproj index 2a3f86c105..6dd92590ea 100644 --- a/pkg/apple/RetroArch_iOS13.xcodeproj/project.pbxproj +++ b/pkg/apple/RetroArch_iOS13.xcodeproj/project.pbxproj @@ -201,10 +201,10 @@ 0712A7742B807AE400C9765F /* ContentProvider.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ContentProvider.h; sourceTree = ""; }; 0712A7752B807AE400C9765F /* ContentProvider.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ContentProvider.m; sourceTree = ""; }; 0712A7772B807AE400C9765F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 0712A77F2B807F8F00C9765F /* RetroArchTopShelfExtension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = RetroArchTopShelfExtension.entitlements; sourceTree = ""; }; 0718BC5F2ABBA807001F2CBE /* Network.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Network.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS17.0.sdk/System/Library/Frameworks/Network.framework; sourceTree = DEVELOPER_DIR; }; 073DB2892B8706490001BA32 /* RetroArchTV.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = RetroArchTV.entitlements; sourceTree = ""; }; 076CA50C2B695C2C00840EA5 /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS17.2.sdk/usr/lib/libz.tbd; sourceTree = DEVELOPER_DIR; }; + 077AB2C82BFB0E28002BBE2F /* AppStore.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = AppStore.xcconfig; path = iOS/AppStore.xcconfig; sourceTree = ""; }; 0789FC2E2A07845300D042B7 /* AltKit */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = AltKit; path = Frameworks/AltKit; sourceTree = ""; }; 07B7872C29E8FE8F0088B74F /* filters */ = {isa = PBXFileReference; lastKnownFileType = folder; path = filters; sourceTree = ""; }; 07BC17D12BD2ACAE0005A0F2 /* MoltenVK.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MoltenVK.framework; path = tvOS/Frameworks/MoltenVK.framework; sourceTree = ""; }; @@ -560,7 +560,6 @@ 0712A7732B807AE400C9765F /* RetroArchTopShelfExtension */ = { isa = PBXGroup; children = ( - 0712A77F2B807F8F00C9765F /* RetroArchTopShelfExtension.entitlements */, 0712A7742B807AE400C9765F /* ContentProvider.h */, 0712A7752B807AE400C9765F /* ContentProvider.m */, 0712A7772B807AE400C9765F /* Info.plist */, @@ -1216,6 +1215,7 @@ 96AFAE1A16C1D4EA009DE44C = { isa = PBXGroup; children = ( + 077AB2C82BFB0E28002BBE2F /* AppStore.xcconfig */, 0789FC2D2A07845300D042B7 /* Packages */, 96AFAE9C16C1D976009DE44C /* Main Entry Core */, 92B9EAE024E04F8800E6CFB2 /* Sources */, @@ -1566,7 +1566,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "./make-frameworks.sh\n#./code-sign-cores.sh\n\nmkdir -p ${SRCROOT}/iOS/filters/audio\ncp -f ${SRCBASE}/libretro-common/audio/dsp_filters/*.dsp ${SRCROOT}/iOS/filters/audio/\nmkdir -p ${SRCROOT}/iOS/filters/video\ncp -f ${SRCBASE}/gfx/video_filters/*.filt ${SRCROOT}/iOS/filters/video/\n"; + shellScript = "if [ -n \"${APPSTORE_BUILD}\" ] ; then\n rm -f ${SRCROOT}/iOS/modules/*.dylib\n ./update-cores.sh appstore\n ./rebuild-assets.sh -d -i -o -x\nfi\n\n./make-frameworks.sh\n#./code-sign-cores.sh\n\nmkdir -p ${SRCROOT}/iOS/filters/audio\ncp -f ${SRCBASE}/libretro-common/audio/dsp_filters/*.dsp ${SRCROOT}/iOS/filters/audio/\nmkdir -p ${SRCROOT}/iOS/filters/video\ncp -f ${SRCBASE}/gfx/video_filters/*.filt ${SRCROOT}/iOS/filters/video/\n"; }; 92CC057521FE2D4900FF79F0 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; @@ -1584,7 +1584,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "./make-frameworks.sh tvos\n#./code-sign-cores.sh tvos\n\nmkdir -p ${SRCROOT}/tvOS/filters/audio\ncp -f ${SRCBASE}/libretro-common/audio/dsp_filters/*.dsp ${SRCROOT}/tvOS/filters/audio/\nmkdir -p ${SRCROOT}/tvOS/filters/video\ncp -f ${SRCBASE}/gfx/video_filters/*.filt ${SRCROOT}/tvOS/filters/video/\n"; + shellScript = "if [ -n \"${APPSTORE_BUILD}\" ] ; then\n rm -f ${SRCROOT}/tvOS/modules/*.dylib\n ./update-cores.sh --tvos appstore\n ./rebuild-assets.sh -d -i -o -x\nfi\n\n./make-frameworks.sh tvos\n#./code-sign-cores.sh tvos\n\nmkdir -p ${SRCROOT}/tvOS/filters/audio\ncp -f ${SRCBASE}/libretro-common/audio/dsp_filters/*.dsp ${SRCROOT}/tvOS/filters/audio/\nmkdir -p ${SRCROOT}/tvOS/filters/video\ncp -f ${SRCBASE}/gfx/video_filters/*.filt ${SRCROOT}/tvOS/filters/video/\n"; }; /* End PBXShellScriptBuildPhase section */ @@ -1710,19 +1710,20 @@ buildSettings = { ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CODE_SIGN_ENTITLEMENTS = RetroArchTopShelfExtension/RetroArchTopShelfExtension.entitlements; + CODE_SIGN_ENTITLEMENTS = "$(TVOS_CODE_SIGN_ENTITLEMENTS)"; GCC_C_LANGUAGE_STANDARD = gnu17; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = RetroArchTopShelfExtension/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = RetroArchTopShelfExtension; INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2024 RetroArch. All rights reserved."; + INFOPLIST_KEY_UIRequiredDeviceCapabilities = arm64; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - PRODUCT_BUNDLE_IDENTIFIER = com.libretro.dist.tvos.RetroArch.RetroArchTopShelfExtension; + PRODUCT_BUNDLE_IDENTIFIER = "$(TVOS_BUNDLE_IDENTIFIER).RetroArchTopShelfExtension"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = appletvos; SKIP_INSTALL = YES; @@ -1737,19 +1738,20 @@ buildSettings = { ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CODE_SIGN_ENTITLEMENTS = RetroArchTopShelfExtension/RetroArchTopShelfExtension.entitlements; + CODE_SIGN_ENTITLEMENTS = "$(TVOS_CODE_SIGN_ENTITLEMENTS)"; GCC_C_LANGUAGE_STANDARD = gnu17; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = RetroArchTopShelfExtension/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = RetroArchTopShelfExtension; INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2024 RetroArch. All rights reserved."; + INFOPLIST_KEY_UIRequiredDeviceCapabilities = arm64; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - PRODUCT_BUNDLE_IDENTIFIER = com.libretro.dist.tvos.RetroArch.RetroArchTopShelfExtension; + PRODUCT_BUNDLE_IDENTIFIER = "$(TVOS_BUNDLE_IDENTIFIER).RetroArchTopShelfExtension"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = appletvos; SKIP_INSTALL = YES; @@ -1783,8 +1785,6 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = Default; ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = YES; - CODE_SIGN_IDENTITY = "iPhone Developer"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/iOS/Frameworks", @@ -1822,7 +1822,7 @@ ); "OTHER_CFLAGS[sdk=iphoneos*]" = "$(inherited)"; "OTHER_CFLAGS[sdk=iphonesimulator*]" = "$(inherited)"; - PRODUCT_BUNDLE_IDENTIFIER = com.libretro.RetroArchiOS11; + PRODUCT_BUNDLE_IDENTIFIER = "$(IOS_BUNDLE_IDENTIFIER)"; PRODUCT_NAME = RetroArch; SWIFT_OBJC_BRIDGING_HEADER = "RetroArch-Bridging-Header.h"; }; @@ -1870,7 +1870,7 @@ ); "OTHER_CFLAGS[sdk=iphoneos*]" = "$(inherited)"; "OTHER_CFLAGS[sdk=iphonesimulator*]" = "$(inherited)"; - PRODUCT_BUNDLE_IDENTIFIER = com.libretro.RetroArchiOS11; + PRODUCT_BUNDLE_IDENTIFIER = "$(IOS_BUNDLE_IDENTIFIER)"; PRODUCT_NAME = RetroArch; SWIFT_OBJC_BRIDGING_HEADER = "RetroArch-Bridging-Header.h"; }; @@ -1881,6 +1881,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image"; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; + CODE_SIGN_ENTITLEMENTS = "$(TVOS_CODE_SIGN_ENTITLEMENTS)"; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/tvOS/Frameworks", @@ -1911,11 +1912,10 @@ "$(PROJECT_DIR)/tvOS/modules", "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = com.libretro.dist.tvos.RetroArch; + PRODUCT_BUNDLE_IDENTIFIER = "$(TVOS_BUNDLE_IDENTIFIER)"; PRODUCT_NAME = RetroArch; SDKROOT = appletvos; TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 11.0; }; name = Debug; }; @@ -1924,6 +1924,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image"; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; + CODE_SIGN_ENTITLEMENTS = "$(TVOS_CODE_SIGN_ENTITLEMENTS)"; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/tvOS/Frameworks", @@ -1954,11 +1955,10 @@ "$(PROJECT_DIR)/tvOS/modules", "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = com.libretro.dist.tvos.RetroArch; + PRODUCT_BUNDLE_IDENTIFIER = "$(TVOS_BUNDLE_IDENTIFIER)"; PRODUCT_NAME = RetroArch; SDKROOT = appletvos; TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 11.0; }; name = Release; }; @@ -1979,7 +1979,7 @@ "@executable_path/../../Frameworks", ); LIBRARY_SEARCH_PATHS = "$(PROJECT_DIR)/iOS/modules"; - PRODUCT_BUNDLE_IDENTIFIER = com.libretro.RetroArchiOS11.RetroArchWidgetExtension; + PRODUCT_BUNDLE_IDENTIFIER = "$(IOS_BUNDLE_IDENTIFIER).RetroArchWidgetExtension"; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; @@ -2003,7 +2003,7 @@ "@executable_path/../../Frameworks", ); LIBRARY_SEARCH_PATHS = "$(PROJECT_DIR)/iOS/modules"; - PRODUCT_BUNDLE_IDENTIFIER = com.libretro.RetroArchiOS11.RetroArchWidgetExtension; + PRODUCT_BUNDLE_IDENTIFIER = "$(IOS_BUNDLE_IDENTIFIER).RetroArchWidgetExtension"; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; SWIFT_COMPILATION_MODE = wholemodule; @@ -2038,7 +2038,7 @@ CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1.18.0; + CURRENT_PROJECT_VERSION = 1; DEPS_DIR = "$(SRCBASE)/deps"; DEVELOPMENT_TEAM = UK699V5ZS8; GCC_C_LANGUAGE_STANDARD = gnu99; @@ -2058,6 +2058,7 @@ HEADER_SEARCH_PATHS = ../; INFOPLIST_KEY_CFBundleDisplayName = RetroArch; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.entertainment"; + IOS_BUNDLE_IDENTIFIER = com.libretro.RetroArchiOS11; IPHONEOS_DEPLOYMENT_TARGET = 13.0; LIBRARY_SEARCH_PATHS = ( "$(PROJECT_DIR)/iOS/modules", @@ -2162,6 +2163,9 @@ SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; + TVOS_BUNDLE_IDENTIFIER = com.libretro.dist.tvos.RetroArch; + TVOS_CODE_SIGN_ENTITLEMENTS = ""; + TVOS_DEPLOYMENT_TARGET = 11.0; }; name = Debug; }; @@ -2191,7 +2195,7 @@ CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1.18.0; + CURRENT_PROJECT_VERSION = 1; DEPS_DIR = "$(SRCBASE)/deps"; DEVELOPMENT_TEAM = UK699V5ZS8; ENABLE_NS_ASSERTIONS = NO; @@ -2210,6 +2214,7 @@ HEADER_SEARCH_PATHS = ../; INFOPLIST_KEY_CFBundleDisplayName = RetroArch; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.entertainment"; + IOS_BUNDLE_IDENTIFIER = com.libretro.RetroArchiOS11; IPHONEOS_DEPLOYMENT_TARGET = 13.0; LIBRARY_SEARCH_PATHS = ( "$(PROJECT_DIR)/iOS/modules", @@ -2314,6 +2319,9 @@ SRCBASE = "$(SRCROOT)/../.."; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; + TVOS_BUNDLE_IDENTIFIER = com.libretro.dist.tvos.RetroArch; + TVOS_CODE_SIGN_ENTITLEMENTS = ""; + TVOS_DEPLOYMENT_TARGET = 11.0; VALIDATE_PRODUCT = YES; }; name = Release; diff --git a/pkg/apple/RetroArch_iOS13.xcodeproj/xcshareddata/xcschemes/RetroArch tvOS Debug.xcscheme b/pkg/apple/RetroArch_iOS13.xcodeproj/xcshareddata/xcschemes/RetroArch tvOS Debug.xcscheme index bac383c35e..d264a8aa1d 100644 --- a/pkg/apple/RetroArch_iOS13.xcodeproj/xcshareddata/xcschemes/RetroArch tvOS Debug.xcscheme +++ b/pkg/apple/RetroArch_iOS13.xcodeproj/xcshareddata/xcschemes/RetroArch tvOS Debug.xcscheme @@ -15,7 +15,7 @@ @@ -31,7 +31,7 @@ @@ -54,7 +54,7 @@ @@ -71,7 +71,7 @@ diff --git a/pkg/apple/RetroArch_iOS13.xcodeproj/xcshareddata/xcschemes/RetroArch tvOS Release.xcscheme b/pkg/apple/RetroArch_iOS13.xcodeproj/xcshareddata/xcschemes/RetroArch tvOS Release.xcscheme index 42aa74a6f3..89b296670c 100644 --- a/pkg/apple/RetroArch_iOS13.xcodeproj/xcshareddata/xcschemes/RetroArch tvOS Release.xcscheme +++ b/pkg/apple/RetroArch_iOS13.xcodeproj/xcshareddata/xcschemes/RetroArch tvOS Release.xcscheme @@ -15,7 +15,7 @@ @@ -31,7 +31,7 @@ @@ -54,7 +54,7 @@ @@ -71,7 +71,7 @@ diff --git a/pkg/apple/iOS/AppStore.xcconfig b/pkg/apple/iOS/AppStore.xcconfig new file mode 100644 index 0000000000..b0925604c8 --- /dev/null +++ b/pkg/apple/iOS/AppStore.xcconfig @@ -0,0 +1,25 @@ +// +// AppStore.xcconfig +// RetroArch_iOS13 +// +// + +APPSTORE_BUILD = 1 + +// the app store versioning tries to track closely to RetroArch's, however +// the app store version must be major.minor.patch and always incrementing, +// so any follow up/hotfix releases will necessarily have the patch version +// drift a little bit +MARKETING_VERSION = 1.18.2 +CURRENT_PROJECT_VERSION = 8 + +OTHER_CFLAGS = $(inherited) -DHAVE_APPLE_STORE +OTHER_CFLAGS = $(inherited) -DkRetroArchAppGroup=@\"group.com.libretro.dist.RetroArchGroup\" + +IOS_BUNDLE_IDENTIFIER = com.libretro.dist.RetroArch +TVOS_BUNDLE_IDENTIFIER = com.libretro.dist.RetroArch + +TVOS_CODE_SIGN_ENTITLEMENTS = tvOS/RetroArchTV.entitlements + +IPHONEOS_DEPLOYMENT_TARGET = 14.2 +TVOS_DEPLOYMENT_TARGET = 14.2 diff --git a/pkg/apple/tvOS/RetroArchTV.entitlements b/pkg/apple/tvOS/RetroArchTV.entitlements index 0c67376eba..689030bc56 100644 --- a/pkg/apple/tvOS/RetroArchTV.entitlements +++ b/pkg/apple/tvOS/RetroArchTV.entitlements @@ -1,5 +1,10 @@ - + + com.apple.security.application-groups + + group.com.libretro.dist.RetroArchGroup + + diff --git a/pkg/apple/update-cores.sh b/pkg/apple/update-cores.sh index df0ae90787..419bce6cab 100755 --- a/pkg/apple/update-cores.sh +++ b/pkg/apple/update-cores.sh @@ -22,7 +22,7 @@ function debug() { if [ -z "$PROJECT_DIR" ] ; then APPLE_DIR=$(dirname $0) else - APPLE_DIR="${PROJECT_DIR}/pkg/apple" + APPLE_DIR="${PROJECT_DIR}" fi if [ "$1" = "-n" -o "$1" = "--dry-run" ] ; then @@ -204,6 +204,12 @@ else vircon32 #melondsds 2048 + mu + dosbox_pure + pokemini + nxengine + prboom + mednafen_ngp ) for dylib in "${exports[@]}" ; do find_dylib $dylib