Compare commits

...

3 commits

Author SHA1 Message Date
zoltanvb 56741848a5
Merge 59413dd5e6 into a2a7c666fb 2024-05-09 14:04:03 -03:00
Eric Warmenhoven a2a7c666fb
iOS/tvOS: some updates for packaging for app store (#16508) 2024-05-09 09:54:28 -07:00
zoltanvb 59413dd5e6 Add support for multimedia keys
Extended RETROK_ values with 18 new items, commonly found on
"multimedia" keyboards.

Mapping added for SDL, X11, Wayland, dinput, winraw keymaps.

Keyboard tester function of Remote Retropad extended to cover new keys.

One fix in Android mapping for #12986
2024-05-06 07:34:21 +02:00
25 changed files with 362 additions and 104 deletions

View file

@ -1552,6 +1552,15 @@ static bool core_info_get_file_id(const char *core_filename,
/* > Remove extension */
strlcpy(core_file_id, core_filename, len);
path_remove_extension(core_file_id);
#if IOS
/* iOS framework names, to quote Apple:
* "must contain only alphanumerics, dots, hyphens and must not end with a dot."
*
* Since core names include underscore, which is not allowed, but not dot,
* which is, we change underscore to dot. Here, we need to change it back.
*/
string_replace_all_chars(core_file_id, '.', '_');
#endif
/* > Remove suffix */
last_underscore = (char*)strrchr(core_file_id, '_');

View file

@ -505,7 +505,7 @@ static void NETRETROPAD_CORE_PREFIX(update_keyboard_cb)(bool down, unsigned keyc
(keycode >= 123 && keycode < 127) ||
(keycode == 272) ||
(keycode >= 294 && keycode < 297) ||
(keycode >= 309 && keycode < 323))
(keycode >= 309 && keycode < RETROK_LAST))
{
snprintf(buf, sizeof(buf), "Key pressed: %d",keycode);
message.msg = buf;

View file

@ -440,10 +440,10 @@ static uint8_t keyboard_body[] =
/* 134 */ 2, 0, 255,
/* 135 */ 2, 0, 255,
/* 136 */ 2, 0, 255,
/* 137 */ 1, 255,
/* 138 */ 1, 255,
/* 139 */ 1, 255,
/* 140 */ 1, 255,
/* 137 */ 2, 0, 255,
/* 138 */ 2, 0, 255,
/* 139 */ 2, 0, 255,
/* 140 */ 2, 0, 255,
/* 141 */ 1, 255,
};
@ -587,8 +587,8 @@ static uint16_t keyboard_buttons[] =
/* 135 */ 41, 1, 126, 10, 2, 272, 10, 2, 294, 10, 2, 295, 10, 2, 296, 10, 2, 309, 10, 2, 310, 10, 2, 311, 10, 2, 312, 10, 2, 313, 10, 2, 315, 10, 2, 316, 10, 2, 317, 10, 2, 318, 10, 2, 319, 10, 2, 320, 10, 2, 321, 10, 2, 322, 10, 2, 314, 10, 2, 0, 10, 16,
/* 136 */ 1, 255,
/* 137 */ 1, 255,
/* 138 */ 1, 255,
/* 139 */ 1, 255,
/* 138 */ 37, 1, 324, 10, 2, 325, 10, 2, 326, 10, 2, 327, 10, 2, 328, 10, 2, 329, 10, 2, 330, 10, 2, 331, 10, 2, 332, 10, 2, 333, 10, 2, 334, 10, 2, 335, 10, 2, 336, 10, 2, 337, 10, 2, 338, 10, 2, 339, 10, 2, 340, 10, 2, 341, 10, 40,
/* 139 */ 37, 1, 324, 10, 2, 325, 10, 2, 326, 10, 2, 327, 10, 2, 328, 10, 2, 329, 10, 2, 330, 10, 2, 331, 10, 2, 332, 10, 2, 333, 10, 2, 334, 10, 2, 335, 10, 2, 336, 10, 2, 337, 10, 2, 338, 10, 2, 339, 10, 2, 340, 10, 2, 341, 10, 40,
/* 140 */ 1, 255,
/* 141 */ 1, 255,
};

View file

