| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #import <Foundation/Foundation.h> | 5 #import <Foundation/Foundation.h> |
| 6 #include <asl.h> | 6 #include <asl.h> |
| 7 #include <libgen.h> | 7 #include <libgen.h> |
| 8 #include <stdarg.h> | 8 #include <stdarg.h> |
| 9 #include <stdio.h> | 9 #include <stdio.h> |
| 10 | 10 |
| 11 // An executable (iossim) that runs an app in the iOS Simulator. | 11 // An executable (iossim) that runs an app in the iOS Simulator. |
| 12 // Run 'iossim -h' for usage information. | 12 // Run 'iossim -h' for usage information. |
| 13 // | 13 // |
| 14 // For best results, the iOS Simulator application should not be running when | 14 // For best results, the iOS Simulator application should not be running when |
| 15 // iossim is invoked. | 15 // iossim is invoked. |
| 16 // | 16 // |
| 17 // Headers for the iPhoneSimulatorRemoteClient framework used in this tool are | 17 // Headers for iPhoneSimulatorRemoteClient and other frameworks used in this |
| 18 // generated by class-dump, via GYP. | 18 // tool are generated by class-dump, via GYP. |
| 19 // (class-dump is available at http://www.codethecode.com/projects/class-dump/) | 19 // (class-dump is available at http://www.codethecode.com/projects/class-dump/) |
| 20 // | 20 // |
| 21 // However, there are some forward declarations required to get things to | 21 // However, there are some forward declarations required to get things to |
| 22 // compile. Also, the DTiPhoneSimulatorSessionDelegate protocol is referenced | 22 // compile. |
| 23 // by the iPhoneSimulatorRemoteClient framework, but not defined in the object | |
| 24 // file, so it must be defined here before importing the generated | |
| 25 // iPhoneSimulatorRemoteClient.h file. | |
| 26 | 23 |
| 24 // TODO(lliabraa): Once all builders are on Xcode 6 this ifdef can be removed |
| 25 // (crbug.com/385030). |
| 26 #if defined(IOSSIM_USE_XCODE_6) |
| 27 @class DVTStackBacktrace; |
| 28 #import "DVTFoundation.h" |
| 29 #endif // IOSSIM_USE_XCODE_6 |
| 30 |
| 31 @protocol OS_dispatch_queue |
| 32 @end |
| 33 @protocol OS_dispatch_source |
| 34 @end |
| 35 // TODO(lliabraa): Once all builders are on Xcode 6 this ifdef can be removed |
| 36 // (crbug.com/385030). |
| 37 #if defined(IOSSIM_USE_XCODE_6) |
| 38 @protocol OS_xpc_object |
| 39 @end |
| 40 @protocol SimBridge; |
| 41 @class SimDeviceSet; |
| 42 @class SimDeviceType; |
| 43 @class SimRuntime; |
| 44 @class SimServiceConnectionManager; |
| 45 #import "CoreSimulator.h" |
| 46 #endif // IOSSIM_USE_XCODE_6 |
| 47 |
| 48 @interface DVTPlatform : NSObject |
| 49 + (BOOL)loadAllPlatformsReturningError:(id*)arg1; |
| 50 @end |
| 27 @class DTiPhoneSimulatorApplicationSpecifier; | 51 @class DTiPhoneSimulatorApplicationSpecifier; |
| 28 @class DTiPhoneSimulatorSession; | 52 @class DTiPhoneSimulatorSession; |
| 29 @class DTiPhoneSimulatorSessionConfig; | 53 @class DTiPhoneSimulatorSessionConfig; |
| 30 @class DTiPhoneSimulatorSystemRoot; | 54 @class DTiPhoneSimulatorSystemRoot; |
| 55 @class DVTConfinementServiceConnection; |
| 56 @class DVTDispatchLock; |
| 31 @class DVTiPhoneSimulatorMessenger; | 57 @class DVTiPhoneSimulatorMessenger; |
| 32 | 58 @class DVTNotificationToken; |
| 33 @interface DVTPlatform : NSObject | |
| 34 + (BOOL)loadAllPlatformsReturningError:(id*)arg1; | |
| 35 @end | |
| 36 | |
| 37 @protocol OS_dispatch_source | |
| 38 @end | |
| 39 @protocol OS_dispatch_queue | |
| 40 @end | |
| 41 @class DVTDispatchLock; | |
| 42 @class DVTConfinementServiceConnection; | |
| 43 @class DVTTask; | 59 @class DVTTask; |
| 44 | 60 // The DTiPhoneSimulatorSessionDelegate protocol is referenced |
| 61 // by the iPhoneSimulatorRemoteClient framework, but not defined in the object |
| 62 // file, so it must be defined here before importing the generated |
| 63 // iPhoneSimulatorRemoteClient.h file. |
| 45 @protocol DTiPhoneSimulatorSessionDelegate | 64 @protocol DTiPhoneSimulatorSessionDelegate |
| 46 - (void)session:(DTiPhoneSimulatorSession*)session | 65 - (void)session:(DTiPhoneSimulatorSession*)session |
| 47 didEndWithError:(NSError*)error; | 66 didEndWithError:(NSError*)error; |
| 48 - (void)session:(DTiPhoneSimulatorSession*)session | 67 - (void)session:(DTiPhoneSimulatorSession*)session |
| 49 didStart:(BOOL)started | 68 didStart:(BOOL)started |
| 50 withError:(NSError*)error; | 69 withError:(NSError*)error; |
| 51 @end | 70 @end |
| 52 | |
| 53 #import "DVTiPhoneSimulatorRemoteClient.h" | 71 #import "DVTiPhoneSimulatorRemoteClient.h" |
| 54 | 72 |
| 55 // An undocumented system log key included in messages from launchd. The value | 73 // An undocumented system log key included in messages from launchd. The value |
| 56 // is the PID of the process the message is about (as opposed to launchd's PID). | 74 // is the PID of the process the message is about (as opposed to launchd's PID). |
| 57 #define ASL_KEY_REF_PID "RefPID" | 75 #define ASL_KEY_REF_PID "RefPID" |
| 58 | 76 |
| 59 namespace { | 77 namespace { |
| 60 | 78 |
| 61 // Name of environment variables that control the user's home directory in the | 79 // Name of environment variables that control the user's home directory in the |
| 62 // simulator. | 80 // simulator. |
| (...skipping 14 matching lines...) Expand all Loading... |
| 77 // exception being if the app is invoked and completes execution before the | 95 // exception being if the app is invoked and completes execution before the |
| 78 // session is started (this case is handled in session:didStart:withError). | 96 // session is started (this case is handled in session:didStart:withError). |
| 79 const NSTimeInterval kDefaultSessionStartTimeoutSeconds = 30; | 97 const NSTimeInterval kDefaultSessionStartTimeoutSeconds = 30; |
| 80 | 98 |
| 81 // While the simulated app is running, its stdout is redirected to a file which | 99 // While the simulated app is running, its stdout is redirected to a file which |
| 82 // is polled by iossim and written to iossim's stdout using the following | 100 // is polled by iossim and written to iossim's stdout using the following |
| 83 // polling interval. | 101 // polling interval. |
| 84 const NSTimeInterval kOutputPollIntervalSeconds = 0.1; | 102 const NSTimeInterval kOutputPollIntervalSeconds = 0.1; |
| 85 | 103 |
| 86 // The path within the developer dir of the private Simulator frameworks. | 104 // The path within the developer dir of the private Simulator frameworks. |
| 105 #if defined(IOSSIM_USE_XCODE_6) |
| 106 NSString* const kSimulatorFrameworkRelativePath = |
| 107 @"../SharedFrameworks/DVTiPhoneSimulatorRemoteClient.framework"; |
| 108 #else |
| 87 NSString* const kSimulatorFrameworkRelativePath = | 109 NSString* const kSimulatorFrameworkRelativePath = |
| 88 @"Platforms/iPhoneSimulator.platform/Developer/Library/PrivateFrameworks/" | 110 @"Platforms/iPhoneSimulator.platform/Developer/Library/PrivateFrameworks/" |
| 89 @"DVTiPhoneSimulatorRemoteClient.framework"; | 111 @"DVTiPhoneSimulatorRemoteClient.framework"; |
| 112 #endif // IOSSIM_USE_XCODE_6 |
| 90 NSString* const kDVTFoundationRelativePath = | 113 NSString* const kDVTFoundationRelativePath = |
| 91 @"../SharedFrameworks/DVTFoundation.framework"; | 114 @"../SharedFrameworks/DVTFoundation.framework"; |
| 92 NSString* const kDevToolsFoundationRelativePath = | 115 NSString* const kDevToolsFoundationRelativePath = |
| 93 @"../OtherFrameworks/DevToolsFoundation.framework"; | 116 @"../OtherFrameworks/DevToolsFoundation.framework"; |
| 94 NSString* const kSimulatorRelativePath = | 117 NSString* const kSimulatorRelativePath = |
| 95 @"Platforms/iPhoneSimulator.platform/Developer/Applications/" | 118 @"Platforms/iPhoneSimulator.platform/Developer/Applications/" |
| 96 @"iPhone Simulator.app"; | 119 @"iPhone Simulator.app"; |
| 97 | 120 |
| 98 // Simulator Error String Key. This can be found by looking in the Simulator's | 121 // Simulator Error String Key. This can be found by looking in the Simulator's |
| 99 // Localizable.strings files. | 122 // Localizable.strings files. |
| (...skipping 650 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 750 if (!simHomePath) { | 773 if (!simHomePath) { |
| 751 NSString* dirNameTemplate = | 774 NSString* dirNameTemplate = |
| 752 [NSString stringWithFormat:@"iossim-%@-%@-XXXXXX", appName, deviceName]; | 775 [NSString stringWithFormat:@"iossim-%@-%@-XXXXXX", appName, deviceName]; |
| 753 simHomePath = CreateTempDirectory(dirNameTemplate); | 776 simHomePath = CreateTempDirectory(dirNameTemplate); |
| 754 if (!simHomePath) { | 777 if (!simHomePath) { |
| 755 LogError(@"Unable to create unique directory for template %@", | 778 LogError(@"Unable to create unique directory for template %@", |
| 756 dirNameTemplate); | 779 dirNameTemplate); |
| 757 exit(kExitInitializationFailure); | 780 exit(kExitInitializationFailure); |
| 758 } | 781 } |
| 759 } | 782 } |
| 783 |
| 760 if (!InitializeSimulatorUserHome(simHomePath)) { | 784 if (!InitializeSimulatorUserHome(simHomePath)) { |
| 761 LogError(@"Unable to initialize home directory for simulator: %@", | 785 LogError(@"Unable to initialize home directory for simulator: %@", |
| 762 simHomePath); | 786 simHomePath); |
| 763 exit(kExitInitializationFailure); | 787 exit(kExitInitializationFailure); |
| 764 } | 788 } |
| 765 | 789 |
| 766 // Create the config and simulator session. | 790 // Create the config and simulator session. |
| 767 DTiPhoneSimulatorSessionConfig* config = BuildSessionConfig(appSpec, | 791 DTiPhoneSimulatorSessionConfig* config = BuildSessionConfig(appSpec, |
| 768 systemRoot, | 792 systemRoot, |
| 769 stdioPath, | 793 stdioPath, |
| (...skipping 23 matching lines...) Expand all Loading... |
| 793 [error localizedDescription], | 817 [error localizedDescription], |
| 794 [error domain], static_cast<long int>([error code])); | 818 [error domain], static_cast<long int>([error code])); |
| 795 } | 819 } |
| 796 | 820 |
| 797 // Note that this code is only executed if the simulator fails to start | 821 // Note that this code is only executed if the simulator fails to start |
| 798 // because once the main run loop is started, only the delegate calling | 822 // because once the main run loop is started, only the delegate calling |
| 799 // exit() will end the program. | 823 // exit() will end the program. |
| 800 [pool drain]; | 824 [pool drain]; |
| 801 return kExitFailure; | 825 return kExitFailure; |
| 802 } | 826 } |
| OLD | NEW |