How does JetBrains AppCode launch the iOS Simulator?

前端 未结 6 1948
故里飘歌
故里飘歌 2021-01-30 18:48

I just looked at JetBrains\'s App Code IDE and it seems to be able to launch the iOS Simulator and run applications in it.

When I had to automate the deployment of my pr

6条回答
  •  遇见更好的自我
    2021-01-30 19:02

    AppCode use a special wrapper to do this, that you noticed in its console :

    /Applications/AppCode-108.379.app/bin/simlauncher 4.3 debug iphone   
    

    simlauncher is a non documented / not friendly mach-o binary... But here is a quick analysis of it:

    • To launch simulator it uses a private Apple framework (otool -L simlauncher) :

      /Applications/AppCode-108.379.app/bin/simlauncher:
      @rpath/iPhoneSimulatorRemoteClient.framework/Versions/A/iPhoneSimulatorRemoteClient (compatibility version 1.0.0, current version 12.0.0)
      
    • This framework is bundled with Xcode:

      /Platforms/iPhoneSimulator.platform/Developer/Library/PrivateFrameworks/iPhoneSimulatorRemoteClient.framework
      
    • And is used like that (class-dump simlauncher) (DTiPhoneSimulator* are from Apple Framework):

      @protocol DTiPhoneSimulatorSessionDelegate
      - (void)session:(id)arg1 didEndWithError:(id)arg2;
      - (void)session:(id)arg1 didStart:(BOOL)arg2 withError:(id)arg3;
      @end
      
      @interface Launcher : NSObject  {
          DTiPhoneSimulatorSession *mySession;
      }
      
      - (int)launch:(id)arg1 sdkVersion:(id)arg2 wait:(BOOL)arg3 device:(int)arg4 sout:(id)arg5 eout:(id)arg6 argument:(id)arg7 env:(id)arg8;
      - (void)session:(id)arg1 didEndWithError:(id)arg2;
      - (void)session:(id)arg1 didStart:(BOOL)arg2 withError:(id)arg3;
      
      @end
      

    About the other binary AMDeviceService I just can say it uses ProtocolBuffers in order I guess to communicate with MobileDevice service... Once again, undocumented stuff...

    Quick conclusion, sorry, there is no easy way to launch iPhoneSimulator using the JetBrains way, unless reversing Apple privates/not documented APIs... like Jetbrains folks did, I love their tools, they are top guns, can't wait appcode to be gold, already working on it everyday :)

    EDIT: See answer below from a JetBrains employee... @JetBrains, would be great to have some sort of AMDeviceService documented to automate some stuff... ;)

提交回复
热议问题