@ -167,6 +167,26 @@ enum xfvk_key
XFVK_FK23 = 201,
XFVK_FK24 = 202,
/* Multimedia keys */
XFVK_MUTE = 121,
XFVK_VOUP = 122,
XFVK_VODN = 123,
XFVK_BSTP = 136,
XFVK_APP1 = 156,
XFVK_APP2 = 157,
XFVK_MAIL = 163,
XFVK_FAVO = 164,
XFVK_BBAC = 166,
XFVK_BFWD = 167,
XFVK_CDNX = 171,
XFVK_PLAY = 172,
XFVK_CDPR = 173,
XFVK_CDST = 174,
XVFK_HOMP = 180,
XFVK_REFR = 181,
XFVK_BSEA = 225,
XFVK_MDIA = 234,
XFVK_LAST,
XFVK_DUMMY = 255
};

View file

@ -26,7 +26,7 @@
#define MAX_INPUT_DEVICES 16
#define RARCH_MAX_KEYS 137
#define RARCH_MAX_KEYS 155
#define RARCH_FIRST_CUSTOM_BIND 16
#define RARCH_FIRST_LIGHTGUN_BIND RARCH_ANALOG_BIND_LIST_END

View file

@ -79,7 +79,7 @@
#ifdef __APPLE__
#include "drivers_keyboard/keyboard_event_apple.h"
#endif
/* TODO: ensure that for UI display, menu_driver.c key_descriptors are shown instead of this */
const struct input_key_map input_config_key_map[] = {
{ "left", RETROK_LEFT },
{ "right", RETROK_RIGHT },
@ -203,6 +203,25 @@ const struct input_key_map input_config_key_map[] = {
{ "clear", RETROK_CLEAR },
{ "oem102", RETROK_OEM_102 },
{ "back", RETROK_BROWSER_BACK },
{ "forward", RETROK_BROWSER_FORWARD },
{ "refresh", RETROK_BROWSER_REFRESH },
{ "bstop", RETROK_BROWSER_STOP },
{ "search", RETROK_BROWSER_SEARCH },
{ "favorites", RETROK_BROWSER_FAVORITES },
{ "homepage", RETROK_BROWSER_HOME },
{ "mute", RETROK_VOLUME_MUTE },
{ "volumedown", RETROK_VOLUME_DOWN },
{ "volumeup", RETROK_VOLUME_UP },
{ "next", RETROK_MEDIA_NEXT },
{ "prev", RETROK_MEDIA_PREV },
{ "stop", RETROK_MEDIA_STOP },
{ "play", RETROK_MEDIA_PLAY_PAUSE },
{ "email", RETROK_LAUNCH_MAIL },
{ "media", RETROK_LAUNCH_MEDIA },
{ "app1", RETROK_LAUNCH_APP1 },
{ "app2", RETROK_LAUNCH_APP2 },
{ "nul", RETROK_UNKNOWN },
{ NULL, RETROK_UNKNOWN },
};
@ -778,6 +797,27 @@ const struct rarch_key_map rarch_key_map_sdl[] = {
#endif
{ SDLK_UNDO, RETROK_UNDO },
#ifdef HAVE_SDL2
{ SDLK_AUDIONEXT, RETROK_MEDIA_NEXT },
{ SDLK_AUDIOPREV, RETROK_MEDIA_PREV },
{ SDLK_AUDIOSTOP, RETROK_MEDIA_STOP },
{ SDLK_AUDIOPLAY, RETROK_MEDIA_PLAY_PAUSE },
{ SDLK_AUDIOMUTE, RETROK_VOLUME_MUTE },
{ SDLK_MEDIASELECT, RETROK_LAUNCH_MEDIA },
{ SDLK_MAIL, RETROK_LAUNCH_MAIL },
{ SDLK_CALCULATOR, RETROK_LAUNCH_APP2 },
{ SDLK_COMPUTER, RETROK_LAUNCH_APP1 },
{ SDLK_AC_SEARCH, RETROK_BROWSER_SEARCH },
{ SDLK_AC_HOME, RETROK_BROWSER_HOME },
{ SDLK_AC_BACK, RETROK_BROWSER_BACK },
{ SDLK_AC_FORWARD, RETROK_BROWSER_FORWARD },
{ SDLK_AC_STOP, RETROK_BROWSER_STOP },
{ SDLK_AC_REFRESH, RETROK_BROWSER_REFRESH },
{ SDLK_AC_BOOKMARKS, RETROK_BROWSER_FAVORITES },
{ SDLK_VOLUMEUP, RETROK_VOLUME_UP },
{ SDLK_VOLUMEDOWN, RETROK_VOLUME_DOWN },
#endif
{ 0, RETROK_UNKNOWN },
};
#endif
@ -891,6 +931,30 @@ const struct rarch_key_map rarch_key_map_dinput[] = {
{ DIK_CAPSLOCK, RETROK_CAPSLOCK },
{ DIK_NUMLOCK, RETROK_NUMLOCK },
{ DIK_OEM_102, RETROK_OEM_102 },
/* dinput.h included to MXE seems to carry only the alternate name circumflex */
#ifdef DIK_PREVTRACK
{ DIK_PREVTRACK, RETROK_MEDIA_PREV },
#else
{ DIK_CIRCUMFLEX, RETROK_MEDIA_PREV },
#endif
{ DIK_NEXTTRACK, RETROK_MEDIA_NEXT },
{ DIK_MUTE, RETROK_VOLUME_MUTE },
{ DIK_CALCULATOR, RETROK_LAUNCH_APP2 },
{ DIK_PLAYPAUSE, RETROK_MEDIA_PLAY_PAUSE },
{ DIK_MEDIASTOP, RETROK_MEDIA_STOP },
{ DIK_VOLUMEDOWN, RETROK_VOLUME_DOWN },
{ DIK_VOLUMEUP, RETROK_VOLUME_UP },
{ DIK_WEBHOME, RETROK_BROWSER_HOME },
{ DIK_WEBSEARCH, RETROK_BROWSER_SEARCH },
{ DIK_WEBFAVORITES, RETROK_BROWSER_FAVORITES },
{ DIK_WEBREFRESH, RETROK_BROWSER_REFRESH },
{ DIK_WEBSTOP, RETROK_BROWSER_STOP },
{ DIK_WEBFORWARD, RETROK_BROWSER_FORWARD },
{ DIK_WEBBACK, RETROK_BROWSER_BACK },
{ DIK_MYCOMPUTER, RETROK_LAUNCH_APP1 },
{ DIK_MAIL, RETROK_LAUNCH_MAIL },
{ DIK_MEDIASELECT, RETROK_LAUNCH_MEDIA },
{ 0, RETROK_UNKNOWN },
};
#endif
@ -1125,6 +1189,25 @@ const struct rarch_key_map rarch_key_map_x11[] = {
{ XFVK_KP0, RETROK_KP0 },
{ XFVK_KPDL, RETROK_KP_PERIOD },
{ XFVK_KPEQ, RETROK_KP_EQUALS },
{ XFVK_MUTE, RETROK_VOLUME_MUTE },
{ XFVK_VOUP, RETROK_VOLUME_UP },
{ XFVK_VODN, RETROK_VOLUME_DOWN },
{ XFVK_APP1, RETROK_LAUNCH_APP1 },
{ XFVK_APP2, RETROK_LAUNCH_APP2 },
{ XFVK_MAIL, RETROK_LAUNCH_MAIL },
{ XFVK_FAVO, RETROK_BROWSER_FAVORITES },
{ XFVK_BBAC, RETROK_BROWSER_BACK },
{ XFVK_BFWD, RETROK_BROWSER_FORWARD },
{ XFVK_CDNX, RETROK_MEDIA_NEXT },
{ XFVK_PLAY, RETROK_MEDIA_PLAY_PAUSE },
{ XFVK_CDPR, RETROK_MEDIA_PREV },
{ XFVK_CDST, RETROK_MEDIA_STOP },
{ XVFK_HOMP, RETROK_BROWSER_HOME },
{ XFVK_REFR, RETROK_BROWSER_REFRESH },
{ XFVK_BSTP, RETROK_BROWSER_STOP },
{ XFVK_BSEA, RETROK_BROWSER_SEARCH },
{ XFVK_MDIA, RETROK_LAUNCH_MEDIA },
{ 0, RETROK_UNKNOWN },
};
@ -1279,6 +1362,28 @@ const struct rarch_key_map rarch_key_map_linux[] = {
#endif
{ KEY_UNDO, RETROK_UNDO },
{ KEY_102ND, RETROK_OEM_102 },
#ifndef ANDROID
{ KEY_MUTE, RETROK_VOLUME_MUTE },
{ KEY_VOLUMEDOWN, RETROK_VOLUME_DOWN },
{ KEY_VOLUMEUP, RETROK_VOLUME_UP },
{ KEY_STOP, RETROK_BROWSER_STOP },
{ KEY_PROG1, RETROK_LAUNCH_APP1 },
{ KEY_PROG2, RETROK_LAUNCH_APP2 },
{ KEY_MAIL, RETROK_LAUNCH_MAIL },
{ KEY_BOOKMARKS, RETROK_BROWSER_FAVORITES },
{ KEY_BACK, RETROK_BROWSER_BACK },
{ KEY_FORWARD, RETROK_BROWSER_FORWARD },
{ KEY_NEXTSONG, RETROK_MEDIA_NEXT },
{ KEY_PLAYPAUSE, RETROK_MEDIA_PLAY_PAUSE },
{ KEY_PREVIOUSSONG, RETROK_MEDIA_PREV },
{ KEY_STOPCD, RETROK_MEDIA_STOP },
{ KEY_HOMEPAGE, RETROK_BROWSER_HOME },
{ KEY_REFRESH, RETROK_BROWSER_REFRESH },
{ KEY_SEARCH, RETROK_BROWSER_SEARCH },
{ KEY_MEDIA, RETROK_LAUNCH_MEDIA },
#endif
{ 0, RETROK_UNKNOWN },
};
#endif
@ -1343,7 +1448,7 @@ const struct rarch_key_map rarch_key_map_android[] = {
{ AKEYCODE_X, RETROK_x },
{ AKEYCODE_Y, RETROK_y },
{ AKEYCODE_Z, RETROK_z },
{ AKEYCODE_DEL, RETROK_DELETE },
{ AKEYCODE_FORWARD_DEL, RETROK_DELETE },
{ AKEYCODE_NUMPAD_0, RETROK_KP0 },
{ AKEYCODE_NUMPAD_1, RETROK_KP1 },
{ AKEYCODE_NUMPAD_2, RETROK_KP2 },
@ -1952,6 +2057,24 @@ const struct rarch_key_map rarch_key_map_winraw[] = {
{ SC_SLASH, RETROK_SLASH },
{ SC_APOSTROPHE, RETROK_QUOTE },
{ SC_ANGLEBRACKET, RETROK_OEM_102 },
{ SC_BROWSER_SEARCH, RETROK_BROWSER_SEARCH },
{ SC_BROWSER_FAVORITES, RETROK_BROWSER_FAVORITES },
{ SC_BROWSER_REFRESH, RETROK_BROWSER_REFRESH },
{ SC_BROWSER_STOP, RETROK_BROWSER_STOP },
{ SC_BROWSER_FORWARD, RETROK_BROWSER_FORWARD },
{ SC_BROWSER_BACK, RETROK_BROWSER_BACK },
{ SC_LAUNCH_EMAIL, RETROK_LAUNCH_MAIL },
{ SC_LAUNCH_MEDIA, RETROK_LAUNCH_MEDIA },
{ SC_MEDIA_PREV, RETROK_MEDIA_PREV },
{ SC_MEDIA_NEXT, RETROK_MEDIA_NEXT },
{ SC_VOLUME_MUTE, RETROK_VOLUME_MUTE },
{ SC_LAUNCH_APP1, RETROK_LAUNCH_APP1 },
{ SC_LAUNCH_APP2, RETROK_LAUNCH_APP2 },
{ SC_MEDIA_PLAY, RETROK_MEDIA_PLAY_PAUSE },
{ SC_MEDIA_STOP, RETROK_MEDIA_STOP },
{ SC_VOLUME_DOWN, RETROK_VOLUME_DOWN },
{ SC_VOLUME_UP, RETROK_VOLUME_UP },
{ SC_BROWSER_HOME, RETROK_BROWSER_HOME },
{ 0, RETROK_UNKNOWN }
};
#endif

View file

@ -664,6 +664,25 @@ enum retro_key
RETROK_UNDO = 322,
RETROK_OEM_102 = 323,
RETROK_BROWSER_BACK = 324,
RETROK_BROWSER_FORWARD = 325,
RETROK_BROWSER_REFRESH = 326,
RETROK_BROWSER_STOP = 327,
RETROK_BROWSER_SEARCH = 328,
RETROK_BROWSER_FAVORITES = 329,
RETROK_BROWSER_HOME = 330,
RETROK_VOLUME_MUTE = 331,
RETROK_VOLUME_DOWN = 332,
RETROK_VOLUME_UP = 333,
RETROK_MEDIA_NEXT = 334,
RETROK_MEDIA_PREV = 335,
RETROK_MEDIA_STOP = 336,
RETROK_MEDIA_PLAY_PAUSE = 337,
RETROK_LAUNCH_MAIL = 338,
RETROK_LAUNCH_MEDIA = 339,
RETROK_LAUNCH_APP1 = 340,
RETROK_LAUNCH_APP2 = 341,
RETROK_LAST,
RETROK_DUMMY = INT_MAX /* Ensure sizeof(enum) == sizeof(int) */

View file

@ -236,7 +236,27 @@ struct key_desc key_descriptors[RARCH_MAX_KEYS] =
{RETROK_POWER, "Power"},
{RETROK_EURO, {-30, -126, -84, 0}}, /* "<22>" */
{RETROK_UNDO, "Undo"},
{RETROK_OEM_102, "OEM-102"}
{RETROK_OEM_102, "OEM-102"},
{RETROK_BROWSER_BACK, "Back"},
{RETROK_BROWSER_FORWARD, "Forward"},
{RETROK_BROWSER_REFRESH, "Refresh"},
{RETROK_BROWSER_STOP, "Stop"},
{RETROK_BROWSER_SEARCH, "Search"},
{RETROK_BROWSER_FAVORITES, "Favorites"},
{RETROK_BROWSER_HOME, "Home Page"},
{RETROK_VOLUME_MUTE, "Mute"},
{RETROK_VOLUME_DOWN, "Volume Up"},
{RETROK_VOLUME_UP, "Volume Down"},
{RETROK_MEDIA_NEXT, "Next Track"},
{RETROK_MEDIA_PREV, "Previous Track"},
{RETROK_MEDIA_STOP, "Media Stop"},
{RETROK_MEDIA_PLAY_PAUSE, "Media Play"},
{RETROK_LAUNCH_MAIL, "Launch Email"},
{RETROK_LAUNCH_MEDIA, "Launch Media"},
{RETROK_LAUNCH_APP1, "Launch App1"},
{RETROK_LAUNCH_APP2, "Launch App2"}
};
static void *null_menu_init(void **userdata, bool video_is_threaded)

View file

@ -9,16 +9,18 @@
<key>INIntentDefinitionNamespace</key>
<string>88xZPY</string>
<key>INIntentDefinitionSystemVersion</key>
<string>20A294</string>
<string>23E224</string>
<key>INIntentDefinitionToolsBuildVersion</key>
<string>12A6144</string>
<string>15E204a</string>
<key>INIntentDefinitionToolsVersion</key>
<string>12.0</string>
<string>15.3</string>
<key>INIntents</key>
<array>
<dict>
<key>INIntentCategory</key>
<string>information</string>
<key>INIntentDescription</key>
<string>RetroArch Launch Widget</string>
<key>INIntentDescriptionID</key>
<string>tVvJ9c</string>
<key>INIntentEligibleForWidgets</key>

View file

@ -120,7 +120,6 @@
92CC05B921FE3C1700FF79F0 /* GCDWebServerDataRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 92CC059B21FE3C1700FF79F0 /* GCDWebServerDataRequest.m */; };
92CC05BA21FE3C1700FF79F0 /* GCDWebServerFileRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 92CC059C21FE3C1700FF79F0 /* GCDWebServerFileRequest.m */; };
92CC05BB21FE3C1700FF79F0 /* GCDWebServerFileRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 92CC059C21FE3C1700FF79F0 /* GCDWebServerFileRequest.m */; };
92CC05BC21FE3C1700FF79F0 /* GCDWebUploader.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 92CC059F21FE3C1700FF79F0 /* GCDWebUploader.bundle */; };
92CC05BD21FE3C1700FF79F0 /* GCDWebUploader.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 92CC059F21FE3C1700FF79F0 /* GCDWebUploader.bundle */; };
92CC05BE21FE3C1700FF79F0 /* GCDWebUploader.m in Sources */ = {isa = PBXBuildFile; fileRef = 92CC05A121FE3C1700FF79F0 /* GCDWebUploader.m */; };
92CC05BF21FE3C1700FF79F0 /* GCDWebUploader.m in Sources */ = {isa = PBXBuildFile; fileRef = 92CC05A121FE3C1700FF79F0 /* GCDWebUploader.m */; };
@ -1467,7 +1466,6 @@
07F7FB022A2DA8B800037C04 /* filters in Resources */,
9222F2092315DAD50097C0FD /* Launch Screen.storyboard in Resources */,
9204BE231D319EF300BD49DB /* InfoPlist.strings in Resources */,
92CC05BC21FE3C1700FF79F0 /* GCDWebUploader.bundle in Resources */,
9222F20B2315DD3D0097C0FD /* retroarch_logo.png in Resources */,
929784502200EEE400989A60 /* iOS/Resources/Icons.xcassets in Resources */,
9222F1FF2314BA7C0097C0FD /* assets.zip in Resources */,
@ -1755,7 +1753,9 @@
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = RetroArchTopShelfExtension/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = RetroArchTopShelfExtension;
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.games";
INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2024 RetroArch. All rights reserved.";
INFOPLIST_KEY_UIRequiredDeviceCapabilities = arm64;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
@ -1822,7 +1822,9 @@
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = RetroArchTopShelfExtension/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = RetroArchTopShelfExtension;
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.games";
INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2024 RetroArch. All rights reserved.";
INFOPLIST_KEY_UIRequiredDeviceCapabilities = arm64;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",

