mmatyas / pegasus-frontend

A cross platform, customizable graphical frontend for launching emulators and managing your game collection.
http://pegasus-frontend.org
Other
1.25k stars 112 forks source link

MacOS, ability to modify icon permanently? #1030

Closed HomeStarRunnerTron closed 1 year ago

HomeStarRunnerTron commented 1 year ago

This is kind of a silly thing, but I enjoy adding custom icons to all my favourite applications-- and after this first day working with Pegasus, it's quickly becoming a favourite application. I added a custom icon (both just by changing the icon in the normal way, as well as replace the icns I could find inside the Package Contents), but once the application is opened, it reverts back to the normal application icon, which I can only assume is somehow packaged INTO the Unix executable itself, since I don't know where else it'd be sourcing the icon from at this point. Is there anything that I can do to keep the icon the way I'd like it? All the very best, thank you for making Plex for games!

mmatyas commented 1 year ago

Hi! I'm not that familiar with macOS, could you show me which icon you mean exactly? I think you should be able to change launcher icons without problems, but the tray icon is indeed built into the program, as on all platforms. Not sure if it's possible modifying that externally (what is "normal way"?), but you can always build Pegasus from source, with the custom image of your choice.

HomeStarRunnerTron commented 1 year ago

For most native Mac applications, when you modify a tray icon, that icon will stay the same once launched. But this is how Pegasus (and quite a few other cross-platform projects on GitHub) opens up. But yeah-- apps like Final Cut Pro, Logic Pro, Photoshop, etc.-- I can change the icon, and it'll stay the icon when opened up. I guess that means they don't have the icon built into the Unix executable or something? I'll give it a shot and try to build it from source! ^_^ All the best. Oh-- and maybe this has lost all specialness after making this yourself, but here's how my Pegasus collection is coming along thus far! I'm trying out every possible game format that I can think of, to put it through its paces-- I've had to code some little AppleScript applets & Terminal .commands to run code & games that Pegasus doesn't want to run-- been SUPER-fun.

mmatyas commented 1 year ago

Looks gorgeous! Happy to hear it fits your use case.

On many *nix platforms if you don't have the icon built into the executable, the system might just show some generic icon, even if you set an icon for the launcher itself. It may not be necessary on Mac, but I guess most cross-platform frameworks do it, just in case. I think you need to remove this line if you'd like to compile it from source.

HomeStarRunnerTron commented 1 year ago