View file

@ -2377,7 +2377,7 @@ input[type="button"].btn-block {
font-family: 'Glyphicons Halflings';
src: url('../fonts/glyphicons-halflings-regular.eot');
src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
}
.glyphicon {
position: relative;

View file

@ -15,6 +15,8 @@
<dict>
<key>CFBundleTypeName</key>
<string>ROM</string>
<key>LSHandlerRank</key>
<string>Owner</string>
<key>LSItemContentTypes</key>
<array>
<string>com.libretro.rom</string>
@ -23,6 +25,8 @@
<dict>
<key>CFBundleTypeName</key>
<string>All Files</string>
<key>LSHandlerRank</key>
<string>Alternate</string>
<key>LSItemContentTypes</key>
<array>
<string>public.data</string>
@ -48,6 +52,25 @@
<string>$(MARKETING_VERSION)</string>
<key>CFBundleVersion</key>
<string>$(CURRENT_PROJECT_VERSION)</string>
<key>GCSupportedGameControllers</key>
<array>
<dict>
<key>ProfileName</key>
<string>ExtendedGamepad</string>
</dict>
<dict>
<key>ProfileName</key>
<string>DirectionalGamepad</string>
</dict>
<dict>
<key>ProfileName</key>
<string>MicroGamepad</string>
</dict>
</array>
<key>GCSupportsControllerUserInteraction</key>
<true/>
<key>ITSAppUsesNonExemptEncryption</key>
<false/>
<key>LSApplicationCategoryType</key>
<string>public.app-category.games</string>
<key>LSRequiresIPhoneOS</key>
@ -61,8 +84,10 @@
</array>
<key>NSLocalNetworkUsageDescription</key>
<string>RetroArch uses the local network to find local Netplay participants.</string>
<key>UIApplicationExitsOnSuspend</key>
<false/>
<key>NSUserActivityTypes</key>
<array>
<string>ConfigurationIntent</string>
</array>
<key>UIFileSharingEnabled</key>
<true/>
<key>UILaunchStoryboardName</key>
@ -91,23 +116,6 @@
</array>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
<key>GCSupportedGameControllers</key>
<array>
<dict>
<key>ProfileName</key>
<string>ExtendedGamepad</string>
</dict>
<dict>
<key>ProfileName</key>
<string>DirectionalGamepad</string>
</dict>
<dict>
<key>ProfileName</key>
<string>MicroGamepad</string>
</dict>
</array>
<key>GCSupportsControllerUserInteraction</key>
<true/>
<key>UTImportedTypeDeclarations</key>
<array>
<dict>

View file

@ -5,7 +5,7 @@
<key>CFBundleExecutable</key>
<string>%CORE%</string>
<key>CFBundleName</key>
<string>%CORE%</string>
<string>%BUNDLE%</string>
<key>CFBundleIdentifier</key>
<string>%IDENTIFIER%</string>
<key>CFBundleShortVersionString</key>
@ -13,7 +13,7 @@
<key>CFBundleVersion</key>
<string>1.0.0</string>
<key>MinimumOSVersion</key>
<string>1.0</string>
<string>14.2</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleInfoDictionaryVersion</key>

View file

@ -29,15 +29,14 @@ mkdir -p "$OUTDIR"
for dylib in $(find "$BASE_DIR"/modules -maxdepth 1 -type f -regex '.*libretro.*\.dylib$') ; do
intermediate=$(basename "$dylib")
intermediate="${intermediate/%.dylib/}"
identifier="${intermediate/%$SUFFIX/}"
intermediate="${identifier/%_libretro/}"
fwName="${intermediate}_libretro"
intermediate="${intermediate/%$SUFFIX/}"
fwName="${intermediate//_/.}"
echo Making framework $fwName from $dylib
fwDir="${OUTDIR}/${fwName}.framework"
mkdir -p "$fwDir"
lipo -create "$dylib" -output "$fwDir/$fwName"
sed -e "s,%CORE%,$fwName," -e "s,%IDENTIFIER%,$identifier," iOS/fw.tmpl > "$fwDir/Info.plist"
sed -e "s,%CORE%,$fwName," -e "s,%BUNDLE%,$fwName," -e "s,%IDENTIFIER%,$fwName," iOS/fw.tmpl > "$fwDir/Info.plist"
echo "signing $fwName"
codesign --force --verbose --sign "${CODE_SIGN_IDENTITY_FOR_ITEMS}" --timestamp=none --preserve-metadata=identifier,entitlements,flags --generate-entitlement-der "$fwDir"
codesign --force --verbose --sign "${CODE_SIGN_IDENTITY_FOR_ITEMS}" "$fwDir"
done

View file

@ -2,36 +2,53 @@
WD=$(realpath $(dirname $0))
include_autoconfig=""
include_cheats=""
include_databases=""
include_overlays=""
include_shaders=""
include_xmb=""
assets_zip="$WD/assets.zip"
args=`getopt achmos $*`
args=`getopt acdhimosx $*`
set -- $args
while :; do
case "$1" in
-a)
include_autoconfig=1
include_cheats=1
include_databases=1
include_overlays=1
include_shaders=1
include_xmb=1
shift
;;
-c)
include_cheats=1
shift
;;
-d)
include_databases=1
shift
;;
-h)
echo "$(basename $0) -- Rebuild assets.zip"
echo "Meant to be used when building RetroArch yourself. The buildbot does not use this."
echo
echo " -a Include all assets, cheats, databases, input autoconfig, overlays, and shaders"
echo " -c Include cheats"
echo " -d Include databases"
echo " -i Include input autoconfig"
echo " -o Include overlays"
echo " -s Include shaders"
echo " -a Include cheats, overlays, and shaders"
echo " -m Build for macOS (places in OSX directory"
echo " -x Include XMB assets"
echo " -m Build for macOS (places in OSX directory)"
exit 0
;;
-i)
include_autoconfig=1
shift
;;
-m)
assets_zip="$WD/OSX/assets.zip"
shift
@ -44,6 +61,10 @@ while :; do
include_shaders=1
shift
;;
-x)
include_xmb=1
shift
;;
--)
shift
break
@ -64,8 +85,12 @@ pushd "$WD" &>/dev/null
rm -rf .media
fetch_zip retroarch-assets
fetch_zip retroarch-joypad-autoconfig
fetch_zip libretro-database
if [ -n "$include_autoconfig" ] ; then
fetch_zip retroarch-joypad-autoconfig
fi
if [ -n "$include_cheats" -o -n "$include_databases" ] ; then
fetch_zip libretro-database
fi
fetch_zip libretro-super
if [ -n "$include_overlays" ] ; then
fetch_zip common-overlays
@ -78,19 +103,28 @@ fi
pushd .media &>/dev/null
echo "Packaging assets"
mkdir assets ; mv retroarch-assets/{COPYING,glui,menu_widgets,ozone,pkg,rgui,sounds,xmb} assets ; rm -rf retroarch-assets
mkdir assets ; mv retroarch-assets/{COPYING,glui,menu_widgets,ozone,pkg,rgui,sounds} assets
if [ -n "$include_xmb" ] ; then
mv retroarch-assets/xmb assets
fi
rm -rf retroarch-assets
rm -rf assets/pkg/wiiu
echo "Packaging autoconfig"
mv retroarch-joypad-autoconfig autoconfig
rm -rf autoconfig/{android,dinput,linuxraw,parport,qnx,sdl2,udev,x,xinput}
if [ -n "$include_autoconfig" ] ; then
echo "Packaging autoconfig"
mv retroarch-joypad-autoconfig autoconfig
rm -rf autoconfig/{android,dinput,linuxraw,parport,qnx,sdl2,udev,x,xinput}
fi
if [ -n "$include_cheats" ] ; then
echo "Packaging cheats"
mv libretro-database/cht cht
fi
echo "Packaging database"
mkdir database ; mv libretro-database/{cursors,rdb} database ; rm -rf libretro-database
if [ -n "$include_databases" ] ; then
echo "Packaging database"
mkdir database ; mv libretro-database/{cursors,rdb} database
fi
rm -rf libretro-database
echo "Packaging info"
mv libretro-super/info info ; rmdir libretro-super
@ -106,9 +140,9 @@ if [ -n "$include_shaders" ] ; then
mkdir shaders ; mv glsl-shaders shaders/shaders_glsl ; mv slang-shaders shaders/shaders_slang
fi
rm -f ../assets.zip
rm -f $assets_zip
echo "Zipping final assets bundle..."
zip -qr ../assets.zip *
zip -qr $assets_zip *
popd &>/dev/null

View file

@ -1,11 +1,12 @@
{
"images" : [
{
"filename" : "retroarch_logo_back-1.png",
"idiom" : "tv"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
"author" : "xcode",
"version" : 1
}
}
}

View file

@ -1,11 +1,12 @@
{
"images" : [
{
"filename" : "retroarch_logo_front-1.png",
"idiom" : "tv"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
"author" : "xcode",
"version" : 1
}
}
}

View file

@ -1,11 +1,12 @@
{
"images" : [
{
"filename" : "retroarch_logo_middle-1.png",
"idiom" : "tv"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
"author" : "xcode",
"version" : 1
}
}
}

View file

@ -2,17 +2,6 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLName</key>
<string>RetroArch URL</string>
<key>CFBundleURLSchemes</key>
<array>
<string>retroarch</string>
</array>
</dict>
</array>
<key>ALTBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>ALTDeviceID</key>
@ -21,6 +10,30 @@
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleDisplayName</key>
<string>RetroArch</string>
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeName</key>
<string>ROM</string>
<key>LSHandlerRank</key>
<string>Owner</string>
<key>LSItemContentTypes</key>
<array>
<string>com.libretro.rom</string>
</array>
</dict>
<dict>
<key>CFBundleTypeName</key>
<string>All Files</string>
<key>LSHandlerRank</key>
<string>Alternate</string>
<key>LSItemContentTypes</key>
<array>
<string>public.data</string>
<string>public.content</string>
</array>
</dict>
</array>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
@ -33,16 +46,19 @@
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>$(MARKETING_VERSION)</string>
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLName</key>
<string>RetroArch URL</string>
<key>CFBundleURLSchemes</key>
<array>
<string>retroarch</string>
</array>
</dict>
</array>
<key>CFBundleVersion</key>
<string>$(CURRENT_PROJECT_VERSION)</string>
<key>LSApplicationCategoryType</key>
<string>public.app-category.games</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>UIRequiredDeviceCapabilities</key>
<array>
<string>arm64</string>
</array>
<key>GCSupportedGameControllers</key>
<array>
<dict>
@ -60,25 +76,15 @@
</array>
<key>GCSupportsControllerUserInteraction</key>
<true/>
<key>CFBundleDocumentTypes</key>
<key>ITSAppUsesNonExemptEncryption</key>
<false/>
<key>LSApplicationCategoryType</key>
<string>public.app-category.games</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>UIRequiredDeviceCapabilities</key>
<array>
<dict>
<key>CFBundleTypeName</key>
<string>ROM</string>
<key>LSItemContentTypes</key>
<array>
<string>com.libretro.rom</string>
</array>
</dict>
<dict>
<key>CFBundleTypeName</key>
<string>All Files</string>
<key>LSItemContentTypes</key>
<array>
<string>public.data</string>
<string>public.content</string>
</array>
</dict>
<string>arm64</string>
</array>
<key>UTImportedTypeDeclarations</key>
<array>