Okay, with a lot of trial-and-error, I was able to (I thought-- there's a problem I will talk about soon) successfully build it without the code. And removing that line (THANK YOU for the help in locating that) TOTALLY worked. And then any custom icon would stay instead of disappearing. In-fact, with this knowledge, I was able to fix this exact problem in melonDS, as well!

The only issue is... ... the Unix executable that gets built is too tiny. It's about 4MB, and if I delete all the gigantic QT Framework and QT Creator stuff, the program no longer works-- I assume this is because the build I'm creating is dependent on something in there. What do I need to do to build it properly? ^_^

In-case it's helpful, here's the crash message when I try to open my build, after deleting QT Framework...

-------------------------------------
Translated Report (Full Report Below)
-------------------------------------

Process:               pegasus-fe [11746]
Path:                  /Applications/* JAMES/*/Pegasus.app/Contents/MacOS/pegasus-fe
Identifier:            org.pegasus-frontend.macos
Version:               ???
Code Type:             X86-64 (Translated)
Parent Process:        launchd [1]
User ID:               501

Date/Time:             2022-12-13 10:26:12.2625 -1000
OS Version:            macOS 12.5 (21G72)
Report Version:        12
Anonymous UUID:        2DF28B3E-42E5-A9B7-D605-F5327DCE5E6C

Time Awake Since Boot: 620 seconds

System Integrity Protection: disabled

Crashed Thread:        0

Exception Type:        EXC_CRASH (SIGABRT)
Exception Codes:       0x0000000000000000, 0x0000000000000000
Exception Note:        EXC_CORPSE_NOTIFY

Termination Reason:    Namespace DYLD, Code 1 Library missing
Library not loaded: '@rpath/QtQuick.framework/Versions/5/QtQuick'
Referenced from: '/Applications/* JAMES/*/Pegasus.app/Contents/MacOS/pegasus-fe'
Reason: tried: '' (no such file), '' (no such file), '' (no such file), '' (no such file), '' (no such file), '' (no such file)
(terminated at launch; ignore backtrace)

Kernel Triage:
VM - pmap_enter failed with resource shortage

Thread 0 Crashed:
0   Rosetta Runtime Routines           0x10123a940 ???
1   <translation info unavailable>         0x101281b24 ???
2   dyld                                   0x201207a72 abort_with_payload_wrapper_internal + 80
3   dyld                                   0x201207aa4 abort_with_payload + 9
4   dyld                                   0x2011b5699 dyld4::halt(char const*) + 615
5   dyld                                   0x2011b15b5 dyld4::prepare(dyld4::APIs&, dyld3::MachOAnalyzer const*) + 3995
6   dyld                                   0x2011b04e4 start + 388

Thread 1:: com.apple.rosetta.exceptionserver
0   runtime                             0x7ff7ffda3944 0x7ff7ffd9f000 + 18756
1   runtime                             0x7ff7ffdb13e0 0x7ff7ffd9f000 + 74720
2   runtime                             0x7ff7ffdb2e58 0x7ff7ffd9f000 + 81496

Thread 0 crashed with ARM Thread State (64-bit):
    x0: 0x0000000000000006   x1: 0x0000000000000001   x2: 0x0000000306024aa0   x3: 0x0000000000000085
    x4: 0x00000003060246a0   x5: 0x0000000000000000   x6: 0x52800661d503201f   x7: 0x000000209400df0f
    x8: 0x00000003060246a0   x9: 0x0000000000000000  x10: 0x0000000000000085  x11: 0x0000000306024ae0
   x12: 0x0000000000000085  x13: 0x0000000306024aa0  x14: 0x0000000000000001  x15: 0x0000000000000006
   x16: 0x0000000000000209  x17: 0x0000000000000000  x18: 0x80000001092a3b70  x19: 0x0000000101230000
   x20: 0x00000000000007ff  x21: 0x00000001092a8fa0  x22: 0xffffffffffffffff  x23: 0x000000010123a914
   x24: 0x0000000201207a72  x25: 0x000000010123a1f4  x26: 0x00000001012810c8  x27: 0x0000000000000000
   x28: 0x00000002011f198e   fp: 0x000000002c000000   lr: 0x0000000101281b24
    sp: 0x00000001092a3b70   pc: 0x000000010123a940 cpsr: 0x80001000
   far: 0x0000000101281000  esr: 0x56000080  Address size fault

Binary Images:
               0x0 - 0xffffffffffffffff ??? (*) <00000000-0000-0000-0000-000000000000> ???
       0x2011ab000 -        0x201216fff dyld (*) <f71fb3ca-5fcc-3577-9457-b047888a46d1> /usr/lib/dyld
    0x7ff7ffd9f000 -     0x7ff7ffdcefff runtime (*) <ef33add1-6b70-3cc9-8bbc-c8544b609d2b> /usr/libexec/rosetta/runtime

External Modification Summary:
  Calls made by other processes targeting this process:
    task_for_pid: 0
    thread_create: 0
    thread_set_state: 0
  Calls made by this process:
    task_for_pid: 0
    thread_create: 0
    thread_set_state: 0
  Calls made by all processes on this machine:
    task_for_pid: 0
    thread_create: 0
    thread_set_state: 0

VM Region Summary:
ReadOnly portion of Libraries: Total=4468K resident=0K(0%) swapped_out_or_unallocated=4468K(100%)
Writable regions: Total=155.2M written=0K(0%) resident=0K(0%) swapped_out=0K(0%) unallocated=155.2M(100%)

                                VIRTUAL   REGION 
REGION TYPE                        SIZE    COUNT (non-coalesced) 
===========                     =======  ======= 
Rosetta Arena                     4096K        2 
Rosetta Generic                    768K      189 
Rosetta IndirectBranch              32K        1 
Rosetta JIT                      128.0M        1 
Rosetta Return Stack                20K        2 
Rosetta Thread Context              20K        2 
Stack                             8176K        1 
Stack Guard                       56.0M        1 
VM_ALLOCATE                       13.3M        6 
VM_ALLOCATE (reserved)              20K        1         reserved VM address space (unallocated)
__DATA                             224K        6 
__DATA_CONST                        80K        1 
__LINKEDIT                         500K        7 
__TEXT                            4000K        4 
dyld private memory               1024K        1 
mapped file                        6.1G       36 
===========                     =======  ======= 
TOTAL                              6.3G      261 
TOTAL, minus reserved VM space     6.3G      261 

-----------
Full Report
-----------

{"app_name":"pegasus-fe","timestamp":"2022-12-13 10:26:12.00 -1000","app_version":"","slice_uuid":"adf855d5-4b27-3f20-ac2a-af8060ff09d7","build_version":"","platform":1,"bundleID":"org.pegasus-frontend.macos","share_with_app_devs":0,"is_first_party":0,"bug_type":"309","os_version":"macOS 12.5 (21G72)","incident_id":"C83074BC-E4B2-42F9-B9AD-620D3089E27D","name":"pegasus-fe"}
{
  "uptime" : 620,
  "procLaunch" : "2022-12-13 10:26:12.2104 -1000",
  "procRole" : "Default",
  "version" : 2,
  "userID" : 501,
  "deployVersion" : 210,
  "modelCode" : "MacBookPro18,3",
  "procStartAbsTime" : 15086185396,
  "coalitionID" : 1166,
  "osVersion" : {
    "train" : "macOS 12.5",
    "build" : "21G72",
    "releaseType" : "User"
  },
  "captureTime" : "2022-12-13 10:26:12.2625 -1000",
  "incident" : "C83074BC-E4B2-42F9-B9AD-620D3089E27D",
  "bug_type" : "309",
  "pid" : 11746,
  "procExitAbsTime" : 15087421911,
  "translated" : true,
  "cpuType" : "X86-64",
  "procName" : "pegasus-fe",
  "procPath" : "\/Applications\/* JAMES\/*\/Pegasus.app\/Contents\/MacOS\/pegasus-fe",
  "bundleInfo" : {"CFBundleIdentifier":"org.pegasus-frontend.macos"},
  "storeInfo" : {"deviceIdentifierForVendor":"9645B062-A13F-50A8-8A6B-6FC27C0B03E8","thirdParty":true},
  "parentProc" : "launchd",
  "parentPid" : 1,
  "coalitionName" : "org.pegasus-frontend.macos",
  "crashReporterKey" : "2DF28B3E-42E5-A9B7-D605-F5327DCE5E6C",
  "sip" : "disabled",
  "isCorpse" : 1,
  "exception" : {"codes":"0x0000000000000000, 0x0000000000000000","rawCodes":[0,0],"type":"EXC_CRASH","signal":"SIGABRT"},
  "termination" : {"code":1,"flags":518,"namespace":"DYLD","indicator":"Library missing","details":["(terminated at launch; ignore backtrace)"],"reasons":["Library not loaded: '@rpath\/QtQuick.framework\/Versions\/5\/QtQuick'","Referenced from: '\/Applications\/* JAMES\/*\/Pegasus.app\/Contents\/MacOS\/pegasus-fe'","Reason: tried: '' (no such file), '' (no such file), '' (no such file), '' (no such file), '' (no such file), '' (no such file)"]},
  "ktriageinfo" : "VM - pmap_enter failed with resource shortage\n",
  "extMods" : {"caller":{"thread_create":0,"thread_set_state":0,"task_for_pid":0},"system":{"thread_create":0,"thread_set_state":0,"task_for_pid":0},"targeted":{"thread_create":0,"thread_set_state":0,"task_for_pid":0},"warnings":0},
  "faultingThread" : 0,
  "threads" : [{"triggered":true,"id":36096,"threadState":{"x":[{"value":6},{"value":1},{"value":12985715360},{"value":133},{"value":12985714336},{"value":0},{"value":5944758525384400927},{"value":139922038543},{"value":12985714336},{"value":0},{"value":133},{"value":12985715424},{"value":133},{"value":12985715360},{"value":1},{"value":6},{"value":521},{"value":0},{"value":9223372041303505776},{"value":4314038272},{"value":2047},{"value":4448751520},{"value":18446744073709551615},{"value":4314081556},{"value":8608840306,"symbolLocation":80,"symbol":"abort_with_payload_wrapper_internal"},{"value":4314079732},{"value":4314370248},{"value":0},{"value":8608749966,"symbolLocation":10,"symbol":"__abort_with_payload"}],"flavor":"ARM_THREAD_STATE64","lr":{"value":4314372900},"cpsr":{"value":2147487744},"fp":{"value":738197504},"sp":{"value":4448729968},"esr":{"value":1442840704,"description":" Address size fault"},"pc":{"value":4314081600,"matchesCrashFrame":1},"far":{"value":4314370048}},"frames":[{"imageOffset":4314081600,"region":"Rosetta Runtime Routines","symbolLocation":10560,"imageIndex":0},{"imageOffset":4314372900,"region":"<translation info unavailable>","imageIndex":0},{"imageOffset":379506,"symbol":"abort_with_payload_wrapper_internal","symbolLocation":80,"imageIndex":1},{"imageOffset":379556,"symbol":"abort_with_payload","symbolLocation":9,"imageIndex":1},{"imageOffset":42649,"symbol":"dyld4::halt(char const*)","symbolLocation":615,"imageIndex":1},{"imageOffset":26037,"symbol":"dyld4::prepare(dyld4::APIs&, dyld3::MachOAnalyzer const*)","symbolLocation":3995,"imageIndex":1},{"imageOffset":21732,"symbol":"start","symbolLocation":388,"imageIndex":1}]},{"id":36104,"name":"com.apple.rosetta.exceptionserver","frames":[{"imageOffset":18756,"imageIndex":2},{"imageOffset":74720,"imageIndex":2},{"imageOffset":81496,"imageIndex":2}]}],
  "usedImages" : [
  {
    "size" : 0,
    "source" : "A",
    "base" : 0,
    "uuid" : "00000000-0000-0000-0000-000000000000"
  },
  {
    "source" : "P",
    "arch" : "x86_64",
    "base" : 8608460800,
    "size" : 442368,
    "uuid" : "f71fb3ca-5fcc-3577-9457-b047888a46d1",
    "path" : "\/usr\/lib\/dyld",
    "name" : "dyld"
  },
  {
    "source" : "P",
    "arch" : "arm64",
    "base" : 140703126122496,
    "size" : 196608,
    "uuid" : "ef33add1-6b70-3cc9-8bbc-c8544b609d2b",
    "path" : "\/usr\/libexec\/rosetta\/runtime",
    "name" : "runtime"
  }
],
  "sharedCache" : {
  "base" : 140703265374208,
  "size" : 19331678208,
  "uuid" : "df0706d4-ffba-39da-b512-d71c0baa3300"
},
  "vmSummary" : "ReadOnly portion of Libraries: Total=4468K resident=0K(0%) swapped_out_or_unallocated=4468K(100%)\nWritable regions: Total=155.2M written=0K(0%) resident=0K(0%) swapped_out=0K(0%) unallocated=155.2M(100%)\n\n                                VIRTUAL   REGION \nREGION TYPE                        SIZE    COUNT (non-coalesced) \n===========                     =======  ======= \nRosetta Arena                     4096K        2 \nRosetta Generic                    768K      189 \nRosetta IndirectBranch              32K        1 \nRosetta JIT                      128.0M        1 \nRosetta Return Stack                20K        2 \nRosetta Thread Context              20K        2 \nStack                             8176K        1 \nStack Guard                       56.0M        1 \nVM_ALLOCATE                       13.3M        6 \nVM_ALLOCATE (reserved)              20K        1         reserved VM address space (unallocated)\n__DATA                             224K        6 \n__DATA_CONST                        80K        1 \n__LINKEDIT                         500K        7 \n__TEXT                            4000K        4 \ndyld private memory               1024K        1 \nmapped file                        6.1G       36 \n===========                     =======  ======= \nTOTAL                              6.3G      261 \nTOTAL, minus reserved VM space     6.3G      261 \n",
  "legacyInfo" : {
  "threadTriggered" : {

  }
},
  "trialInfo" : {
  "rollouts" : [
    {
      "rolloutId" : "60da5e84ab0ca017dace9abf",
      "factorPackIds" : {

      },
      "deploymentId" : 240000008
    },
    {
      "rolloutId" : "61301e3a61217b3110231469",
      "factorPackIds" : {
        "SIRI_FIND_MY_CONFIGURATION_FILES" : "6348493aa52bb16adc4e4d06"
      },
      "deploymentId" : 240000023
    }
  ],
  "experiments" : [

  ]
}
}

Model: MacBookPro18,3, BootROM 7459.141.1, proc 8:6:2 processors, 16 GB, SMC 
Graphics: Apple M1 Pro, Apple M1 Pro, Built-In
Display: Color LCD, 3024 x 1964 Retina, Main, MirrorOff, Online
Memory Module: LPDDR5
AirPort: Wi-Fi, wl0: Apr  6 2022 05:55:54 version 20.90.45.0.8.7.118 FWID 01-e7138ff2
Bluetooth: Version (null), 0 services, 0 devices, 0 incoming serial ports
Network Service: Wi-Fi, AirPort, en0
USB Device: USB31Bus
USB Device: USB31Bus
USB Device: USB31Bus
Thunderbolt Bus: MacBook Pro, Apple Inc.
Thunderbolt Bus: MacBook Pro, Apple Inc.
Thunderbolt Bus: MacBook Pro, Apple Inc.

I used the open-source QT license, installed QT 5.15.2 (QT 6 didn't work at all for building it), then built it in the Terminal with qmake. I went...

/path/to/qmake path/to/pegasus

make

sudo make install

Is there some extra prompt I have to do? Now it's especially important to me that I build this myself, since I just made a custom boot-screen & icon, as well, to make it extra worth my while, hahaha. (The dragon is an inside-joke in my fAmily.)

mmatyas commented 1 year ago

Sorry for the late reply! Yes, at the moment Pegasus uses the Qt 5.x series. By default, Qt builds as a dynamic library: the programs that use it are small, but require Qt to be on the system to run. The official Pegasus releases use a static build: the binary is larger, but doesn't depend on the system's libraries. Both are fine. You probably built a dynamic Qt, in this case you do need to keep Qt around. You can build a static Qt if you configure Qt with the -static flag – note that the Qt build will be significantly larger in this case.

HomeStarRunnerTron commented 1 year ago

I appear to have no clue where to add said -static flag, hahaha, I've tried adding "CONFIG += static", "QMAKE_CXXFLAGS += -static" or "QMAKE_LFLAGS += -static" to the .pro file, I'm not getting anything. Unsure of how to proceed!

HomeStarRunnerTron commented 1 year ago

Yikes, I appear to have fallen into a rabbit hole trying to make a static Qt-- I, uh, think THIS is what I'm supposed to do, wow. Definitely could use some help, hahaha.

mmatyas commented 1 year ago

Oh sorry, I thought you built both Qt and Pegasus from source. -static is a flag for Qt, and yes, the linked wiki page shows the steps for building it. But if you already have a Qt available, you can keep using it – just don't delete it after building Pegasus.

HomeStarRunnerTron commented 1 year ago

Haha, yeah, I'd really like to have a static build, I don't like having 26 gigabytes of Qt hanging around on my computer... I'll try giving building static Qt another shot. Here's hoping I'll be able to figure it out, but if I can't, you might see me around again, hahaha. Thank you so much for your patience and kindness!

HomeStarRunnerTron commented 1 year ago

Shoot, I've been trying -- seems to be that I can't build my own static build of Qt on current M1 Macs: https://pullanswer.com/questions/qt-5-15-5-build-install-failing-on-monterey-and-clang-v13-1-6 This dude also seems to be having similar problems to me: https://developernote.com/2021/12/building-qt-6-2-2-for-macos-part-2/ Is there any place where one might be able to download a statically built Qt? Thank you so much, again, hope the New Year's treating you welle!

mmatyas commented 1 year ago

Hm well I'm not sure if it works on M1, but you can try this one. It should be extracted to /usr/local/.

HomeStarRunnerTron commented 1 year ago

OHBOYOHBOY, this is my New Year's miracle, thank you SO much for really going above and beyond for my ridiculous minute issue. Your static build worked perfectly on my M1 Mac-- and yes, it was installed into /usr/local/-- completely precompiled. All the very, very best-- I'mma holding onto that tar on my computer forever. If anyone else desires this, here's a copy of the program with just the ability to permanently change icons, or one with my added custom boot graphics. Happiest New Years to you, thank you for making my setup Practically Perfect in Every Way™.

AUG 30 2023 EDIT: Updated both builds to the latest, as of today. Now allows for good scrolling on macOS trackpads, as well as video playback.