View file

@ -154,7 +154,7 @@ else
race
quicknes
smsplus
blastem
#blastem
vice_x128
vice_x64
vice_x64sc
@ -202,7 +202,8 @@ else
virtualxt
geolith
vircon32
melondsds
#melondsds
2048
)
for dylib in "${exports[@]}" ; do
find_dylib $dylib

View file

@ -1131,11 +1131,23 @@ void playlist_resolve_path(enum playlist_file_mode mode,
string_starts_with(path, ":/modules/") &&
string_ends_with(path, ".dylib"))
{
/* iOS cores used to be packaged as .dylib files in the modules
* directory; App Store rules require turning them into Frameworks and
* putting them in the Frameworks directory. Because some playlists
* include the old core path, we'll translate it here.
*/
path[string_index_last_occurance(path, '.')] = '\0';
if (string_ends_with(path, "_ios"))
path[string_index_last_occurance(path, '_')] = '\0';
strlcpy(tmp, ":/Frameworks/", STRLEN_CONST(":/Frameworks/") + 1);
strlcpy(tmp + STRLEN_CONST(":/Frameworks/"), path + STRLEN_CONST(":/modules/"), sizeof(tmp) - STRLEN_CONST(":/Frameworks/"));
/* iOS framework names, to quote Apple:
* "must contain only alphanumerics, dots, hyphens and must not end with a dot."
*
* Since core names include underscore, which is not allowed, but not dot,
* which is, we change underscore to dot.
*/
string_replace_all_chars(tmp, '_', '.');
strlcat(tmp, ".framework", sizeof(tmp));
fill_pathname_expand_special(path, tmp, len);
}