iOS: Removed ios_sim tool source. simctl is used for app deployment on iOS Simulator

Task-number: QTCREATORBUG-16942
Change-Id: Ie50bdfdbf9005e383a2753a3c6081a563a175f61
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
Vikas Pachdha
2016-10-04 17:49:16 +02:00
parent 2b0daf42ce
commit 28341ac3f1
28 changed files with 0 additions and 3145 deletions

View File

@@ -1,10 +1,3 @@
TEMPLATE = subdirs TEMPLATE = subdirs
mac {
SUBDIRS += \
iossim \
iossim_1_8_2
}
isEmpty(BUILD_CPLUSPLUS_TOOLS):BUILD_CPLUSPLUS_TOOLS=$$(BUILD_CPLUSPLUS_TOOLS) isEmpty(BUILD_CPLUSPLUS_TOOLS):BUILD_CPLUSPLUS_TOOLS=$$(BUILD_CPLUSPLUS_TOOLS)
!isEmpty(BUILD_CPLUSPLUS_TOOLS): SUBDIRS += cplusplus-keywordgen !isEmpty(BUILD_CPLUSPLUS_TOOLS): SUBDIRS += cplusplus-keywordgen

View File

@@ -1,31 +0,0 @@
Author: Landon Fuller <landonf@plausiblelabs.com>
Copyright (c) 2008-2011 Plausible Labs Cooperative, Inc.
All rights reserved.
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the "Software"), to deal in the Software without
restriction, including without limitation the rights to use,
copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following
conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
Modifications made by the following entities are licensed as above:
- Jeff Haynie, Appcelerator, Inc.
- https://github.com/hborders
- http://pivotallabs.com/users/scoward/blog
- Eloy Duran, Fingertips <eloy@fngtps.com>
- Fawzi Mohamed, digia <fawzi.mohamed@digia.com>

View File

@@ -1,16 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleExecutable</key>
<string>iossim</string>
<key>CFBundleIdentifier</key>
<string>org.qt-project.qt-creator.iossim</string>
<key>LSUIElement</key>
<string>1</string>
</dict>
</plist>

View File

@@ -1,450 +0,0 @@
//
// Generated by class-dump 3.5 (64 bit).
//
// class-dump is Copyright (C) 1997-1998, 2000-2001, 2004-2013 by Steve Nygard.
//
#pragma mark Function Pointers and Blocks
typedef void (*CDUnknownFunctionPointerType)(void); // return type and parameters are unknown
typedef void (^CDUnknownBlockType)(void); // return type and parameters are unknown
#pragma mark Named Structures
/*struct CGSize {
double width;
double height;
};*/
#pragma mark -
//
// File: $(DEVELOPER_DIR)/Library/PrivateFrameworks/CoreSimulator.framework/Versions/A/CoreSimulator
// UUID: C7A40E7B-B10C-3CB4-85F5-42071E2E5C4C
//
// Arch: x86_64
// Current version: 84.0.0
// Compatibility version: 1.0.0
// Source version: 84.0.0.0.0
// Minimum Mac OS X version: 10.9.0
// SDK version: 10.9.0
//
// Objective-C Garbage Collection: Unsupported
//
@protocol OS_dispatch_queue;
@protocol OS_xpc_object;
@protocol SimBridge;
@class SimDevice;
@class SimDeviceSet;
@class SimDeviceType;
@class SimRuntime;
@class SimDeviceNotificationManager;
@class SimServiceConnectionManager;
@protocol SimDeviceNotifier
- (BOOL)unregisterNotificationHandler:(unsigned long long)arg1 error:(id *)arg2;
- (unsigned long long)registerNotificationHandlerOnQueue:(NSObject<OS_dispatch_queue> *)arg1 handler:(void (^)(NSDictionary *))arg2;
- (unsigned long long)registerNotificationHandler:(void (^)(NSDictionary *))arg1;
@end
@interface NSArray (argv)
- (void)freeArgv:(char **)arg1;
- (char **)argv;
@end
@interface NSDictionary (envp)
- (void)freeEnvp:(char **)arg1;
- (char **)envp;
@end
@interface NSError (SimError)
+ (id)errorFromXPCDict:(id)arg1;
+ (id)errorWithSimErrno:(int)arg1 localizedDescription:(id)arg2;
+ (id)errorWithSimErrno:(int)arg1 userInfo:(id)arg2;
+ (id)errorWithSimErrno:(int)arg1;
- (id)xpcDict;
@end
@interface NSString (cputype)
+ (id)stringForCPUType:(int)arg1;
- (int)cputype;
@end
@interface NSUserDefaults (SimDefaults)
+ (id)simulatorDefaults;
@end
@interface SimDevice : NSObject <SimDeviceNotifier>
{
unsigned long long _state;
NSString *_name;
NSDictionary *_uiWindowProperties;
SimDeviceType *_deviceType;
SimRuntime *_runtime;
NSUUID *_UDID;
SimDeviceSet *_deviceSet;
SimServiceConnectionManager *_connectionManager;
NSString *_setPath;
SimDeviceNotificationManager *_notificationManager;
NSObject<OS_dispatch_queue> *_bootstrapQueue;
NSMutableDictionary *_registeredServices;
NSObject<OS_dispatch_queue> *_stateVariableQueue;
NSMachPort *_deathTriggerPort;
NSMachPort *_hostSupportPort;
NSMachPort *_simBridgePort;
NSDistantObject<SimBridge> *_simBridgeDistantObject;
}
+ (id)simDevice:(id)arg1 UDID:(id)arg2 deviceType:(id)arg3 runtime:(id)arg4 state:(unsigned long long)arg5 connectionManager:(id)arg6 setPath:(id)arg7;
+ (id)simDeviceAtPath:(id)arg1;
+ (id)createDeviceWithName:(id)arg1 setPath:(id)arg2 deviceType:(id)arg3 runtime:(id)arg4;
+ (BOOL)isValidState:(unsigned long long)arg1;
@property(retain, nonatomic) NSDistantObject<SimBridge> *simBridgeDistantObject; // @synthesize simBridgeDistantObject=_simBridgeDistantObject;
@property(retain, nonatomic) NSMachPort *simBridgePort; // @synthesize simBridgePort=_simBridgePort;
@property(retain, nonatomic) NSMachPort *hostSupportPort; // @synthesize hostSupportPort=_hostSupportPort;
@property(retain) NSMachPort *deathTriggerPort; // @synthesize deathTriggerPort=_deathTriggerPort;
@property(retain) NSObject<OS_dispatch_queue> *stateVariableQueue; // @synthesize stateVariableQueue=_stateVariableQueue;
@property(retain) NSMutableDictionary *registeredServices; // @synthesize registeredServices=_registeredServices;
@property(retain) NSObject<OS_dispatch_queue> *bootstrapQueue; // @synthesize bootstrapQueue=_bootstrapQueue;
@property(retain) SimDeviceNotificationManager *notificationManager; // @synthesize notificationManager=_notificationManager;
@property(copy) NSString *setPath; // @synthesize setPath=_setPath;
@property(retain) SimServiceConnectionManager *connectionManager; // @synthesize connectionManager=_connectionManager;
@property(readonly) SimDeviceSet *deviceSet; // @synthesize deviceSet=_deviceSet;
@property(copy) NSUUID *UDID; // @synthesize UDID=_UDID;
@property(retain) SimRuntime *runtime; // @synthesize runtime=_runtime;
@property(retain) SimDeviceType *deviceType; // @synthesize deviceType=_deviceType;
//- (void).cxx_destruct;
- (BOOL)isAvailableWithError:(id *)arg1;
@property(readonly) BOOL available;
- (int)launchApplicationWithID:(id)arg1 options:(id)arg2 error:(id *)arg3;
- (void)launchApplicationAsyncWithID:(id)arg1 options:(id)arg2 completionHandler:(CDUnknownBlockType)arg3;
- (id)installedAppsWithError:(id *)arg1;
- (BOOL)applicationIsInstalled:(id)arg1 type:(id *)arg2 error:(id *)arg3;
- (BOOL)uninstallApplication:(id)arg1 withOptions:(id)arg2 error:(id *)arg3;
- (BOOL)installApplication:(id)arg1 withOptions:(id)arg2 error:(id *)arg3;
- (BOOL)setKeyboardLanguage:(id)arg1 error:(id *)arg2;
- (BOOL)addPhoto:(id)arg1 error:(id *)arg2;
- (BOOL)openURL:(id)arg1 error:(id *)arg2;
- (void)simBridgeSync:(CDUnknownBlockType)arg1;
- (void)simBridgeAsync:(CDUnknownBlockType)arg1;
- (void)simBridgeCommon:(CDUnknownBlockType)arg1;
- (long long)compare:(id)arg1;
- (id)newDeviceNotification;
- (id)createXPCNotification:(const char *)arg1;
- (id)createXPCRequest:(const char *)arg1;
- (void)handleXPCRequestSpawn:(id)arg1 peer:(id)arg2;
- (void)handleXPCRequestGetenv:(id)arg1 peer:(id)arg2;
- (void)handleXPCRequestLookup:(id)arg1 peer:(id)arg2;
- (void)handleXPCRequestRegister:(id)arg1 peer:(id)arg2;
- (void)handleXPCRequestRestore:(id)arg1 peer:(id)arg2;
- (void)handleXPCRequestUpdateUIWindow:(id)arg1 peer:(id)arg2;
- (void)handleXPCRequestErase:(id)arg1 peer:(id)arg2;
- (void)handleXPCRequestUpgrade:(id)arg1 peer:(id)arg2;
- (void)handleXPCRequestShutdown:(id)arg1 peer:(id)arg2;
- (void)handleXPCRequestBoot:(id)arg1 peer:(id)arg2;
- (void)handleXPCRequestRename:(id)arg1 peer:(id)arg2;
- (void)handleXPCRequest:(id)arg1 peer:(id)arg2;
- (void)handleXPCNotificationDeviceUIWindowPropertiesChanged:(id)arg1;
- (void)handleXPCNotificationDeviceRenamed:(id)arg1;
- (void)handleXPCNotificationDeviceStateChanged:(id)arg1;
- (void)handleXPCNotification:(id)arg1;
@property(copy) NSDictionary *uiWindowProperties;
@property(copy) NSString *name;
@property unsigned long long state;
- (id)stateString;
- (BOOL)unregisterNotificationHandler:(unsigned long long)arg1 error:(id *)arg2;
- (unsigned long long)registerNotificationHandlerOnQueue:(id)arg1 handler:(CDUnknownBlockType)arg2;
- (unsigned long long)registerNotificationHandler:(CDUnknownBlockType)arg1;
- (void)simulateMemoryWarning;
- (id)memoryWarningFilePath;
@property(readonly, copy) NSString *logPath;
- (id)dataPath;
- (id)devicePath;
- (id)environment;
- (int)_spawnFromSelfWithPath:(id)arg1 options:(id)arg2 terminationHandler:(CDUnknownBlockType)arg3 error:(id *)arg4;
- (int)_spawnFromLaunchdWithPath:(id)arg1 options:(id)arg2 terminationHandler:(CDUnknownBlockType)arg3 error:(id *)arg4;
- (int)spawnWithPath:(id)arg1 options:(id)arg2 terminationHandler:(CDUnknownBlockType)arg3 error:(id *)arg4;
- (void)spawnAsyncWithPath:(id)arg1 options:(id)arg2 terminationHandler:(CDUnknownBlockType)arg3 completionHandler:(CDUnknownBlockType)arg4;
- (BOOL)registerPort:(unsigned int)arg1 service:(id)arg2 error:(id *)arg3;
- (unsigned int)lookup:(id)arg1 error:(id *)arg2;
- (unsigned int)_lookup:(id)arg1 error:(id *)arg2;
- (id)getenv:(id)arg1 error:(id *)arg2;
- (BOOL)restoreContentsAndSettingsFromDevice:(id)arg1 error:(id *)arg2;
- (void)restoreContentsAndSettingsAsyncFromDevice:(id)arg1 completionHandler:(CDUnknownBlockType)arg2;
- (BOOL)updateUIWindowProperties:(id)arg1 error:(id *)arg2;
- (void)updateAsyncUIWindowProperties:(id)arg1 completionHandler:(CDUnknownBlockType)arg2;
- (void)_sendUIWindowPropertiesToDevice;
- (BOOL)eraseContentsAndSettingsWithError:(id *)arg1;
- (void)eraseContentsAndSettingsAsyncWithCompletionHandler:(CDUnknownBlockType)arg1;
- (BOOL)upgradeToRuntime:(id)arg1 error:(id *)arg2;
- (void)upgradeAsyncToRuntime:(id)arg1 completionHandler:(CDUnknownBlockType)arg2;
- (BOOL)rename:(id)arg1 error:(id *)arg2;
- (void)renameAsync:(id)arg1 completionHandler:(CDUnknownBlockType)arg2;
- (BOOL)shutdownWithError:(id *)arg1;
- (BOOL)_shutdownWithError:(id *)arg1;
- (void)shutdownAsyncWithCompletionHandler:(CDUnknownBlockType)arg1;
- (BOOL)bootWithOptions:(id)arg1 error:(id *)arg2;
- (void)bootAsyncWithOptions:(id)arg1 completionHandler:(CDUnknownBlockType)arg2;
- (void)launchdDeathHandlerWithDeathPort:(id)arg1;
- (BOOL)startLaunchdWithDeathPort:(id)arg1 deathHandler:(CDUnknownBlockType)arg2 error:(id *)arg3;
- (void)registerPortsWithLaunchd;
@property(readonly) NSArray *launchDaemonsPaths;
- (BOOL)removeLaunchdJobWithError:(id *)arg1;
- (BOOL)createLaunchdJobWithError:(id *)arg1 extraEnvironment:(id)arg2;
- (BOOL)clearTmpWithError:(id *)arg1;
- (BOOL)ensureLogPathsWithError:(id *)arg1;
- (BOOL)supportsFeature:(id)arg1;
@property(readonly, copy) NSString *launchdJobName;
- (void)saveToDisk;
- (id)saveStateDict;
- (void)validateAndFixState;
@property(readonly, copy) NSString *descriptiveName;
- (id)description;
- (void)dealloc;
- (id)initDevice:(id)arg1 UDID:(id)arg2 deviceType:(id)arg3 runtime:(id)arg4 state:(unsigned long long)arg5 connectionManager:(id)arg6 setPath:(id)arg7;
@end
@interface SimDeviceNotificationManager : NSObject <SimDeviceNotifier>
{
NSObject<OS_dispatch_queue> *_handlersQueue;
NSMutableDictionary *_handlers;
unsigned long long _next_regID;
NSObject<OS_dispatch_queue> *_sendQueue;
}
@property(retain) NSObject<OS_dispatch_queue> *sendQueue; // @synthesize sendQueue=_sendQueue;
@property unsigned long long next_regID; // @synthesize next_regID=_next_regID;
@property(retain) NSMutableDictionary *handlers; // @synthesize handlers=_handlers;
@property(retain) NSObject<OS_dispatch_queue> *handlersQueue; // @synthesize handlersQueue=_handlersQueue;
//- (void).cxx_destruct;
- (void)sendNotification:(id)arg1;
- (BOOL)unregisterNotificationHandler:(unsigned long long)arg1 error:(id *)arg2;
- (unsigned long long)registerNotificationHandlerOnQueue:(id)arg1 handler:(CDUnknownBlockType)arg2;
- (unsigned long long)registerNotificationHandler:(CDUnknownBlockType)arg1;
- (void)dealloc;
- (id)init;
@end
@interface SimDeviceSet : NSObject <SimDeviceNotifier>
{
NSString *_setPath;
NSObject<OS_dispatch_queue> *_devicesQueue;
NSMutableDictionary *__devicesByUDID;
NSMutableDictionary *_devicesNotificationRegIDs;
SimServiceConnectionManager *_connectionManager;
SimDeviceNotificationManager *_notificationManager;
}
+ (id)setForSetPath:(id)arg1;
+ (id)defaultSet;
+ (id)defaultSetPath;
@property(retain) SimDeviceNotificationManager *notificationManager; // @synthesize notificationManager=_notificationManager;
@property(retain) SimServiceConnectionManager *connectionManager; // @synthesize connectionManager=_connectionManager;
@property(retain) NSMutableDictionary *devicesNotificationRegIDs; // @synthesize devicesNotificationRegIDs=_devicesNotificationRegIDs;
@property(retain) NSMutableDictionary *_devicesByUDID; // @synthesize _devicesByUDID=__devicesByUDID;
@property(retain) NSObject<OS_dispatch_queue> *devicesQueue; // @synthesize devicesQueue=_devicesQueue;
@property(copy) NSString *setPath; // @synthesize setPath=_setPath;
//- (void).cxx_destruct;
- (void)handleXPCRequestDeleteDevice:(id)arg1 peer:(id)arg2 device:(id)arg3;
- (void)handleXPCRequestCreateDevice:(id)arg1 peer:(id)arg2;
- (void)handleXPCRequest:(id)arg1 peer:(id)arg2;
- (void)handleXPCNotificationDeviceRemoved:(id)arg1;
- (void)handleXPCNotificationDeviceAdded:(id)arg1;
- (void)handleXPCNotification:(id)arg1;
- (BOOL)deleteDevice:(id)arg1 error:(id *)arg2;
- (void)deleteDeviceAsync:(id)arg1 completionHandler:(CDUnknownBlockType)arg2;
- (id)createDeviceWithType:(id)arg1 runtime:(id)arg2 name:(id)arg3 error:(id *)arg4;
- (void)createDeviceAsyncWithType:(id)arg1 runtime:(id)arg2 name:(id)arg3 completionHandler:(CDUnknownBlockType)arg4;
- (BOOL)unregisterNotificationHandler:(unsigned long long)arg1 error:(id *)arg2;
- (unsigned long long)registerNotificationHandlerOnQueue:(id)arg1 handler:(CDUnknownBlockType)arg2;
- (unsigned long long)registerNotificationHandler:(CDUnknownBlockType)arg1;
- (void)removeDeviceAsync:(id)arg1;
- (void)addDevice:(id)arg1;
- (void)addDeviceAsync:(id)arg1;
- (void)updateDefaultDevices;
- (id)defaultCreatedPlistPath;
@property(readonly, copy) NSArray *availableDevices;
@property(readonly, copy) NSArray *devices;
@property(readonly, copy) NSDictionary *devicesByUDID;
- (id)description;
- (void)dealloc;
- (id)initWithSetPath:(id)arg1;
@end
@interface SimDeviceType : NSObject
{
float _mainScreenScale;
unsigned int _minRuntimeVersion;
unsigned int _maxRuntimeVersion;
NSString *_name;
NSString *_identifier;
NSString *_modelIdentifier;
NSBundle *_bundle;
NSArray *_supportedArchs;
NSArray *_supportedProductFamilyIDs;
NSDictionary *_capabilities;
NSString *_springBoardConfigName;
NSString *_productClass;
NSDictionary *_environment_extra;
NSDictionary *_aliases;
NSDictionary *_supportedFeatures;
NSDictionary *_supportedFeaturesConditionalOnRuntime;
struct CGSize _mainScreenSize;
struct CGSize _mainScreenDPI;
}
+ (id)supportedDeviceTypesByName;
+ (id)supportedDeviceTypesByAlias;
+ (id)supportedDeviceTypesByIdentifier;
+ (id)supportedDeviceTypes;
+ (id)supportedDevices;
@property(copy) NSDictionary *supportedFeaturesConditionalOnRuntime; // @synthesize supportedFeaturesConditionalOnRuntime=_supportedFeaturesConditionalOnRuntime;
@property(copy) NSDictionary *supportedFeatures; // @synthesize supportedFeatures=_supportedFeatures;
@property(copy) NSDictionary *aliases; // @synthesize aliases=_aliases;
@property(copy) NSDictionary *environment_extra; // @synthesize environment_extra=_environment_extra;
@property(copy) NSString *productClass; // @synthesize productClass=_productClass;
@property(copy) NSString *springBoardConfigName; // @synthesize springBoardConfigName=_springBoardConfigName;
@property unsigned int maxRuntimeVersion; // @synthesize maxRuntimeVersion=_maxRuntimeVersion;
@property unsigned int minRuntimeVersion; // @synthesize minRuntimeVersion=_minRuntimeVersion;
@property struct CGSize mainScreenDPI; // @synthesize mainScreenDPI=_mainScreenDPI;
@property struct CGSize mainScreenSize; // @synthesize mainScreenSize=_mainScreenSize;
@property(copy) NSDictionary *capabilities; // @synthesize capabilities=_capabilities;
@property float mainScreenScale; // @synthesize mainScreenScale=_mainScreenScale;
@property(copy) NSArray *supportedProductFamilyIDs; // @synthesize supportedProductFamilyIDs=_supportedProductFamilyIDs;
@property(copy) NSArray *supportedArchs; // @synthesize supportedArchs=_supportedArchs;
@property(retain) NSBundle *bundle; // @synthesize bundle=_bundle;
@property(copy) NSString *modelIdentifier; // @synthesize modelIdentifier=_modelIdentifier;
@property(copy) NSString *identifier; // @synthesize identifier=_identifier;
@property(copy) NSString *name; // @synthesize name=_name;
//- (void).cxx_destruct;
- (Class)deviceClass;
- (long long)compare:(id)arg1;
- (BOOL)supportsFeatureConditionally:(id)arg1;
- (BOOL)supportsFeature:(id)arg1;
- (id)environmentForRuntime:(id)arg1;
- (id)environment;
@property(readonly, copy) NSString *productFamily;
@property(readonly) int productFamilyID;
- (id)description;
- (void)dealloc;
- (id)initWithBundle:(id)arg1;
- (id)initWithPath:(id)arg1;
- (id)init;
@end
@interface SimRuntime : NSObject
{
unsigned int _version;
unsigned int _minHostVersion;
unsigned int _maxHostVersion;
NSString *_name;
NSString *_identifier;
NSBundle *_bundle;
NSString *_root;
NSString *_versionString;
NSString *_buildVersionString;
NSDictionary *_supportedFeatures;
NSDictionary *_supportedFeaturesConditionalOnDeviceType;
NSDictionary *_requiredHostServices;
NSString *_platformPath;
NSArray *_supportedProductFamilyIDs;
NSDictionary *_environment_extra;
void *_libLaunchHostHandle;
NSDictionary *_aliases;
}
+ (id)supportedRuntimesByAlias;
+ (id)supportedRuntimesByIdentifier;
+ (id)supportedRuntimes;
@property unsigned int maxHostVersion; // @synthesize maxHostVersion=_maxHostVersion;
@property unsigned int minHostVersion; // @synthesize minHostVersion=_minHostVersion;
@property(copy) NSDictionary *aliases; // @synthesize aliases=_aliases;
@property(nonatomic) void *libLaunchHostHandle; // @synthesize libLaunchHostHandle=_libLaunchHostHandle;
@property(copy) NSDictionary *environment_extra; // @synthesize environment_extra=_environment_extra;
@property(copy) NSArray *supportedProductFamilyIDs; // @synthesize supportedProductFamilyIDs=_supportedProductFamilyIDs;
@property(copy) NSString *platformPath; // @synthesize platformPath=_platformPath;
@property(copy) NSDictionary *requiredHostServices; // @synthesize requiredHostServices=_requiredHostServices;
@property(copy) NSDictionary *supportedFeaturesConditionalOnDeviceType; // @synthesize supportedFeaturesConditionalOnDeviceType=_supportedFeaturesConditionalOnDeviceType;
@property(copy) NSDictionary *supportedFeatures; // @synthesize supportedFeatures=_supportedFeatures;
@property unsigned int version; // @synthesize version=_version;
@property(copy) NSString *buildVersionString; // @synthesize buildVersionString=_buildVersionString;
@property(copy) NSString *versionString; // @synthesize versionString=_versionString;
@property(copy) NSString *root; // @synthesize root=_root;
@property(retain) NSBundle *bundle; // @synthesize bundle=_bundle;
@property(copy) NSString *identifier; // @synthesize identifier=_identifier;
@property(copy) NSString *name; // @synthesize name=_name;
//- (void).cxx_destruct;
- (id)platformRuntimeOverlay;
- (CDUnknownFunctionPointerType)launch_sim_set_death_handler;
- (CDUnknownFunctionPointerType)launch_sim_waitpid;
- (CDUnknownFunctionPointerType)launch_sim_spawn;
- (CDUnknownFunctionPointerType)launch_sim_getenv;
- (CDUnknownFunctionPointerType)launch_sim_bind_session_to_port;
- (CDUnknownFunctionPointerType)launch_sim_find_endpoint;
- (CDUnknownFunctionPointerType)launch_sim_register_endpoint;
- (BOOL)isAvailableWithError:(id *)arg1;
@property(readonly) BOOL available;
- (BOOL)verifyRuntime;
- (id)dyld_simPath;
- (BOOL)createInitialContentPath:(id)arg1 error:(id *)arg2;
- (void)createInitialContentPath:(id)arg1;
- (id)sampleContentPath;
- (long long)compare:(id)arg1;
- (BOOL)supportsFeatureConditionally:(id)arg1;
- (BOOL)supportsFeature:(id)arg1;
- (BOOL)supportsDeviceType:(id)arg1;
- (BOOL)supportsDevice:(id)arg1;
- (id)environment;
- (id)description;
- (void)dealloc;
- (id)initWithBundle:(id)arg1;
- (id)initWithPath:(id)arg1;
- (id)init;
@end
@interface SimServiceConnectionManager : NSObject
{
NSObject<OS_xpc_object> *_serviceConnection;
NSObject<OS_dispatch_queue> *_serviceConnectionQueue;
NSDate *_lastConnectionTime;
}
+ (void)useService:(BOOL)arg1;
+ (id)sharedConnectionManager;
@property(retain) NSDate *lastConnectionTime; // @synthesize lastConnectionTime=_lastConnectionTime;
@property(retain) NSObject<OS_dispatch_queue> *serviceConnectionQueue; // @synthesize serviceConnectionQueue=_serviceConnectionQueue;
@property(retain) NSObject<OS_xpc_object> *serviceConnection; // @synthesize serviceConnection=_serviceConnection;
//- (void).cxx_destruct;
- (void)handleXPCEvent:(id)arg1;
- (void)dealloc;
- (BOOL)connect;
- (id)init;
@end
@interface SimVerifier : NSObject
{
NSObject<OS_xpc_object> *_serviceConnection;
NSObject<OS_dispatch_queue> *_serviceConnectionQueue;
}
+ (id)verificationError:(int)arg1;
+ (id)connectionError;
+ (id)sharedVerifier;
@property(retain) NSObject<OS_dispatch_queue> *serviceConnectionQueue; // @synthesize serviceConnectionQueue=_serviceConnectionQueue;
@property(retain) NSObject<OS_xpc_object> *serviceConnection; // @synthesize serviceConnection=_serviceConnection;
//- (void).cxx_destruct;
- (id)verifyDyldSim:(id)arg1;
- (id)verifyAll;
- (BOOL)verifyAllWithError:(id *)arg1;
- (void)dealloc;
- (id)init;
@end

View File

@@ -1,295 +0,0 @@
#import "../coresimulator/coresimulator.h"
//
// Generated by class-dump 3.5 (64 bit).
//
// class-dump is Copyright (C) 1997-1998, 2000-2001, 2004-2013 by Steve Nygard.
//
#pragma mark Blocks
typedef void (^CDUnknownBlockType)(void); // return type and parameters are unknown
#pragma mark -
//
// File: $(DEVELOPER_DIR)/Platforms/iPhoneSimulator.platform/Developer/Library/PrivateFrameworks/DVTiPhoneSimulatorRemoteClient.framework/Versions/A/DVTiPhoneSimulatorRemoteClient
//
// Arch: x86_64
// Current version: 12.0.0
// Compatibility version: 1.0.0
// Source version: 5037.3.0.0.0
// Minimum Mac OS X version: 10.8.0
// SDK version: 10.9.0
//
// Objective-C Garbage Collection: Unsupported
//
// Run path: @loader_path/../../../../PrivateFrameworks/
// = $(DEVELOPER_DIR)/Platforms/iPhoneSimulator.platform/Developer/Library/PrivateFrameworks
//
@class DTiPhoneSimulatorApplicationSpecifier;
@class DTiPhoneSimulatorSession;
@class DTiPhoneSimulatorSessionConfig;
@class DTiPhoneSimulatorSystemRoot;
@class DVTiPhoneSimulatorMessenger;
@protocol DTiPhoneSimulatorSessionDelegate
- (void) session: (DTiPhoneSimulatorSession *) session didEndWithError: (NSError *) error;
- (void) session: (DTiPhoneSimulatorSession *) session didStart: (BOOL) started withError: (NSError *) error;
@end
@protocol OS_dispatch_source
@end
@protocol OS_dispatch_queue
@end
@class DVTDispatchLock;
@class DVTConfinementServiceConnection;
@class DVTTask;
@interface DVTiPhoneSimulatorMessenger : NSObject
{
DTiPhoneSimulatorSession *_session;
CDUnknownBlockType _readyMessageHandler;
CDUnknownBlockType _runningMessageHandler;
CDUnknownBlockType _appDidLaunchMessageHandler;
CDUnknownBlockType _appDidQuitMessageHandler;
CDUnknownBlockType _appPIDExitedMessageHandler;
CDUnknownBlockType _toolDidLaunchMessageHandler;
}
+ (id)messengerForSession:(id)arg1 withConnection:(id)arg2;
+ (id)messengerForSession:(id)arg1;
@property(copy, nonatomic) CDUnknownBlockType toolDidLaunchMessageHandler; // @synthesize toolDidLaunchMessageHandler=_toolDidLaunchMessageHandler;
@property(copy, nonatomic) CDUnknownBlockType appPIDExitedMessageHandler; // @synthesize appPIDExitedMessageHandler=_appPIDExitedMessageHandler;
@property(copy, nonatomic) CDUnknownBlockType appDidQuitMessageHandler; // @synthesize appDidQuitMessageHandler=_appDidQuitMessageHandler;
@property(copy, nonatomic) CDUnknownBlockType appDidLaunchMessageHandler; // @synthesize appDidLaunchMessageHandler=_appDidLaunchMessageHandler;
@property(copy, nonatomic) CDUnknownBlockType runningMessageHandler; // @synthesize runningMessageHandler=_runningMessageHandler;
@property(copy, nonatomic) CDUnknownBlockType readyMessageHandler; // @synthesize readyMessageHandler=_readyMessageHandler;
@property(readonly) DTiPhoneSimulatorSession *session; // @synthesize session=_session;
- (void)doUbiquityFetchEvent;
- (void)doFetchEventForPID:(int)arg1;
- (void)backgroundAllApps:(int)arg1;
- (void)startSimulatorToolSessionWithParameters:(id)arg1;
- (void)stopSimulatingLocation;
- (void)startSimulatingLocationWithLatitude:(id)arg1 longitute:(id)arg2;
- (void)endSimulatorSessionWithPID:(int)arg1;
- (void)startSimulatorSessionWithRequestInfo:(id)arg1;
- (void)clearAllMessageHandlers;
- (void)waitPID:(int)arg1 withAppPIDExitedMessagedHandler:(CDUnknownBlockType)arg2;
- (void)disconnectFromService;
- (BOOL)connectToServiceWithSessionOnLaunch:(BOOL)arg1 simulatorPID:(int *)arg2 error:(id *)arg3;
- (id)initWithSession:(id)arg1;
@end
@interface DVTiPhoneSimulatorLocalMessenger : DVTiPhoneSimulatorMessenger
{
BOOL _appTerminationMessageSent;
NSObject<OS_dispatch_source> *_pidDispatchSource;
DVTTask *_simTask;
}
- (void)doUbiquityFetchEvent;
- (void)doFetchEventForPID:(int)arg1;
- (void)backgroundAllApps:(int)arg1;
- (void)_handleSimulatorToolDidLaunchMessage:(id)arg1;
- (void)setToolDidLaunchMessageHandler:(CDUnknownBlockType)arg1;
- (void)waitPID:(int)arg1 withAppPIDExitedMessagedHandler:(CDUnknownBlockType)arg2;
- (void)_handleSimulatorAppDidQuitMessage:(id)arg1;
- (void)setAppDidQuitMessageHandler:(CDUnknownBlockType)arg1;
- (void)_handleSimulatorAppDidLaunchMessage:(id)arg1;
- (void)setAppDidLaunchMessageHandler:(CDUnknownBlockType)arg1;
- (void)_handleSimulatorRunningMessage:(id)arg1;
- (void)setRunningMessageHandler:(CDUnknownBlockType)arg1;
- (void)_handleSimulatorReadyMessage:(id)arg1;
- (void)setReadyMessageHandler:(CDUnknownBlockType)arg1;
- (void)startSimulatorToolSessionWithParameters:(id)arg1;
- (void)stopSimulatingLocation;
- (void)startSimulatingLocationWithLatitude:(id)arg1 longitute:(id)arg2;
- (void)endSimulatorSessionWithPID:(int)arg1;
- (void)startSimulatorSessionWithRequestInfo:(id)arg1;
- (void)clearAllMessageHandlers;
- (void)disconnectFromService;
- (BOOL)connectToServiceWithSessionOnLaunch:(BOOL)arg1 simulatorPID:(int *)arg2 error:(id *)arg3;
- (void)_enableObserver:(BOOL)arg1 forName:(id)arg2 selector:(SEL)arg3;
@end
@interface DVTiPhoneSimulatorRemoteMessenger : DVTiPhoneSimulatorMessenger
{
unsigned long long _commandTag;
NSObject<OS_dispatch_queue> *_responseQueue;
DVTDispatchLock *_awaitingLock;
NSMutableDictionary *_awaitingSemaphores;
NSMutableDictionary *_awaitingResponses;
NSMutableSet *_waitingAppPIDs;
DVTConfinementServiceConnection *_connection;
}
@property(readonly) DVTConfinementServiceConnection *connection; // @synthesize connection=_connection;
- (void)handleNotificationResponse:(id)arg1;
- (void)waitPID:(int)arg1 withAppPIDExitedMessagedHandler:(CDUnknownBlockType)arg2;
- (void)startSimulatorToolSessionWithParameters:(id)arg1;
- (void)stopSimulatingLocation;
- (void)startSimulatingLocationWithLatitude:(id)arg1 longitute:(id)arg2;
- (void)endSimulatorSessionWithPID:(int)arg1;
- (void)startSimulatorSessionWithRequestInfo:(id)arg1;
- (void)disconnectFromService;
- (BOOL)connectToServiceWithSessionOnLaunch:(BOOL)arg1 simulatorPID:(int *)arg2 error:(id *)arg3;
- (BOOL)sendTaggedRequest:(id)arg1 awaitingResponse:(id *)arg2 error:(id *)arg3;
- (id)nextCommandTag;
- (id)awaitResponseWithTag:(id)arg1 error:(id *)arg2;
- (void)enqueueResponse:(id)arg1 withTag:(id)arg2 error:(id)arg3;
- (BOOL)sendRequest:(id)arg1 withTag:(id)arg2 error:(id *)arg3;
- (id)initWithSession:(id)arg1 connection:(id)arg2;
@end
@interface DTiPhoneSimulatorSession : NSObject
{
int _simulatedApplicationPID;
int _simulatorPID;
NSString *_uuid;
id <DTiPhoneSimulatorSessionDelegate> _delegate;
NSString *_simulatedAppPath;
long long _sessionLifecycleProgress;
NSTimer *_timeoutTimer;
DTiPhoneSimulatorSessionConfig *_sessionConfig;
DVTiPhoneSimulatorMessenger *_messenger;
}
@property(retain) DVTiPhoneSimulatorMessenger *messenger; // @synthesize messenger=_messenger;
@property(copy, nonatomic) DTiPhoneSimulatorSessionConfig *sessionConfig; // @synthesize sessionConfig=_sessionConfig;
@property(retain, nonatomic) NSTimer *timeoutTimer; // @synthesize timeoutTimer=_timeoutTimer;
@property(nonatomic) long long sessionLifecycleProgress; // @synthesize sessionLifecycleProgress=_sessionLifecycleProgress;
@property int simulatorPID; // @synthesize simulatorPID=_simulatorPID;
@property(copy) NSString *simulatedAppPath; // @synthesize simulatedAppPath=_simulatedAppPath;
@property int simulatedApplicationPID; // @synthesize simulatedApplicationPID=_simulatedApplicationPID;
@property(retain, nonatomic) id <DTiPhoneSimulatorSessionDelegate> delegate; // @synthesize delegate=_delegate;
@property(copy, nonatomic) NSString *uuid; // @synthesize uuid=_uuid;
- (void)doUbiquityFetchEvent;
- (void)doFetchEventForPID:(int)arg1;
- (void)backgroundAllApps:(int)arg1;
- (id)_invalidConfigError;
- (void)_endSimulatorSession;
- (void)_callDelegateResponseFromSessionEndedInfo:(id)arg1;
- (void)_callDelegateResponseFromSessionStartedInfo:(id)arg1;
- (id)_sessionStartRequestInfoFromConfig:(id)arg1 withError:(id *)arg2;
- (BOOL)_startToolSessionInSimulatorWithError:(id *)arg1;
- (BOOL)_startApplicationSessionInSimulatorWithError:(id *)arg1;
- (BOOL)_startBasicSessionInSimulatorWithError:(id *)arg1;
- (BOOL)_startSessionInSimulatorWithError:(id *)arg1;
- (BOOL)_handleSessionEndedInSimulator:(id)arg1 notification:(id)arg2;
- (void)_handleSessionStartedWithSim:(id)arg1;
- (void)_handleSessionStartedInSimulator:(id)arg1;
- (void)_handleSimulatorReadyMessage:(id)arg1;
- (void)_timeoutElapsed:(id)arg1;
- (BOOL)attachedToTargetWithConfig:(id)arg1 error:(id *)arg2;
- (void)stopLocationSimulation;
- (void)simulateLocationWithLatitude:(id)arg1 longitude:(id)arg2;
- (void)requestEndWithTimeout:(double)arg1;
- (BOOL)requestStartWithConfig:(id)arg1 timeout:(double)arg2 error:(id *)arg3;
- (BOOL)_setUpSimulatorMessengerWithConfig:(id)arg1 error:(id *)arg2;
- (id)description;
- (void)dealloc;
- (id)init;
@end
@interface DTiPhoneSimulatorSessionConfig : NSObject <NSCopying>
{
BOOL _launchForBackgroundFetch;
BOOL _simulatedApplicationShouldWaitForDebugger;
NSString *_localizedClientName;
DTiPhoneSimulatorSystemRoot *_simulatedSystemRoot;
NSString *_simulatedDeviceInfoName;
NSNumber *_simulatedDeviceFamily;
NSString *_simulatedArchitecture;
NSNumber *_simulatedDisplayHeight;
NSNumber *_simulatedDisplayScale;
DTiPhoneSimulatorApplicationSpecifier *_applicationToSimulateOnStart;
NSNumber *_pid;
NSArray *_simulatedApplicationLaunchArgs;
NSDictionary *_simulatedApplicationLaunchEnvironment;
NSString *_simulatedApplicationStdOutPath;
NSString *_simulatedApplicationStdErrPath;
NSFileHandle *_stdinFileHandle;
NSFileHandle *_stdoutFileHandle;
NSFileHandle *_stderrFileHandle;
id _confinementService;
}
+ (id)displayNameForDeviceFamily:(id)arg1;
@property(retain) id confinementService; // @synthesize confinementService=_confinementService;
@property(retain) NSFileHandle *stderrFileHandle; // @synthesize stderrFileHandle=_stderrFileHandle;
@property(retain) NSFileHandle *stdoutFileHandle; // @synthesize stdoutFileHandle=_stdoutFileHandle;
@property(retain) NSFileHandle *stdinFileHandle; // @synthesize stdinFileHandle=_stdinFileHandle;
@property(copy) NSString *simulatedApplicationStdErrPath; // @synthesize simulatedApplicationStdErrPath=_simulatedApplicationStdErrPath;
@property(copy) NSString *simulatedApplicationStdOutPath; // @synthesize simulatedApplicationStdOutPath=_simulatedApplicationStdOutPath;
@property BOOL simulatedApplicationShouldWaitForDebugger; // @synthesize simulatedApplicationShouldWaitForDebugger=_simulatedApplicationShouldWaitForDebugger;
@property(copy) NSDictionary *simulatedApplicationLaunchEnvironment; // @synthesize simulatedApplicationLaunchEnvironment=_simulatedApplicationLaunchEnvironment;
@property(copy) NSArray *simulatedApplicationLaunchArgs; // @synthesize simulatedApplicationLaunchArgs=_simulatedApplicationLaunchArgs;
@property(copy) NSNumber *pid; // @synthesize pid=_pid;
@property(copy) DTiPhoneSimulatorApplicationSpecifier *applicationToSimulateOnStart; // @synthesize applicationToSimulateOnStart=_applicationToSimulateOnStart;
@property(copy) NSNumber *simulatedDisplayScale; // @synthesize simulatedDisplayScale=_simulatedDisplayScale;
@property(copy) NSNumber *simulatedDisplayHeight; // @synthesize simulatedDisplayHeight=_simulatedDisplayHeight;
@property(copy) NSString *simulatedArchitecture; // @synthesize simulatedArchitecture=_simulatedArchitecture;
@property(copy) NSNumber *simulatedDeviceFamily; // @synthesize simulatedDeviceFamily=_simulatedDeviceFamily;
@property(retain) NSString *simulatedDeviceInfoName; // @synthesize simulatedDeviceInfoName=_simulatedDeviceInfoName;
@property(copy) DTiPhoneSimulatorSystemRoot *simulatedSystemRoot; // @synthesize simulatedSystemRoot=_simulatedSystemRoot;
@property(copy) NSString *localizedClientName; // @synthesize localizedClientName=_localizedClientName;
@property BOOL launchForBackgroundFetch; // @synthesize launchForBackgroundFetch=_launchForBackgroundFetch;
@property(retain) SimDevice *device; // @synthesize device=_device;
@property(retain) SimRuntime *runtime; // @synthesize runtime=_runtime;
- (id)description;
- (id)copyWithZone:(struct _NSZone *)arg1;
- (id)init;
@end
@interface DTiPhoneSimulatorSystemRoot : NSObject <NSCopying>
{
NSString *sdkRootPath;
NSString *sdkVersion;
NSString *sdkDisplayName;
}
+ (id)rootWithSDKVersion:(id)arg1;
+ (id)rootWithSDKPath:(id)arg1;
+ (id)defaultRoot;
+ (id)knownRoots;
+ (void)initialize;
@property(copy) NSString *sdkDisplayName; // @synthesize sdkDisplayName;
@property(copy) NSString *sdkVersion; // @synthesize sdkVersion;
@property(copy) NSString *sdkRootPath; // @synthesize sdkRootPath;
@property(readonly) SimRuntime *runtime; // @synthesize runtime=_runtime;
- (id)description;
- (long long)compare:(id)arg1;
- (id)copyWithZone:(struct _NSZone *)arg1;
- (BOOL)isEqual:(id)arg1;
- (id)initWithSDKPath:(id)arg1;
@end
@interface DTiPhoneSimulatorApplicationSpecifier : NSObject <NSCopying>
{
NSString *appPath;
NSString *bundleID;
NSString *toolPath;
}
+ (id)specifierWithToolPath:(id)arg1;
+ (id)specifierWithApplicationBundleIdentifier:(id)arg1;
+ (id)specifierWithApplicationPath:(id)arg1;
@property(copy, nonatomic) NSString *toolPath; // @synthesize toolPath;
@property(copy, nonatomic) NSString *bundleID; // @synthesize bundleID;
@property(copy, nonatomic) NSString *appPath; // @synthesize appPath;
- (id)description;
- (id)copyWithZone:(struct _NSZone *)arg1;
@end

View File

@@ -1,60 +0,0 @@
CONFIG += console
QT -= core
QT -= gui
QT -= test
CONFIG -= app_bundle
include(../../../../qtcreator.pri)
# Prevent from popping up in the dock when launched.
# We embed the Info.plist file, so the application doesn't need to
# be a bundle.
QMAKE_LFLAGS += -Wl,-sectcreate,__TEXT,__info_plist,\"$$PWD/Info.plist\"
-fobjc-link-runtime
LIBS += \
-framework Foundation \
-framework CoreServices \
-framework ApplicationServices \
-framework CoreFoundation \
-F/System/Library/PrivateFrameworks \
-framework IOKit -framework AppKit
iPhoneSimulatorRemoteClientDirectLinking {
LIBS += \
-F/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Library/PrivateFrameworks \
-F/Applications/Xcode.app/Contents/OtherFrameworks
LIBS += \
-framework DTViPhoneSimulatorRemoteClient
QMAKE_RPATHDIR += /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Library/PrivateFrameworks \
/Applications/Xcode.app/Contents/OtherFrameworks \
/System/Library/PrivateFrameworks
}
TEMPLATE = app
# put into a subdir, so we can deploy a separate qt.conf for it
DESTDIR = $$IDE_LIBEXEC_PATH/ios
include(../../../rpath.pri)
OBJECTIVE_SOURCES += \
main.mm \
nsprintf.mm \
nsstringexpandpath.mm \
iphonesimulator.mm
HEADERS += \
iphonesimulator.h \
nsprintf.h \
nsstringexpandpath.h \
version.h \
dvtiphonesimulatorremoteclient/dvtiphonesimulatorremoteclient.h \
coresimulator/coresimulator.h
DISTFILES = IOSSIM_LICENSE \
Info.plist
target.path = $$INSTALL_LIBEXEC_PATH/ios
INSTALLS += target

View File

@@ -1,30 +0,0 @@
import qbs 1.0
QtcTool {
name: "iossim"
condition: qbs.targetOS.contains("macos")
Depends { name: "bundle" }
Depends { name: "Qt"; submodules: ["widgets"] }
Depends { name: "app_version_header" }
files: [
"main.mm",
"nsprintf.mm",
"nsstringexpandpath.mm",
"iphonesimulator.mm",
"iphonesimulator.h",
"nsprintf.h",
"nsstringexpandpath.h",
"version.h",
"dvtiphonesimulatorremoteclient/dvtiphonesimulatorremoteclient.h"
]
cpp.includePaths: ["."]
cpp.linkerFlags: base.concat(["-fobjc-link-runtime"])
cpp.frameworks: base.concat(["Foundation", "CoreServices", "ApplicationServices", "IOKit",
"AppKit"])
cpp.frameworkPaths: base.concat("/System/Library/PrivateFrameworks")
bundle.infoPlistFile: "Info.plist"
installDir: qtc.ide_libexec_path + "/ios"
}

View File

@@ -1,46 +0,0 @@
/* Author: Landon Fuller <landonf@plausiblelabs.com>
* Copyright (c) 2008-2011 Plausible Labs Cooperative, Inc.
* All rights reserved.
*
* See the IOSSIM_LICENSE file in this directory for the license on the source code in this file.
*/
#import <Foundation/Foundation.h>
#import "dvtiphonesimulatorremoteclient/dvtiphonesimulatorremoteclient.h"
#import "version.h"
@interface iPhoneSimulator : NSObject <DTiPhoneSimulatorSessionDelegate> {
@private
DTiPhoneSimulatorSystemRoot *sdkRoot;
NSFileHandle *stdoutFileHandle;
NSFileHandle *stderrFileHandle;
DTiPhoneSimulatorSession *mySession;
BOOL startOnly;
BOOL exitOnStartup;
BOOL shouldWaitDebugger;
BOOL shouldStartDebugger;
BOOL useGDB;
BOOL verbose;
BOOL alreadyPrintedData;
BOOL retinaDevice;
BOOL tallDevice;
BOOL is64BitDevice;
NSString *deviceTypeId;
NSString *m_stderrPath;
NSString *m_stdoutPath;
NSString *dataPath;
int xcodeVersionInt;
}
- (id)init;
- (void)dealloc;
- (void)runWithArgc:(int)argc argv:(char **)argv;
- (void)createStdioFIFO:(NSFileHandle **)fileHandle ofType:(NSString *)type atPath:(NSString **)path;
- (void)removeStdioFIFO:(NSFileHandle *)fileHandle atPath:(NSString *)path;
- (void)stop;
- (void)doExit:(int)errorCode;
- (SimDevice*) findDeviceWithFamily:(NSString *)family retina:(BOOL)retina isTallDevice:(BOOL)isTallDevice is64Bit:(BOOL)is64Bit;
- (NSString*)changeDeviceType:(NSString *)family retina:(BOOL)retina isTallDevice:(BOOL)isTallDevice is64Bit:(BOOL)is64Bit;
@end

View File

@@ -1,974 +0,0 @@
/* Author: Landon Fuller <landonf@plausiblelabs.com>
* Copyright (c) 2008-2011 Plausible Labs Cooperative, Inc.
* All rights reserved.
*
* See the IOSSIM_LICENSE file in this directory for the license on the source code in this file.
*/
#import "iphonesimulator.h"
#import "nsstringexpandpath.h"
#import "nsprintf.h"
#import <sys/types.h>
#import <sys/stat.h>
#import <Foundation/NSTask.h>
#import <Foundation/NSFileManager.h>
@class DTiPhoneSimulatorSystemRoot;
NSString *simulatorPrefrencesName = @"com.apple.iphonesimulator";
NSString *deviceProperty = @"SimulateDevice";
NSString *deviceIphoneRetina3_5Inch = @"iPhone Retina (3.5-inch)";
NSString *deviceIphoneRetina4_0Inch = @"iPhone Retina (4-inch)";
NSString *deviceIphoneRetina4_0Inch_64bit = @"iPhone Retina (4-inch 64-bit)";
NSString *deviceIphone = @"iPhone";
NSString *deviceIpad = @"iPad";
NSString *deviceIpadRetina = @"iPad Retina";
NSString *deviceIpadRetina_64bit = @"iPad Retina (64-bit)";
NSString* deviceTypeIdIphone4s = @"com.apple.CoreSimulator.SimDeviceType.iPhone-4s";
NSString* deviceTypeIdIphone5 = @"com.apple.CoreSimulator.SimDeviceType.iPhone-5";
NSString* deviceTypeIdIphone5s = @"com.apple.CoreSimulator.SimDeviceType.iPhone-5s";
NSString* deviceTypeIdIphone6 = @"com.apple.CoreSimulator.SimDeviceType.iPhone-6";
NSString* deviceTypeIdIphone6Plus = @"com.apple.CoreSimulator.SimDeviceType.iPhone-6-Plus";
NSString* deviceTypeIdIpad2 = @"com.apple.CoreSimulator.SimDeviceType.iPad-2";
NSString* deviceTypeIdIpadRetina = @"com.apple.CoreSimulator.SimDeviceType.iPad-Retina";
NSString* deviceTypeIdIpadAir = @"com.apple.CoreSimulator.SimDeviceType.iPad-Air";
NSString* deviceTypeIdResizableIphone = @"com.apple.CoreSimulator.SimDeviceType.Resizable-iPhone";
NSString* deviceTypeIdResizeableIpad = @"com.apple.CoreSimulator.SimDeviceType.Resizable-iPad";
// The path within the developer dir of the private Simulator frameworks.
NSString* const kSimulatorFrameworkRelativePathLegacy = @"Platforms/iPhoneSimulator.platform/Developer/Library/PrivateFrameworks/DVTiPhoneSimulatorRemoteClient.framework";
NSString* const kSimulatorFrameworkRelativePath = @"../SharedFrameworks/DVTiPhoneSimulatorRemoteClient.framework";
NSString* const kDVTFoundationRelativePath = @"../SharedFrameworks/DVTFoundation.framework";
NSString* const kDevToolsFoundationRelativePath = @"../OtherFrameworks/DevToolsFoundation.framework";
//NSString* const kSimulatorRelativePath = @"Platforms/iPhoneSimulator.platform/Developer/Applications/iPhone Simulator.app";
NSString* const kCoreSimulatorRelativePath = @"Library/PrivateFrameworks/CoreSimulator.framework";
static pid_t gDebuggerProcessId = 0;
static const char *gDevDir = 0;
@interface DVTPlatform : NSObject
+ (BOOL)loadAllPlatformsReturningError:(NSError **)error;
+ (id)platformForIdentifier:(NSString *)identifier;
@end
/**
* A simple iPhoneSimulatorRemoteClient framework.
*/
@implementation iPhoneSimulator
- (id)init {
self = [super init];
deviceTypeId = 0;
m_stderrPath = 0;
m_stdoutPath = 0;
dataPath = 0;
xcodeVersionInt = 0;
mySession = nil;
return self;
}
- (void)dealloc {
[mySession release];
[super dealloc];
}
- (void)doExit:(int)errorCode {
if (stderrFileHandle != nil) {
[self removeStdioFIFO:stderrFileHandle atPath:m_stderrPath];
}
if (stdoutFileHandle != nil) {
[self removeStdioFIFO:stdoutFileHandle atPath:m_stdoutPath];
}
nsprintf(@"<exit code=\"%d\"/>", errorCode);
nsprintf(@"</query_result>");
fflush(stdout);
fflush(stderr);
exit(errorCode);
}
// Helper to find a class by name and die if it isn't found.
-(Class) FindClassByName:(NSString*) nameOfClass {
Class theClass = NSClassFromString(nameOfClass);
if (!theClass) {
nsfprintf(stderr,@"Failed to find class %@ at runtime.", nameOfClass);
[self doExit:EXIT_FAILURE];
}
return theClass;
}
// Loads the Simulator framework from the given developer dir.
-(void) LoadSimulatorFramework:(NSString*) developerDir {
// The Simulator framework depends on some of the other Xcode private
// frameworks; manually load them first so everything can be linked up.
NSString* dvtFoundationPath = [developerDir stringByAppendingPathComponent:kDVTFoundationRelativePath];
NSBundle* dvtFoundationBundle =
[NSBundle bundleWithPath:dvtFoundationPath];
if (![dvtFoundationBundle load]){
nsprintf(@"Unable to dvtFoundationBundle. Error: ");
[self doExit:EXIT_FAILURE];
return ;
}
NSString* devToolsFoundationPath = [developerDir stringByAppendingPathComponent:kDevToolsFoundationRelativePath];
NSBundle* devToolsFoundationBundle =
[NSBundle bundleWithPath:devToolsFoundationPath];
if (![devToolsFoundationBundle load]){
nsprintf(@"Unable to devToolsFoundationPath.");
return ;
}
NSString* coreSimulatorPath = [developerDir stringByAppendingPathComponent:kCoreSimulatorRelativePath];
if ([[NSFileManager defaultManager] fileExistsAtPath:coreSimulatorPath]) {
NSBundle* coreSimulatorBundle = [NSBundle bundleWithPath:coreSimulatorPath];
if (![coreSimulatorBundle load]){
nsprintf(@"Unable to coreSimulatorPath.");
return ;
}
}
NSString* simBundlePath = [developerDir stringByAppendingPathComponent:kSimulatorFrameworkRelativePathLegacy];
if (![[NSFileManager defaultManager] fileExistsAtPath:simBundlePath]){
simBundlePath = [developerDir stringByAppendingPathComponent:kSimulatorFrameworkRelativePath];
}
NSBundle* simBundle = [NSBundle bundleWithPath:simBundlePath];
if (![simBundle load]){
nsprintf(@"Unable to load simulator framework.");
return ;
}
NSError* error = 0;
// Prime DVTPlatform.
Class DVTPlatformClass = [self FindClassByName:@"DVTPlatform"];
if (![DVTPlatformClass loadAllPlatformsReturningError:&error]) {
nsprintf(@"Unable to loadAllPlatformsReturningError. Error: %@",[error localizedDescription]);
return ;
}
Class systemRootClass = [self FindClassByName:@"DTiPhoneSimulatorSystemRoot"];
// The following will fail if DVTPlatform hasn't loaded all platforms.
NSAssert(systemRootClass && [systemRootClass knownRoots] != nil,
@"DVTPlatform hasn't been initialized yet.");
// DTiPhoneSimulatorRemoteClient will make this same call, so let's assert
// that it's working.
NSAssert([DVTPlatformClass platformForIdentifier:@"com.apple.platform.iphonesimulator"] != nil,
@"DVTPlatform hasn't been initialized yet.");
return ;
}
NSString* GetXcodeVersion() {
// Go look for it via xcodebuild.
NSTask* xcodeBuildTask = [[[NSTask alloc] init] autorelease];
[xcodeBuildTask setLaunchPath:@"/usr/bin/xcodebuild"];
[xcodeBuildTask setArguments:[NSArray arrayWithObject:@"-version"]];
NSPipe* outputPipe = [NSPipe pipe];
[xcodeBuildTask setStandardOutput:outputPipe];
NSFileHandle* outputFile = [outputPipe fileHandleForReading];
[xcodeBuildTask launch];
NSData* outputData = [outputFile readDataToEndOfFile];
[xcodeBuildTask terminate];
NSString* output =
[[[NSString alloc] initWithData:outputData
encoding:NSUTF8StringEncoding] autorelease];
output = [output stringByTrimmingCharactersInSet:
[NSCharacterSet whitespaceAndNewlineCharacterSet]];
if ([output length] == 0) {
output = nil;
} else {
NSArray* parts = [output componentsSeparatedByCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]];
if ([parts count] >= 2) {
return parts[1];
}
}
return output;
}
// Finds the developer dir via xcode-select or the DEVELOPER_DIR environment
// variable.
NSString* FindDeveloperDir() {
if (gDevDir)
return [NSString stringWithCString:gDevDir encoding:NSUTF8StringEncoding];
// Check the env first.
NSDictionary* env = [[NSProcessInfo processInfo] environment];
NSString* developerDir = [env objectForKey:@"DEVELOPER_DIR"];
if ([developerDir length] > 0) {
return developerDir;
}
// Go look for it via xcode-select.
NSTask* xcodeSelectTask = [[[NSTask alloc] init] autorelease];
[xcodeSelectTask setLaunchPath:@"/usr/bin/xcode-select"];
[xcodeSelectTask setArguments:[NSArray arrayWithObject:@"-print-path"]];
NSPipe* outputPipe = [NSPipe pipe];
[xcodeSelectTask setStandardOutput:outputPipe];
NSFileHandle* outputFile = [outputPipe fileHandleForReading];
[xcodeSelectTask launch];
NSData* outputData = [outputFile readDataToEndOfFile];
[xcodeSelectTask terminate];
NSString* output =
[[[NSString alloc] initWithData:outputData
encoding:NSUTF8StringEncoding] autorelease];
output = [output stringByTrimmingCharactersInSet:
[NSCharacterSet whitespaceAndNewlineCharacterSet]];
if ([output length] == 0) {
output = nil;
}
return output;
}
- (void) printUsage {
fprintf(stdout, "<msg>Usage: ios-sim &lt;command&gt; &lt;options&gt; [--args ...]\n");
fprintf(stdout, "\n");
fprintf(stdout, "Commands:\n");
fprintf(stdout, " showsdks List the available iOS SDK versions\n");
fprintf(stdout, " showdevicetypes List the available device types (Xcode6+)\n");
fprintf(stdout, " launch &lt;application path&gt; Launch the application at the specified path on the iOS Simulator\n");
fprintf(stdout, " start Launch iOS Simulator without an app\n");
fprintf(stdout, "\n");
fprintf(stdout, "Options:\n");
fprintf(stdout, " --version Print the version of ios-sim\n");
fprintf(stdout, " --developer-path &lt;developerDir&gt; path to the developer directory (in Xcode)");
fprintf(stdout, " --help Show this help text\n");
fprintf(stdout, " --verbose Set the output level to verbose\n");
fprintf(stdout, " --exit Exit after startup\n");
fprintf(stdout, " --wait-for-debugger Wait for debugger to attach\n");
fprintf(stdout, " --debug Attach LLDB to the application on startup\n");
fprintf(stdout, " --use-gdb Use GDB instead of LLDB. (Requires --debug)\n");
fprintf(stdout, " --uuid &lt;uuid&gt; A UUID identifying the session (is that correct?)\n");
fprintf(stdout, " --env &lt;environment file path&gt; A plist file containing environment key-value pairs that should be set\n");
fprintf(stdout, " --setenv NAME=VALUE Set an environment variable\n");
fprintf(stdout, " --stdout &lt;stdout file path&gt; The path where stdout of the simulator will be redirected to (defaults to stdout of ios-sim)\n");
fprintf(stdout, " --stderr &lt;stderr file path&gt; The path where stderr of the simulator will be redirected to (defaults to stderr of ios-sim)\n");
fprintf(stdout, " --timeout &lt;seconds&gt; The timeout time to wait for a response from the Simulator. Default value: 30 seconds\n");
fprintf(stdout, " --args &lt;...&gt; All following arguments will be passed on to the application</msg>\n");
fprintf(stdout, " --devicetypeid <device type> The id of the device type that should be simulated (Xcode6+). Use 'showdevicetypes' to list devices.\n");
fprintf(stdout, " e.g \"com.apple.CoreSimulator.SimDeviceType.Resizable-iPhone6, 8.0\"\n");
fprintf(stdout, "DEPRECATED in 3.x, use devicetypeid instead:\n");
fprintf(stdout, " --sdk <sdkversion> The iOS SDK version to run the application on (defaults to the latest)\n");
fprintf(stdout, " --family <device family> The device type that should be simulated (defaults to `iphone')\n");
fprintf(stdout, " --retina Start a retina device\n");
fprintf(stdout, " --tall In combination with --retina flag, start the tall version of the retina device (e.g. iPhone 5 (4-inch))\n");
fprintf(stdout, " --64bit In combination with --retina flag and the --tall flag, start the 64bit version of the tall retina device (e.g. iPhone 5S (4-inch 64bit))\n");
fflush(stdout);
}
- (void) printDeprecation:(char*)option {
(void)option;
//fprintf(stdout, "Usage of '%s' is deprecated in 3.x. Use --devicetypeid instead.\n", option);
}
- (int) showSDKs {
Class systemRootClass = [self FindClassByName:@"DTiPhoneSimulatorSystemRoot"];
NSArray *roots = [systemRootClass knownRoots];
nsprintf(@"<device_info>");
for (NSUInteger i = 0; i < [roots count]; ++i) {
DTiPhoneSimulatorSystemRoot *root = [roots objectAtIndex:i];
nsprintf(@"<item><key>sdk%d_name</key><value>%@</value></item>", i, [root sdkDisplayName]);
nsprintf(@"<item><key>sdk%d_version</key><value>%@</value></item>", i, [root sdkVersion]);
nsprintf(@"<item><key>sdk%d_sysroot</key><value>%@</value></item>", i, [root sdkRootPath]);
}
nsprintf(@"</device_info>");
return EXIT_SUCCESS;
}
- (int) showDeviceTypes {
Class simDeviceSet = NSClassFromString(@"SimDeviceSet");
nsprintf(@"<device_info>");
bool hasDevices = false;
if (simDeviceSet) {
SimDeviceSet* deviceSet = [simDeviceSet defaultSet];
NSArray* devices = [deviceSet availableDevices];
for (SimDevice* device in devices) {
hasDevices = true;
nsfprintf(stdout, @"<item><key>%@, %@</key><value>%@</value></item>",device.deviceType.identifier, device.runtime.versionString, device.deviceType.name);
}
}
if (!hasDevices) {
// fallback devices for Xcode 5.x
nsprintf(@"<item><key>com.apple.CoreSimulator.SimDeviceType.iPhone-4s</key><value>iPhone 3.5-inch Retina Display</value></item>");
nsprintf(@"<item><key>com.apple.CoreSimulator.SimDeviceType.iPhone-5s</key><value>iPhone 4-inch Retina Display</value></item>");
nsprintf(@"<item><key>com.apple.CoreSimulator.SimDeviceType.iPad-2</key><value>iPad</value></item>");
nsprintf(@"<item><key>com.apple.CoreSimulator.SimDeviceType.iPad-Retina</key><value>iPad Retina Display</value></item>");
}
nsprintf(@"</device_info>");
return EXIT_SUCCESS;
}
- (void)session:(DTiPhoneSimulatorSession *)session didEndWithError:(NSError *)error {
(void)session;
if (verbose) {
msgprintf(@"Session did end with error %@", error);
}
if (error != nil) {
[self doExit:EXIT_FAILURE];
}
[self doExit:EXIT_SUCCESS];
}
static void IgnoreSignal(int /*arg*/) {
}
static void ChildSignal(int /*arg*/) {
int status;
waitpid(gDebuggerProcessId, &status, 0);
exit(EXIT_SUCCESS);
}
- (void)session:(DTiPhoneSimulatorSession *)session didStart:(BOOL)started withError:(NSError *)error {
if (started) {
// bring to front...
[NSTask launchedTaskWithLaunchPath:@"/usr/bin/osascript"
arguments:[NSArray arrayWithObjects:
@"-e", @"tell application \"System Events\"",
@"-e", @" set listOfProcesses to (name of every process where background only is false)",
@"-e", @"end tell",
@"-e", @"repeat with processName in listOfProcesses",
@"-e", @" if processName starts with \"iOS Simulator\" or processName starts with \"iPhone Simulator\" then",
@"-e", @" tell application processName to activate",
@"-e", @" end if",
@"-e", @"end repeat", nil]];
}
if (startOnly && session) {
msgprintf(@"Simulator started (no session)");
[self doExit:EXIT_SUCCESS];
return;
}
if (started) {
int pid = [session simulatedApplicationPID];
if (shouldStartDebugger) {
char*args[4] = { NULL, NULL, (char*)[[[NSNumber numberWithInt:pid] description] UTF8String], NULL };
if (useGDB) {
args[0] = strdup("gdb");
args[1] = strdup("program");
} else {
args[0] = strdup("lldb");
args[1] = strdup("--attach-pid");
}
// The parent process must live on to process the stdout/stderr fifos,
// so start the debugger as a child process.
pid_t child_pid = fork();
if (child_pid == 0) {
execvp(args[0], args);
} else if (child_pid < 0) {
msgprintf(@"Could not start debugger process: %d", errno);
[self doExit:EXIT_FAILURE];
return;
}
gDebuggerProcessId = child_pid;
signal(SIGINT, IgnoreSignal);
signal(SIGCHLD, ChildSignal);
}
if (verbose) {
msgprintf(@"Session started");
}
nsprintf(@"<inferior_pid>%d</inferior_pid>", pid);
fflush(stdout);
if (exitOnStartup) {
[self doExit:EXIT_SUCCESS];
return;
}
} else {
msgprintf(@"Session could not be started: %@", [error localizedDescription]);
[self doExit:EXIT_FAILURE];
}
}
- (void)stop {
if (mySession)
[mySession requestEndWithTimeout: 0.1];
}
- (void)stdioDataIsAvailable:(NSNotification *)notification {
[[notification object] readInBackgroundAndNotify];
NSData *data = [[notification userInfo] valueForKey:NSFileHandleNotificationDataItem];
NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; /* dangerous if partially encoded data is at the boundary */
if (!alreadyPrintedData) {
if ([str length] == 0) {
return;
} else {
alreadyPrintedData = YES;
}
}
if ([notification object] == stdoutFileHandle) {
printf("<app_output>%s</app_output>\n", [escapeString(str) UTF8String]);
} else {
nsprintf(@"<app_output>%@</app_output>", escapeString(str)); // handle stderr differently?
}
fflush(stdout);
}
- (void)createStdioFIFO:(NSFileHandle **)fileHandle ofType:(NSString *)type atPath:(NSString **)path {
*path = [NSString stringWithFormat:@"%@/ios-sim-%@-pipe-%d", NSTemporaryDirectory(), type, (int)time(NULL)];
if (mkfifo([*path UTF8String], S_IRUSR | S_IWUSR) == -1) {
msgprintf(@"Unable to create %@ named pipe `%@'", type, *path);
[self doExit:EXIT_FAILURE];
} else {
if (verbose) {
msgprintf(@"Creating named pipe at `%@'", *path);
}
int fd = open([*path UTF8String], O_RDONLY | O_NDELAY);
*fileHandle = [[[NSFileHandle alloc] initWithFileDescriptor:fd] retain];
[*fileHandle readInBackgroundAndNotify];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(stdioDataIsAvailable:)
name:NSFileHandleReadCompletionNotification
object:*fileHandle];
}
}
- (void)removeStdioFIFO:(NSFileHandle *)fileHandle atPath:(NSString *)path {
if (verbose) {
msgprintf(@"Removing named pipe at `%@'", path);
}
[fileHandle closeFile];
[fileHandle release];
if (![[NSFileManager defaultManager] removeItemAtPath:path error:NULL]) {
msgprintf(@"Unable to remove named pipe `%@'", path);
}
if (dataPath && ![[NSFileManager defaultManager] removeItemAtPath:[dataPath stringByAppendingPathComponent:path] error:NULL]) {
msgprintf(@"Unable to remove simlink at `%@'", [dataPath stringByAppendingPathComponent:path]);
}
}
- (int)launchApp:(NSString *)path withFamily:(NSString *)family
uuid:(NSString *)uuid
environment:(NSDictionary *)environment
stdoutPath:(NSString *)stdoutPath
stderrPath:(NSString *)stderrPath
timeout:(NSTimeInterval)timeout
args:(NSArray *)args {
DTiPhoneSimulatorApplicationSpecifier *appSpec;
DTiPhoneSimulatorSessionConfig *config;
DTiPhoneSimulatorSession *session;
NSError *error;
NSFileManager *fileManager = [[[NSFileManager alloc] init] autorelease];
if (!startOnly && ![fileManager fileExistsAtPath:path]) {
msgprintf(@"Application path %@ doesn't exist!", path);
return EXIT_FAILURE;
}
/* Create the app specifier */
appSpec = startOnly ? nil : [[self FindClassByName:@"DTiPhoneSimulatorApplicationSpecifier"] specifierWithApplicationPath:path];
if (verbose) {
msgprintf(@"App Spec: %@\n", appSpec);
msgprintf(@"SDK Root: %@\n", sdkRoot);
msgprintf(@"SDK Version: %@\n", [sdkRoot sdkVersion]);
for (id key in environment) {
msgprintf(@"Env: %@ = %@", key, [environment objectForKey:key]);
}
}
NSString *sdkVersion = [sdkRoot sdkVersion];
NSString *appSupportDir = [NSString stringWithFormat:@"%@/Library/Application Support/iPhone Simulator/%@",
NSHomeDirectory(), sdkVersion];
NSMutableDictionary *mutableEnv = [NSMutableDictionary dictionaryWithDictionary:environment];
[mutableEnv setObject:appSupportDir forKey:@"CFFIXED_USER_HOME"];
[mutableEnv setObject:appSupportDir forKey:@"IPHONE_SHARED_RESOURCES_DIRECTORY"];
[mutableEnv setObject:appSupportDir forKey:@"HOME"];
[mutableEnv setObject:[sdkRoot sdkRootPath] forKey:@"IPHONE_SIMULATOR_ROOT"];
[mutableEnv setObject:[sdkRoot sdkRootPath] forKey:@"DYLD_ROOT_PATH"];
[mutableEnv setObject:[sdkRoot sdkRootPath] forKey:@"DYLD_FRAMEWORK_PATH"];
[mutableEnv setObject:[sdkRoot sdkRootPath] forKey:@"DYLD_LIBRARY_PATH"];
[mutableEnv setObject:@"YES" forKey:@"NSUnbufferedIO"];
environment = mutableEnv;
/* Set up the session configuration */
config = [[[[self FindClassByName:@"DTiPhoneSimulatorSessionConfig"] alloc] init] autorelease];
[config setApplicationToSimulateOnStart:appSpec];
[config setSimulatedSystemRoot:sdkRoot];
[config setSimulatedApplicationShouldWaitForDebugger:shouldWaitDebugger];
[config setSimulatedApplicationLaunchArgs:args];
[config setSimulatedApplicationLaunchEnvironment:environment];
if (stderrPath) {
stderrFileHandle = nil;
} else if (!exitOnStartup) {
[self createStdioFIFO:&stderrFileHandle ofType:@"stderr" atPath:&stderrPath];
m_stderrPath = stderrPath;
}
[config setSimulatedApplicationStdErrPath:stderrPath];
if (stdoutPath) {
stdoutFileHandle = nil;
} else if (!exitOnStartup) {
[self createStdioFIFO:&stdoutFileHandle ofType:@"stdout" atPath:&stdoutPath];
m_stdoutPath = stdoutPath;
}
[config setSimulatedApplicationStdOutPath:stdoutPath];
[config setLocalizedClientName: @"iossim"];
// this was introduced in 3.2 of SDK
if ([config respondsToSelector:@selector(setSimulatedDeviceFamily:)]) {
if (family == nil) {
family = @"iphone";
}
if (verbose) {
nsprintf(@"using device family %@",family);
}
if ([family isEqualToString:@"ipad"]) {
[config setSimulatedDeviceFamily:[NSNumber numberWithInt:2]];
} else{
[config setSimulatedDeviceFamily:[NSNumber numberWithInt:1]];
}
}
if ([config respondsToSelector:@selector(setDevice:)]) {
// Xcode6+
config.device = [self findDeviceWithFamily:family retina:retinaDevice isTallDevice:tallDevice is64Bit:is64BitDevice];
// The iOS 8 simulator treats stdout/stderr paths relative to the simulator's data directory.
// Create symbolic links in the data directory that points at the real stdout/stderr paths.
if ([config.simulatedSystemRoot.sdkVersion compare:@"8.0" options:NSNumericSearch] != NSOrderedAscending) {
dataPath = config.device.dataPath;
NSString *simlinkStdout = [dataPath stringByAppendingPathComponent:stdoutPath];
m_stdoutPath = stdoutPath;
NSString *simlinkStderr = [dataPath stringByAppendingPathComponent:stderrPath];
m_stderrPath = stderrPath;
[[NSFileManager defaultManager] createSymbolicLinkAtPath:simlinkStdout withDestinationPath:stdoutPath error:NULL];
[[NSFileManager defaultManager] createSymbolicLinkAtPath:simlinkStderr withDestinationPath:stderrPath error:NULL];
}
} else {
// Xcode5 or older
NSString* devicePropertyValue = [self changeDeviceType:family retina:retinaDevice isTallDevice:tallDevice is64Bit:is64BitDevice];
[config setSimulatedDeviceInfoName:devicePropertyValue];
}
/* Start the session */
session = [[[[self FindClassByName:@"DTiPhoneSimulatorSession"] alloc] init] autorelease];
mySession = session;
[session setDelegate:self];
if (uuid != nil){
[session setUuid:uuid];
}
if (![session requestStartWithConfig:config timeout:timeout error:&error]) {
msgprintf(@"Could not start simulator session: %@", error);
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
- (SimDevice*) findDeviceWithFamily:(NSString *)family retina:(BOOL)retina isTallDevice:(BOOL)isTallDevice is64Bit:(BOOL)is64Bit {
NSString* devTypeId = self->deviceTypeId;
if (!devTypeId) {
devTypeId = deviceTypeIdIphone5;
if (retina) {
if ([family isEqualToString:@"ipad"]) {
if (is64Bit) {
devTypeId = deviceTypeIdIpadAir;
} else {
devTypeId = deviceTypeIdIpadRetina;
}
} else {
if (isTallDevice) {
if (is64Bit) {
devTypeId = deviceTypeIdIphone5s;
} else {
devTypeId = deviceTypeIdIphone5;
}
} else {
devTypeId = deviceTypeIdIphone4s;
}
}
} else {
if ([family isEqualToString:@"ipad"]) {
devTypeId = deviceTypeIdIpad2;
} else {
devTypeId = deviceTypeIdIphone4s;
}
}
}
SimDeviceSet* deviceSet = [[self FindClassByName:@"SimDeviceSet"] defaultSet];
NSArray* devices = [deviceSet availableDevices];
NSArray* deviceTypeAndVersion = [devTypeId componentsSeparatedByString:@","];
if(deviceTypeAndVersion.count == 2) {
NSString* typeIdentifier = [[deviceTypeAndVersion objectAtIndex:0] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
NSString* versionString = [[deviceTypeAndVersion objectAtIndex:1] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];;
for (SimDevice* device in devices) {
if ([device.deviceType.identifier isEqualToString:typeIdentifier] && [device.runtime.versionString isEqualToString:versionString]) {
return device;
}
}
}
//maintain old behavior (if the device identifier doesn't have a version as part of the identifier, loop through to find the first matching)
else
{
for (SimDevice* device in devices) {
if ([device.deviceType.identifier isEqualToString:devTypeId]) {
return device;
}
}
}
// Default to whatever is the first device
return [devices count] > 0 ? [devices objectAtIndex:0] : nil;
}
- (NSString*) changeDeviceType:(NSString *)family retina:(BOOL)retina isTallDevice:(BOOL)isTallDevice is64Bit:(BOOL)is64Bit {
NSString *devicePropertyValue;
if (self->deviceTypeId) {
if ([deviceTypeIdIphone4s isEqual: deviceTypeId])
devicePropertyValue = deviceIphoneRetina3_5Inch;
else if ([deviceTypeIdIphone5s isEqual: deviceTypeId])
devicePropertyValue = deviceIphoneRetina4_0Inch;
else if ([deviceTypeIdIpad2 isEqual: deviceTypeId])
devicePropertyValue = deviceIpad;
else if ([deviceTypeIdIpadRetina isEqual: deviceTypeId])
devicePropertyValue = deviceIpadRetina;
else {
nsprintf(@"<msg>Unknown or unsupported device type: %@</msg>\n", deviceTypeId);
[self doExit:EXIT_FAILURE];
return nil;
}
} else if (retina) {
if (verbose) {
msgprintf(@"using retina");
}
if ([family isEqualToString:@"ipad"]) {
if (is64Bit) {
devicePropertyValue = deviceIpadRetina_64bit;
} else {
devicePropertyValue = deviceIpadRetina;
}
}
else {
if (isTallDevice) {
if (is64Bit) {
devicePropertyValue = deviceIphoneRetina4_0Inch_64bit;
} else {
devicePropertyValue = deviceIphoneRetina4_0Inch;
}
} else {
devicePropertyValue = deviceIphoneRetina3_5Inch;
}
}
} else {
if ([family isEqualToString:@"ipad"]) {
devicePropertyValue = deviceIpad;
} else {
devicePropertyValue = deviceIphone;
}
}
CFPreferencesSetAppValue((CFStringRef)deviceProperty, (CFPropertyListRef)devicePropertyValue, (CFStringRef)simulatorPrefrencesName);
CFPreferencesAppSynchronize((CFStringRef)simulatorPrefrencesName);
return devicePropertyValue;
}
/**
* Execute 'main'
*/
- (void)runWithArgc:(int)argc argv:(char **)argv {
if (argc < 2) {
[self printUsage];
exit(EXIT_FAILURE);
}
NSString* xcodeVersion = GetXcodeVersion();
if (!([xcodeVersion compare:@"6.0" options:NSNumericSearch] != NSOrderedAscending) && false) {
nsprintf(@"You need to have at least Xcode 6.0 installed -- you have version %@.", xcodeVersion);
nsprintf(@"Run 'xcode-select --print-path' to check which version of Xcode is enabled.");
exit(EXIT_FAILURE);
}
retinaDevice = NO;
tallDevice = NO;
is64BitDevice = NO;
exitOnStartup = NO;
alreadyPrintedData = NO;
startOnly = strcmp(argv[1], "start") == 0;
deviceTypeId = nil;
nsprintf(@"<query_result>");
for (int i = 0; i < argc; ++i) {
if (strcmp(argv[i], "--developer-path") == 0) {
++i;
if (i < argc)
gDevDir = argv[i];
}
}
NSString* developerDir = FindDeveloperDir();
if (!developerDir) {
nsprintf(@"<msg>Unable to find developer directory.</msg>");
[self doExit:EXIT_FAILURE];
}
NSString *xcodePlistPath = [developerDir stringByAppendingPathComponent:@"../Info.plist"];
NSAssert([[NSFileManager defaultManager] fileExistsAtPath:xcodePlistPath isDirectory:NULL],
@"Cannot find Xcode's plist at: %@", xcodePlistPath);
NSDictionary *infoDict = [NSDictionary dictionaryWithContentsOfFile:xcodePlistPath];
NSAssert(infoDict[@"DTXcode"], @"Cannot find the 'DTXcode' key in Xcode's Info.plist.");
NSString *DTXcode = infoDict[@"DTXcode"];
xcodeVersionInt = [DTXcode intValue];
NSString* dvtFoundationPath = [developerDir stringByAppendingPathComponent:kDVTFoundationRelativePath];
if (![[NSFileManager defaultManager] fileExistsAtPath:dvtFoundationPath]) {
// execute old version
char *argNew = new char[strlen(argv[0] + 7)];
strcpy(argNew, argv[0]);
strcat(argNew, "_1_8_2");
char **argvNew = new char *[argc + 1];
argvNew[0] = argNew;
for (int iarg = 1; iarg < argc; ++iarg)
argvNew[iarg] = argv[iarg];
argvNew[argc] = 0;
execv(argNew, argvNew);
}
if (strcmp(argv[1], "showsdks") == 0) {
[self LoadSimulatorFramework:developerDir];
[self doExit:[self showSDKs]];
} else if (strcmp(argv[1], "showdevicetypes") == 0) {
[self LoadSimulatorFramework:developerDir];
[self doExit:[self showDeviceTypes]];
} else if (strcmp(argv[1], "launch") == 0 || startOnly) {
if (strcmp(argv[1], "launch") == 0 && argc < 3) {
msgprintf(@"Missing application path argument");
[self printUsage];
[self doExit:EXIT_FAILURE];
}
NSString *appPath = nil;
int argOffset;
if (startOnly) {
argOffset = 2;
}
else {
argOffset = 3;
appPath = [[NSString stringWithUTF8String:argv[2]] expandPath];
}
NSString *family = nil;
NSString *uuid = nil;
NSString *stdoutPath = nil;
NSString *stderrPath = nil;
NSString *xctest = nil;
NSTimeInterval timeout = 60;
NSMutableDictionary *environment = [NSMutableDictionary dictionary];
int i = argOffset;
for (; i < argc; i++) {
if (strcmp(argv[i], "--version") == 0) {
printf("%s\n", IOS_SIM_VERSION);
exit(EXIT_SUCCESS);
} else if (strcmp(argv[i], "--help") == 0) {
[self printUsage];
exit(EXIT_SUCCESS);
} else if (strcmp(argv[i], "--verbose") == 0) {
verbose = YES;
} else if (strcmp(argv[i], "--exit") == 0) {
exitOnStartup = YES;
} else if (strcmp(argv[i], "--wait-for-debugger") == 0) {
shouldWaitDebugger = YES;
} else if (strcmp(argv[i], "--debug") == 0) {
shouldWaitDebugger = YES;
shouldStartDebugger = YES;
} else if (strcmp(argv[i], "--use-gdb") == 0) {
useGDB = YES;
} else if (strcmp(argv[i], "--developer-path") == 0) {
++i;
if (i == argc) {
nsprintf(@"<msg>missing arg after --developer-path</msg>");
[self doExit:EXIT_FAILURE];
return;
}
} else if (strcmp(argv[i], "--timeout") == 0) {
if (i + 1 < argc) {
timeout = [[NSString stringWithUTF8String:argv[++i]] doubleValue];
NSLog(@"Timeout: %f second(s)", timeout);
}
}
else if (strcmp(argv[i], "--sdk") == 0) {
[self printDeprecation:argv[i]];
i++;
if (i == argc) {
nsprintf(@"<msg>missing arg after --sdk</msg>");
[self doExit:EXIT_FAILURE];
return;
}
[self LoadSimulatorFramework:developerDir];
NSString* ver = [NSString stringWithCString:argv[i] encoding:NSUTF8StringEncoding];
Class systemRootClass = [self FindClassByName:@"DTiPhoneSimulatorSystemRoot"];
NSArray *roots = [systemRootClass knownRoots];
for (DTiPhoneSimulatorSystemRoot *root in roots) {
NSString *v = [root sdkVersion];
if ([v isEqualToString:ver]) {
sdkRoot = root;
break;
}
}
if (sdkRoot == nil) {
msgprintf(@"Unknown or unsupported SDK version: %s\n",argv[i]);
[self showSDKs];
exit(EXIT_FAILURE);
}
} else if (strcmp(argv[i], "--family") == 0) {
[self printDeprecation:argv[i]];
i++;
if (i == argc) {
nsprintf(@"<msg>missing arg after --sdkfamilymsg>");
[self doExit:EXIT_FAILURE];
return;
}
family = [NSString stringWithUTF8String:argv[i]];
} else if (strcmp(argv[i], "--uuid") == 0) {
i++;
if (i == argc) {
nsprintf(@"<msg>missing arg after --uuid</msg>");
[self doExit:EXIT_FAILURE];
return;
}
uuid = [NSString stringWithUTF8String:argv[i]];
} else if (strcmp(argv[i], "--devicetypeid") == 0) {
i++;
if (i == argc) {
nsprintf(@"<msg>missing arg after --devicetypeid</msg>");
[self doExit:EXIT_FAILURE];
return;
}
deviceTypeId = [NSString stringWithUTF8String:argv[i]];
} else if (strcmp(argv[i], "--setenv") == 0) {
i++;
if (i == argc) {
nsprintf(@"<msg>missing arg after --setenv</msg>");
[self doExit:EXIT_FAILURE];
return;
}
NSArray *parts = [[NSString stringWithUTF8String:argv[i]] componentsSeparatedByString:@"="];
[environment setObject:[parts objectAtIndex:1] forKey:[parts objectAtIndex:0]];
} else if (strcmp(argv[i], "--env") == 0) {
i++;
if (i == argc) {
nsprintf(@"<msg>missing arg after --env</msg>");
[self doExit:EXIT_FAILURE];
return;
}
NSString *envFilePath = [[NSString stringWithUTF8String:argv[i]] expandPath];
[environment setValuesForKeysWithDictionary:[NSDictionary dictionaryWithContentsOfFile:envFilePath]];
if (!environment) {
msgprintf(@"Could not read environment from file: %s", argv[i]);
[self printUsage];
exit(EXIT_FAILURE);
}
} else if (strcmp(argv[i], "--stdout") == 0) {
i++;
if (i == argc) {
nsprintf(@"<msg>missing arg after --stdout</msg>");
[self doExit:EXIT_FAILURE];
return;
}
stdoutPath = [[NSString stringWithUTF8String:argv[i]] expandPath];
NSLog(@"stdoutPath: %@", stdoutPath);
} else if (strcmp(argv[i], "--stderr") == 0) {
i++;
if (i == argc) {
nsprintf(@"<msg>missing arg after --stderr</msg>");
[self doExit:EXIT_FAILURE];
return;
}
stderrPath = [[NSString stringWithUTF8String:argv[i]] expandPath];
NSLog(@"stderrPath: %@", stderrPath);
} else if (strcmp(argv[i], "--xctest") == 0) {
i++;
if (i == argc) {
nsprintf(@"<msg>missing arg after --xctest</msg>");
[self doExit:EXIT_FAILURE];
return;
}
xctest = [[NSString stringWithUTF8String:argv[i]] expandPath];
NSLog(@"xctest: %@", xctest);
} else if (strcmp(argv[i], "--retina") == 0) {
[self printDeprecation:argv[i]];
retinaDevice = YES;
} else if (strcmp(argv[i], "--tall") == 0) {
[self printDeprecation:argv[i]];
tallDevice = YES;
} else if (strcmp(argv[i], "--64bit") == 0) {
[self printDeprecation:argv[i]];
is64BitDevice = YES;
} else if (strcmp(argv[i], "--args") == 0) {
i++;
break;
} else {
msgprintf(@"unrecognized argument:%s", argv[i]);
[self printUsage];
[self doExit:EXIT_FAILURE];
return;
}
}
NSMutableArray *args = [NSMutableArray arrayWithCapacity:MAX(argc - i,0)];
for (; i < argc; i++) {
[args addObject:[NSString stringWithUTF8String:argv[i]]];
}
if (sdkRoot == nil) {
[self LoadSimulatorFramework:developerDir];
Class systemRootClass = [self FindClassByName:@"DTiPhoneSimulatorSystemRoot"];
sdkRoot = [systemRootClass defaultRoot];
}
if (xctest) {
NSString *appName = [appPath lastPathComponent];
NSString *executableName = [appName stringByDeletingPathExtension];
NSString *injectionPath = @"/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Library/PrivateFrameworks/IDEBundleInjection.framework/IDEBundleInjection";
[environment setValuesForKeysWithDictionary:[NSDictionary dictionaryWithObjectsAndKeys:
injectionPath,@"DYLD_INSERT_LIBRARIES",
xctest, @"XCInjectBundle",
[appPath stringByAppendingFormat:@"/%@", executableName],@"XCInjectBundleInto",
nil]];
}
/* Don't exit, adds to runloop */
int res = [self launchApp:appPath
withFamily:family
uuid:uuid
environment:environment
stdoutPath:stdoutPath
stderrPath:stderrPath
timeout:timeout
args:args];
nsprintf(@"<app_started status=\"%@\" />", ((res == 0) ? @"SUCCESS" : @"FAILURE"));
fflush(stdout);
fflush(stderr);
if (res != 0)
[self doExit:EXIT_FAILURE];
} else {
if (argc == 2 && strcmp(argv[1], "--help") == 0) {
[self printUsage];
[self doExit:EXIT_SUCCESS];
} else if (argc == 2 && strcmp(argv[1], "--version") == 0) {
printf("%s\n", IOS_SIM_VERSION);
[self doExit:EXIT_SUCCESS];
} else {
fprintf(stderr, "Unknown command\n");
[self printUsage];
[self doExit:EXIT_FAILURE];
}
}
}
@end

View File

@@ -1,29 +0,0 @@
/* Author: Landon Fuller <landonf@plausiblelabs.com>
* Copyright (c) 2008-2011 Plausible Labs Cooperative, Inc.
* All rights reserved.
*
* See the IOSSIM_LICENSE file in this directory for the license on the source code in this file.
*/
/* derived from https://github.com/phonegap/ios-sim */
#import <AppKit/AppKit.h>
#import <Foundation/NSFileManager.h>
#import "iphonesimulator.h"
/*
* Runs the iPhoneSimulator backed by a main runloop.
*/
int main (int argc, char *argv[]) {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
iPhoneSimulator *sim = [[iPhoneSimulator alloc] init];
/* Execute command line handler */
[sim runWithArgc: argc argv: argv];
/* Run the loop to handle added input sources, if any */
[[NSRunLoop mainRunLoop] run];
[pool release];
return 0;
}

View File

@@ -1,9 +0,0 @@
/*
* See the IOSSIM_LICENSE file in this directory for the license on the source code in this file.
*/
int nsvfprintf (FILE *stream, NSString *format, va_list args);
int nsfprintf (FILE *stream, NSString *format, ...);
int nsprintf (NSString *format, ...);
int msgvfprintf (FILE *stream, NSString *format, va_list args);
int msgprintf (NSString *format, ...);
NSString *escapeString(NSString *origString);

View File

@@ -1,75 +0,0 @@
/*
* NSLog() clone, but writes to arbitrary output stream
*
* See the IOSSIM_LICENSE file in this directory for the license on the source code in this file.
*/
#import <Foundation/Foundation.h>
#import <stdio.h>
int nsvfprintf (FILE *stream, NSString *format, va_list args) {
int retval;
NSString *str = (NSString *) CFStringCreateWithFormatAndArguments(NULL, NULL, (CFStringRef) format, args);
retval = fprintf(stream, "%s\n", [str UTF8String]);
[str release];
return retval;
}
int nsfprintf (FILE *stream, NSString *format, ...) {
va_list ap;
int retval;
va_start(ap, format);
{
retval = nsvfprintf(stream, format, ap);
}
va_end(ap);
return retval;
}
int nsprintf (NSString *format, ...) {
va_list ap;
int retval;
va_start(ap, format);
{
retval = nsvfprintf(stdout, format, ap);
}
va_end(ap);
return retval;
}
NSString *escapeString(NSString *origString)
{
return [[[[origString stringByReplacingOccurrencesOfString: @"&" withString: @"&amp;"]
stringByReplacingOccurrencesOfString: @"\"" withString: @"&quot;"]
stringByReplacingOccurrencesOfString: @">" withString: @"&gt;"]
stringByReplacingOccurrencesOfString: @"<" withString: @"&lt;"];
}
int msgvfprintf (FILE *stream, NSString *format, va_list args) {
int retval;
NSString *str = (NSString *) CFStringCreateWithFormatAndArguments(NULL, NULL, (CFStringRef) format, args);
retval = fprintf(stream, "<msg>%s</msg>\n", [escapeString(str) UTF8String]);
[str release];
return retval;
}
int msgprintf(NSString *format, ...) {
va_list ap;
int retval;
va_start(ap, format);
{
retval = msgvfprintf(stdout, format, ap);
}
va_end(ap);
return retval;
}

View File

@@ -1,11 +0,0 @@
/*
* See the IOSSIM_LICENSE file in this directory for the license on the source code in this file.
*/
#import <Foundation/Foundation.h>
@interface NSString (ExpandPath)
- (NSString *)expandPath;
@end

View File

@@ -1,18 +0,0 @@
/*
* See the LICENSE file for the license on the source code in this file.
*/
#import "nsstringexpandpath.h"
@implementation NSString (ExpandPath)
- (NSString *)expandPath {
if ([self isAbsolutePath]) {
return [self stringByStandardizingPath];
} else {
NSString *cwd = [[NSFileManager defaultManager] currentDirectoryPath];
return [[cwd stringByAppendingPathComponent:self] stringByStandardizingPath];
}
}
@end

View File

@@ -1 +0,0 @@
#define IOS_SIM_VERSION "2.0.1"

View File

@@ -1,31 +0,0 @@
Author: Landon Fuller <landonf@plausiblelabs.com>
Copyright (c) 2008-2011 Plausible Labs Cooperative, Inc.
All rights reserved.
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the "Software"), to deal in the Software without
restriction, including without limitation the rights to use,
copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following
conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
Modifications made by the following entities are licensed as above:
- Jeff Haynie, Appcelerator, Inc.
- https://github.com/hborders
- http://pivotallabs.com/users/scoward/blog
- Eloy Duran, Fingertips <eloy@fngtps.com>
- Fawzi Mohamed, digia <fawzi.mohamed@digia.com>

View File

@@ -1,16 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleExecutable</key>
<string>iossim_1_8_2</string>
<key>CFBundleIdentifier</key>
<string>org.qt-project.qt-creator.iossim_1_8_2</string>
<key>LSUIElement</key>
<string>1</string>
</dict>
</plist>

View File

@@ -1,30 +0,0 @@
import qbs 1.0
import QtcTool
QtcTool {
name: "iossim"
condition: qbs.targetOS.contains("macos")
Depends { name: "Qt"; submodules: ["widgets"] }
Depends { name: "app_version_header" }
files: [
"main.mm",
"nsprintf.mm",
"nsstringexpandpath.mm",
"iphonesimulator.mm",
"iphonesimulator.h",
"nsprintf.h",
"nsstringexpandpath.h",
"version.h",
"iphonesimulatorremoteclient/iphonesimulatorremoteclient.h"
]
cpp.linkerFlags: base.concat(["-fobjc-link-runtime"])
cpp.frameworks: base.concat(["Foundation", "CoreServices", "ApplicationServices", "IOKit",
"AppKit"])
cpp.frameworkPaths: base.concat("/System/Library/PrivateFrameworks")
cpp.infoPlistFile: "Info.plist"
toolInstallDir: project.ide_libexec_path + "/ios"
}

View File

@@ -1,58 +0,0 @@
CONFIG += console
QT += core
QT += gui
CONFIG -= app_bundle
include(../../../../qtcreator.pri)
# Prevent from popping up in the dock when launched.
# We embed the Info.plist file, so the application doesn't need to
# be a bundle.
QMAKE_LFLAGS += -Wl,-sectcreate,__TEXT,__info_plist,\"$$PWD/Info.plist\" \
-fobjc-link-runtime
LIBS += \
-framework Foundation \
-framework CoreServices \
-framework ApplicationServices \
-framework CoreFoundation \
-F/System/Library/PrivateFrameworks \
-framework IOKit -framework AppKit
iPhoneSimulatorRemoteClientDirectLinking {
LIBS += \
-F/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Library/PrivateFrameworks \
-F/Applications/Xcode.app/Contents/OtherFrameworks
LIBS += \
-framework iPhoneSimulatorRemoteClient
QMAKE_RPATHDIR += /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Library/PrivateFrameworks \
/Applications/Xcode.app/Contents/OtherFrameworks
/System/Library/PrivateFrameworks \
}
TEMPLATE = app
# put into a subdir, so we can deploy a separate qt.conf for it
DESTDIR = $$IDE_LIBEXEC_PATH/ios
include(../../../rpath.pri)
OBJECTIVE_SOURCES += \
main.mm \
nsprintf.mm \
nsstringexpandpath.mm \
iphonesimulator.mm
HEADERS += \
iphonesimulator.h \
nsprintf.h \
nsstringexpandpath.h \
version.h \
iphonesimulatorremoteclient/iphonesimulatorremoteclient.h
DISTFILES = IOSSIM_LICENSE \
Info.plist
target.path = $$INSTALL_LIBEXEC_PATH/ios
INSTALLS += target

View File

@@ -1,41 +0,0 @@
/* Author: Landon Fuller <landonf@plausiblelabs.com>
* Copyright (c) 2008-2011 Plausible Labs Cooperative, Inc.
* All rights reserved.
*
* See the IOSSIM_LICENSE file in this directory for the license on the source code in this file.
*/
#import <Foundation/Foundation.h>
#import "iphonesimulatorremoteclient/iphonesimulatorremoteclient.h"
#import "version.h"
@interface iPhoneSimulator : NSObject <DTiPhoneSimulatorSessionDelegate> {
@private
DTiPhoneSimulatorSystemRoot *sdkRoot;
NSFileHandle *stdoutFileHandle;
NSFileHandle *stderrFileHandle;
DTiPhoneSimulatorSession *session;
NSTimer *pidCheckingTimer;
BOOL startOnly;
BOOL exitOnStartup;
BOOL shouldWaitDebugger;
BOOL shouldStartDebugger;
BOOL useGDB;
BOOL verbose;
BOOL alreadyPrintedData;
BOOL retinaDevice;
BOOL tallDevice;
}
- (id)init;
- (void)dealloc;
- (void)runWithArgc:(int)argc argv:(char **)argv;
- (void)createStdioFIFO:(NSFileHandle **)fileHandle ofType:(NSString *)type atPath:(NSString **)path;
- (void)removeStdioFIFO:(NSFileHandle *)fileHandle atPath:(NSString *)path;
- (void)stop;
- (void)checkPid:(NSTimer *)timer;
- (void)doExit:(int)errorCode;
- (void)changeDeviceType:(NSString *)family retina:(BOOL)retina isTallDevice:(BOOL)isTallDevice;
@end

View File

@@ -1,634 +0,0 @@
/* Author: Landon Fuller <landonf@plausiblelabs.com>
* Copyright (c) 2008-2011 Plausible Labs Cooperative, Inc.
* All rights reserved.
*
* See the IOSSIM_LICENSE file in this directory for the license on the source code in this file.
*/
#import "iphonesimulator.h"
#import "nsstringexpandpath.h"
#import "nsprintf.h"
#import <sys/types.h>
#import <sys/stat.h>
#import <objc/runtime.h>
#import <AppKit/NSRunningApplication.h>
NSString *simulatorPrefrencesName = @"com.apple.iphonesimulator";
NSString *deviceProperty = @"SimulateDevice";
NSString *deviceIphoneRetina3_5Inch = @"iPhone Retina (3.5-inch)";
NSString *deviceIphoneRetina4_0Inch = @"iPhone Retina (4-inch)";
NSString *deviceIphone = @"iPhone";
NSString *deviceIpad = @"iPad";
NSString *deviceIpadRetina = @"iPad (Retina)";
/**
* A simple iPhoneSimulatorRemoteClient framework.
*/
@implementation iPhoneSimulator
- (id)init {
self = [super init];
session = nil;
pidCheckingTimer = nil;
return self;
}
- (void)dealloc {
[session release];
[pidCheckingTimer release];
[super dealloc];
}
- (void)doExit:(int)errorCode {
nsprintf(@"<exit code=\"%d\"/>", errorCode);
nsprintf(@"</query_result>");
fflush(stdout);
fflush(stderr);
exit(errorCode);
}
- (void) printUsage {
fprintf(stdout, "<msg>Usage: iossim <command> <options> [--args ...]\n");
fprintf(stdout, "\n");
fprintf(stdout, "Commands:\n");
fprintf(stdout, " showsdks List the available iOS SDK versions\n");
fprintf(stdout, " launch <application path> Launch the application at the specified path on the iOS Simulator\n");
fprintf(stdout, " start Launch iOS Simulator without an app\n");
fprintf(stdout, "\n");
fprintf(stdout, "Options:\n");
fprintf(stdout, " --version Print the version of ios-sim\n");
fprintf(stdout, " --developer-path <developerDir> path to the developer directory (in Xcode)");
fprintf(stdout, " --help Show this help text\n");
fprintf(stdout, " --verbose Set the output level to verbose\n");
fprintf(stdout, " --exit Exit after startup\n");
fprintf(stdout, " --wait-for-debugger Wait for debugger to attach\n");
fprintf(stdout, " --debug Attach LLDB to the application on startup\n");
fprintf(stdout, " --use-gdb Use GDB instead of LLDB. (Requires --debug)\n");
fprintf(stdout, " --sdk <sdkversion> The iOS SDK version to run the application on (defaults to the latest)\n");
fprintf(stdout, " --family <device family> The device type that should be simulated (defaults to `iphone')\n");
fprintf(stdout, " --retina Start a retina device\n");
fprintf(stdout, " --tall In combination with --retina flag, start the tall version of the retina device (e.g. iPhone 5 (4-inch))\n");
fprintf(stdout, " --uuid <uuid> A UUID identifying the session (is that correct?)\n");
fprintf(stdout, " --env <environment file path> A plist file containing environment key-value pairs that should be set\n");
fprintf(stdout, " --setenv NAME=VALUE Set an environment variable\n");
fprintf(stdout, " --stdout <stdout file path> The path where stdout of the simulator will be redirected to (defaults to stdout of ios-sim)\n");
fprintf(stdout, " --stderr <stderr file path> The path where stderr of the simulator will be redirected to (defaults to stderr of ios-sim)\n");
fprintf(stdout, " --timeout <seconds> The timeout time to wait for a response from the Simulator. Default value: 30 seconds\n");
fprintf(stdout, " --args <...> All following arguments will be passed on to the application</msg>\n");
fflush(stdout);
}
- (int) showSDKs {
NSUInteger i;
id tClass = objc_getClass("DTiPhoneSimulatorSystemRoot");
if (tClass == nil) {
nsprintf(@"<msg>DTiPhoneSimulatorSystemRoot class is nil.</msg>");
return EXIT_FAILURE;
}
NSArray *roots = [tClass knownRoots];
nsprintf(@"<device_info>");
for (i = 0; i < [roots count]; ++i) {
DTiPhoneSimulatorSystemRoot *root = [roots objectAtIndex:i];
nsprintf(@"<item><key>sdk%d_name</key><value>%@</value></item>", i, [root sdkDisplayName]);
nsprintf(@"<item><key>sdk%d_version</key><value>%@</value></item>", i, [root sdkVersion]);
nsprintf(@"<item><key>sdk%d_sysroot</key><value>%@</value></item>", i, [root sdkRootPath]);
}
nsprintf(@"</device_info>");
return EXIT_SUCCESS;
}
- (void)session:(DTiPhoneSimulatorSession *)mySession didEndWithError:(NSError *)error {
if (verbose) {
nsprintf(@"<msg>Session did end with error %@</msg>", error);
}
if (stderrFileHandle != nil) {
NSString *stderrPath = [[mySession sessionConfig] simulatedApplicationStdErrPath];
[self removeStdioFIFO:stderrFileHandle atPath:stderrPath];
}
if (stdoutFileHandle != nil) {
NSString *stdoutPath = [[mySession sessionConfig] simulatedApplicationStdOutPath];
[self removeStdioFIFO:stdoutFileHandle atPath:stdoutPath];
}
if (error != nil)
[self doExit:EXIT_FAILURE];
else
[self doExit:EXIT_SUCCESS];
}
- (void)session:(DTiPhoneSimulatorSession *)mySession didStart:(BOOL)started withError:(NSError *)error {
if (startOnly && mySession) {
[NSTask launchedTaskWithLaunchPath:@"/usr/bin/osascript"
arguments:[NSArray arrayWithObjects:@"-e", @"tell application \"iPhone Simulator\" to activate", nil]];
nsprintf(@"<msg>Simulator started (no session)</msg>");
[self doExit:EXIT_SUCCESS];
return;
}
if (started) {
[NSTask launchedTaskWithLaunchPath:@"/usr/bin/osascript"
arguments:[NSArray arrayWithObjects:@"-e", @"tell application \"iPhone Simulator\" to activate", nil]];
if (shouldStartDebugger) {
char*args[4] = { NULL, NULL, (char*)[[[mySession simulatedApplicationPID] description] UTF8String], NULL };
if (useGDB) {
args[0] = strdup("gdb");
args[1] = strdup("program");
} else {
args[0] = strdup("lldb");
args[1] = strdup("--attach-pid");
}
// The parent process must live on to process the stdout/stderr fifos,
// so start the debugger as a child process.
pid_t child_pid = fork();
if (child_pid == 0) {
execvp(args[0], args);
} else if (child_pid < 0) {
nsprintf(@"<msg>Could not start debugger process: %@</msg>", errno);
[self doExit:EXIT_FAILURE];
return;
}
}
if (verbose) {
nsprintf(@"<msg>Session started</msg>");
}
nsprintf(@"<inferior_pid>%@</inferior_pid>", [session simulatedApplicationPID]);
fflush(stdout);
if (exitOnStartup) {
[self doExit:EXIT_SUCCESS];
return;
}
pidCheckingTimer = [[NSTimer scheduledTimerWithTimeInterval:5.0 target:self
selector:@selector(checkPid:) userInfo:nil repeats: TRUE] retain];
} else {
nsprintf(@"<msg>Session could not be started: %@</msg>", error);
[self doExit:EXIT_FAILURE];
}
}
- (void)stop {
if (session)
[session requestEndWithTimeout: 0.1];
}
- (void)checkPid:(NSTimer *)timer {
(void)timer;
if (session && [[session simulatedApplicationPID]intValue] > 0) {
if (kill((pid_t)[[session simulatedApplicationPID]intValue], 0) == -1) {
nsprintf(@"<msg>app stopped</msg>");
[self doExit:EXIT_SUCCESS];
return;
}
}
}
- (void)stdioDataIsAvailable:(NSNotification *)notification {
[[notification object] readInBackgroundAndNotify];
NSData *data = [[notification userInfo] valueForKey:NSFileHandleNotificationDataItem];
NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; /* dangerous if partially encoded data is at the boundary */
if (!alreadyPrintedData) {
if ([str length] == 0) {
return;
} else {
alreadyPrintedData = YES;
}
}
if ([notification object] == stdoutFileHandle) {
printf("<app_output>%s</app_output>\n", [str UTF8String]);
} else {
nsprintf(@"<app_output>%@</app_output>", str); // handle stderr differently?
}
fflush(stdout);
}
- (void)createStdioFIFO:(NSFileHandle **)fileHandle ofType:(NSString *)type atPath:(NSString **)path {
*path = [NSString stringWithFormat:@"%@/ios-sim-%@-pipe-%d", NSTemporaryDirectory(), type, (int)time(NULL)];
if (mkfifo([*path UTF8String], S_IRUSR | S_IWUSR) == -1) {
nsprintf(@"<msg>Unable to create %@ named pipe `%@'</msg>", type, *path);
[self doExit:EXIT_FAILURE];
} else {
if (verbose) {
nsprintf(@"<msg>Creating named pipe at `%@'</msg>", *path);
}
int fd = open([*path UTF8String], O_RDONLY | O_NDELAY);
*fileHandle = [[[NSFileHandle alloc] initWithFileDescriptor:fd] retain];
[*fileHandle readInBackgroundAndNotify];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(stdioDataIsAvailable:)
name:NSFileHandleReadCompletionNotification
object:*fileHandle];
}
}
- (void)removeStdioFIFO:(NSFileHandle *)fileHandle atPath:(NSString *)path {
if (verbose) {
nsprintf(@"<msg>Removing named pipe at `%@'</msg>", path);
}
[fileHandle closeFile];
[fileHandle release];
if (![[NSFileManager defaultManager] removeItemAtPath:path error:NULL]) {
nsprintf(@"<msg>Unable to remove named pipe `%@'</msg>", path);
}
}
- (int)launchApp:(NSString *)path withFamily:(NSString *)family
uuid:(NSString *)uuid
environment:(NSDictionary *)environment
stdoutPath:(NSString *)stdoutPath
stderrPath:(NSString *)stderrPath
timeout:(NSTimeInterval)timeout
args:(NSArray *)args {
DTiPhoneSimulatorApplicationSpecifier *appSpec;
DTiPhoneSimulatorSessionConfig *config;
NSError *error = 0;
id tClass;
NSFileManager *fileManager = [[[NSFileManager alloc] init] autorelease];
if (!startOnly && ![fileManager fileExistsAtPath:path]) {
nsprintf(@"<msg>Application path %@ doesn't exist!</msg>", path);
return EXIT_FAILURE;
}
/* Create the app specifier */
tClass = objc_getClass("DTiPhoneSimulatorApplicationSpecifier");
if (tClass == nil) {
nsprintf(@"<msg>DTiPhoneSimulatorApplicationSpecifier class is nil.</msg>");
return EXIT_FAILURE;
}
appSpec = startOnly ? nil : [tClass specifierWithApplicationPath:path];
if (verbose) {
nsprintf(@"<msg>App Spec: %@</msg>", appSpec);
nsprintf(@"SDK Root: %@", sdkRoot);
for (id key in environment) {
nsprintf(@"<msg>Env: %@ = %@</msg>", key, [environment objectForKey:key]);
}
}
NSString *sdkVersion = [sdkRoot sdkVersion];
NSString *appSupportDir = [NSString stringWithFormat:@"%@/Library/Application Support/iPhone Simulator/%@",
NSHomeDirectory(), sdkVersion];
NSMutableDictionary *mutableEnv = [NSMutableDictionary dictionaryWithDictionary:environment];
[mutableEnv setObject:appSupportDir forKey:@"CFFIXED_USER_HOME"];
[mutableEnv setObject:appSupportDir forKey:@"IPHONE_SHARED_RESOURCES_DIRECTORY"];
[mutableEnv setObject:appSupportDir forKey:@"HOME"];
[mutableEnv setObject:[sdkRoot sdkRootPath] forKey:@"IPHONE_SIMULATOR_ROOT"];
[mutableEnv setObject:[sdkRoot sdkRootPath] forKey:@"DYLD_ROOT_PATH"];
[mutableEnv setObject:[sdkRoot sdkRootPath] forKey:@"DYLD_FRAMEWORK_PATH"];
[mutableEnv setObject:[sdkRoot sdkRootPath] forKey:@"DYLD_LIBRARY_PATH"];
[mutableEnv setObject:@"YES" forKey:@"NSUnbufferedIO"];
environment = mutableEnv;
/* Set up the session configuration */
tClass = objc_getClass("DTiPhoneSimulatorSessionConfig");
if (tClass == nil) {
nsprintf(@"<msg>DTiPhoneSimulatorApplicationSpecifier class is nil.</msg>");
return EXIT_FAILURE;
}
config = [[[tClass alloc] init] autorelease];
[config setApplicationToSimulateOnStart:appSpec];
[config setSimulatedSystemRoot:sdkRoot];
[config setSimulatedApplicationShouldWaitForDebugger:shouldWaitDebugger];
[config setSimulatedApplicationLaunchArgs:args];
[config setSimulatedApplicationLaunchEnvironment:environment];
if (stderrPath) {
stderrFileHandle = nil;
} else if (!exitOnStartup) {
[self createStdioFIFO:&stderrFileHandle ofType:@"stderr" atPath:&stderrPath];
}
[config setSimulatedApplicationStdErrPath:stderrPath];
if (stdoutPath) {
stdoutFileHandle = nil;
} else if (!exitOnStartup) {
[self createStdioFIFO:&stdoutFileHandle ofType:@"stdout" atPath:&stdoutPath];
}
[config setSimulatedApplicationStdOutPath:stdoutPath];
[config setLocalizedClientName: @"iossim"];
// this was introduced in 3.2 of SDK
if ([config respondsToSelector:@selector(setSimulatedDeviceFamily:)]) {
if (family == nil) {
family = @"iphone";
}
if (verbose) {
nsprintf(@"using device family %@",family);
}
if ([family isEqualToString:@"ipad"]) {
[config setSimulatedDeviceFamily:[NSNumber numberWithInt:2]];
} else{
[config setSimulatedDeviceFamily:[NSNumber numberWithInt:1]];
}
}
[self changeDeviceType:family retina:retinaDevice isTallDevice:tallDevice];
/* Start the session */
tClass = objc_getClass("DTiPhoneSimulatorSession");
if (tClass == nil) {
nsprintf(@"<msg>DTiPhoneSimulatorSession class is nil.</msg>");
return EXIT_FAILURE;
}
session = [[tClass alloc] init];
[session setDelegate:self];
if (uuid != nil){
[session setUuid:uuid];
}
if (![session requestStartWithConfig:config timeout:timeout error:&error]) {
nsprintf(@"<msg>Could not start simulator session: %@</msg>", error);
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
- (void) changeDeviceType:(NSString *)family retina:(BOOL)retina isTallDevice:(BOOL)isTallDevice {
NSString *devicePropertyValue;
if (retina) {
if (verbose) {
nsprintf(@"<msg>using retina</msg>");
}
if ([family isEqualToString:@"ipad"]) {
devicePropertyValue = deviceIpadRetina;
}
else {
if (isTallDevice) {
devicePropertyValue = deviceIphoneRetina4_0Inch;
} else {
devicePropertyValue = deviceIphoneRetina3_5Inch;
}
}
} else {
if ([family isEqualToString:@"ipad"]) {
devicePropertyValue = deviceIpad;
} else {
devicePropertyValue = deviceIphone;
}
}
CFPreferencesSetAppValue((CFStringRef)deviceProperty, (CFPropertyListRef)devicePropertyValue, (CFStringRef)simulatorPrefrencesName);
CFPreferencesAppSynchronize((CFStringRef)simulatorPrefrencesName);
}
/**
* Execute 'main'
*/
- (void)runWithArgc:(int)argc argv:(char **)argv {
if (argc < 2) {
[self printUsage];
exit(EXIT_FAILURE);
}
retinaDevice = NO;
tallDevice = NO;
exitOnStartup = NO;
alreadyPrintedData = NO;
startOnly = strcmp(argv[1], "start") == 0;
nsprintf(@"<query_result>");
if (strcmp(argv[1], "showdevicetypes") == 0) {
nsprintf(@"<deviceinfo>");
nsprintf(@"<item><key>com.apple.CoreSimulator.SimDeviceType.iPhone-4s</key><value>iPhone 3.5-inch Retina Display</value></item>");
nsprintf(@"<item><key>com.apple.CoreSimulator.SimDeviceType.iPhone-5s</key><value>iPhone 4-inch Retina Display</value></item>");
nsprintf(@"<item><key>com.apple.CoreSimulator.SimDeviceType.iPad-2</key><value>iPad</value></item>");
nsprintf(@"<item><key>com.apple.CoreSimulator.SimDeviceType.iPad-Retina</key><value>iPad Retina Display</value></item>");
nsprintf(@"</deviceinfo>");
[self doExit:0];
return;
} else if (strcmp(argv[1], "showsdks") == 0) {
[self doExit:[self showSDKs]];
return;
} else if (strcmp(argv[1], "launch") == 0 || startOnly) {
if (strcmp(argv[1], "launch") == 0 && argc < 3) {
nsprintf(@"<msg>Missing application path argument</msg>");
[self printUsage];
[self doExit:EXIT_FAILURE];
return;
}
NSString *appPath = nil;
int argOffset;
if (startOnly) {
argOffset = 2;
}
else {
argOffset = 3;
appPath = [[NSString stringWithUTF8String:argv[2]] expandPath];
}
NSString *family = nil;
NSString *uuid = nil;
NSString *stdoutPath = nil;
NSString *stderrPath = nil;
NSTimeInterval timeout = 60;
NSMutableDictionary *environment = [NSMutableDictionary dictionary];
int i = argOffset;
for (; i < argc; i++) {
if (strcmp(argv[i], "--version") == 0) {
printf("%s\n", IOS_SIM_VERSION);
exit(EXIT_SUCCESS);
} else if (strcmp(argv[i], "--help") == 0) {
[self printUsage];
exit(EXIT_SUCCESS);
} else if (strcmp(argv[i], "--verbose") == 0) {
verbose = YES;
} else if (strcmp(argv[i], "--exit") == 0) {
exitOnStartup = YES;
} else if (strcmp(argv[i], "--wait-for-debugger") == 0) {
shouldWaitDebugger = YES;
} else if (strcmp(argv[i], "--debug") == 0) {
shouldWaitDebugger = YES;
shouldStartDebugger = YES;
} else if (strcmp(argv[i], "--use-gdb") == 0) {
useGDB = YES;
} else if (strcmp(argv[i], "--developer-path") == 0) {
++i;
if (i == argc) {
nsprintf(@"<msg>missing arg after --developer-path</msg>");
[self doExit:EXIT_FAILURE];
return;
}
} else if (strcmp(argv[i], "--timeout") == 0) {
if (i + 1 < argc) {
timeout = [[NSString stringWithUTF8String:argv[++i]] doubleValue];
nsprintf(@"<msg>Timeout: %f second(s)</msg>", timeout);
}
}
else if (strcmp(argv[i], "--sdk") == 0) {
i++;
if (i == argc) {
nsprintf(@"<msg>missing arg after --sdk</msg>");
[self doExit:EXIT_FAILURE];
return;
}
NSString* ver = [NSString stringWithCString:argv[i] encoding:NSUTF8StringEncoding];
id tClass = objc_getClass("DTiPhoneSimulatorSystemRoot");
NSArray *roots;
if (tClass == nil) {
nsprintf(@"<msg>DTiPhoneSimulatorSystemRoot class is nil.</msg>");
[self doExit:EXIT_FAILURE];
return;
}
roots = [tClass knownRoots];
for (DTiPhoneSimulatorSystemRoot *root in roots) {
NSString *v = [root sdkVersion];
if ([v isEqualToString:ver]) {
sdkRoot = root;
break;
}
}
if (sdkRoot == nil) {
fprintf(stdout,"<msg>Unknown or unsupported SDK version: %s</msg>\n",argv[i]);
[self showSDKs];
exit(EXIT_FAILURE);
}
} else if (strcmp(argv[i], "--family") == 0) {
i++;
if (i == argc) {
nsprintf(@"<msg>missing arg after --family</msg>");
[self doExit:EXIT_FAILURE];
return;
}
family = [NSString stringWithUTF8String:argv[i]];
} else if (strcmp(argv[i], "--uuid") == 0) {
i++;
uuid = [NSString stringWithUTF8String:argv[i]];
} else if (strcmp(argv[i], "--devicetypeid") == 0) {
i++;
if (i == argc) {
nsprintf(@"<msg>missing arg after --devicetypeid</msg>");
[self doExit:EXIT_FAILURE];
return;
}
if (strcmp(argv[i], "com.apple.CoreSimulator.SimDeviceType.iPhone-4s") == 0) {
family = [NSString stringWithUTF8String:"iphone"];
retinaDevice = YES;
} else if (strcmp(argv[i], "com.apple.CoreSimulator.SimDeviceType.iPad-2") == 0) {
family = [NSString stringWithUTF8String:"ipad"];
} else if (strcmp(argv[i], "com.apple.CoreSimulator.SimDeviceType.iPhone-5s") == 0) {
family = [NSString stringWithUTF8String:"iphone"];
retinaDevice = YES;
tallDevice = YES;
} else if (strcmp(argv[i], "com.apple.CoreSimulator.SimDeviceType.iPad-Retina") == 0) {
family = [NSString stringWithUTF8String:"ipad"];
retinaDevice = YES;
} else {
fprintf(stdout,"<msg>Unknown or unsupported device type: %s</msg>\n",argv[i]);
[self doExit:EXIT_FAILURE];
return;
}
} else if (strcmp(argv[i], "--setenv") == 0) {
i++;
if (i == argc) {
nsprintf(@"<msg>missing arg after --setenv</msg>");
[self doExit:EXIT_FAILURE];
return;
}
NSArray *parts = [[NSString stringWithUTF8String:argv[i]] componentsSeparatedByString:@"="];
[environment setObject:[parts objectAtIndex:1] forKey:[parts objectAtIndex:0]];
} else if (strcmp(argv[i], "--env") == 0) {
i++;
if (i == argc) {
nsprintf(@"<msg>missing arg after --env</msg>");
[self doExit:EXIT_FAILURE];
return;
}
NSString *envFilePath = [[NSString stringWithUTF8String:argv[i]] expandPath];
environment = [NSMutableDictionary dictionaryWithContentsOfFile:envFilePath];
if (!environment) {
fprintf(stdout, "<msg>Could not read environment from file: %s</msg>\n", argv[i]);
[self printUsage];
exit(EXIT_FAILURE);
}
} else if (strcmp(argv[i], "--stdout") == 0) {
i++;
if (i == argc) {
nsprintf(@"<msg>missing arg after --stdout</msg>");
[self doExit:EXIT_FAILURE];
return;
}
stdoutPath = [[NSString stringWithUTF8String:argv[i]] expandPath];
nsprintf(@"<msg>stdoutPath: %@</msg>", stdoutPath);
} else if (strcmp(argv[i], "--stderr") == 0) {
i++;
if (i == argc) {
nsprintf(@"<msg>missing arg after --stderr</msg>");
[self doExit:EXIT_FAILURE];
return;
}
stderrPath = [[NSString stringWithUTF8String:argv[i]] expandPath];
nsprintf(@"<msg>stderrPath: %@</msg>", stderrPath);
} else if (strcmp(argv[i], "--retina") == 0) {
retinaDevice = YES;
} else if (strcmp(argv[i], "--tall") == 0) {
tallDevice = YES;
} else if (strcmp(argv[i], "--args") == 0) {
i++;
break;
} else {
printf("<msg>unrecognized argument:%s</msg>\n", argv[i]);
[self printUsage];
[self doExit:EXIT_FAILURE];
return;
}
}
NSMutableArray *args = [NSMutableArray arrayWithCapacity:MAX(argc - i,0)];
for (; i < argc; i++) {
[args addObject:[NSString stringWithUTF8String:argv[i]]];
}
if (sdkRoot == nil) {
id tClass = objc_getClass("DTiPhoneSimulatorSystemRoot");
if (tClass == nil) {
nsprintf(@"<msg>DTiPhoneSimulatorSystemRoot class is nil.</msg>");
[self doExit:EXIT_FAILURE];
return;
}
sdkRoot = [tClass defaultRoot];
}
/* Don't exit, adds to runloop */
int res = [self launchApp:appPath
withFamily:family
uuid:uuid
environment:environment
stdoutPath:stdoutPath
stderrPath:stderrPath
timeout:timeout
args:args];
nsprintf(@"<app_started status=\"%@\" />", ((res == 0) ? @"SUCCESS" : @"FAILURE"));
fflush(stdout);
fflush(stderr);
if (res != 0)
[self doExit:EXIT_FAILURE];
} else {
if (argc == 2 && strcmp(argv[1], "--help") == 0) {
[self printUsage];
[self doExit:EXIT_SUCCESS];
} else if (argc == 2 && strcmp(argv[1], "--version") == 0) {
printf("%s\n", IOS_SIM_VERSION);
[self doExit:EXIT_SUCCESS];
} else {
fprintf(stdout, "<msg>Unknown command</msg>\n");
[self printUsage];
[self doExit:EXIT_FAILURE];
}
}
}
@end

View File

@@ -1,126 +0,0 @@
#import <Cocoa/Cocoa.h>
/*
* File: /Developer/Platforms/iPhoneSimulator.platform/Developer/Library/PrivateFrameworks/iPhoneSimulatorRemoteClient.framework/Versions/A/iPhoneSimulatorRemoteClient
* Arch: Intel 80x86 (i386)
* Current version: 12.0.0, Compatibility version: 1.0.0
*
* See the IOSSIM_LICENSE file in the parent directory for the license on the source code in this file.
*/
@class DTiPhoneSimulatorSession;
@protocol DTiPhoneSimulatorSessionDelegate
- (void) session: (DTiPhoneSimulatorSession *) session didEndWithError: (NSError *) error;
- (void) session: (DTiPhoneSimulatorSession *) session didStart: (BOOL) started withError: (NSError *) error;
@end
@interface DTiPhoneSimulatorApplicationSpecifier : NSObject <NSCopying>
{
NSString *_appPath;
NSString *_bundleID;
}
+ (id) specifierWithApplicationPath: (NSString *) appPath;
+ (id) specifierWithApplicationBundleIdentifier: (NSString *) bundleID;
- (NSString *) bundleID;
- (void) setBundleID: (NSString *) bundleId;
- (NSString *) appPath;
- (void) setAppPath: (NSString *) appPath;
@end
@interface DTiPhoneSimulatorSystemRoot : NSObject <NSCopying>
{
NSString *sdkRootPath;
NSString *sdkVersion;
NSString *sdkDisplayName;
}
+ (id) defaultRoot;
+ (id)rootWithSDKPath:(id)fp8;
+ (id)rootWithSDKVersion:(id)fp8;
+ (NSArray *) knownRoots;
- (id)initWithSDKPath:(id)fp8;
- (id)sdkDisplayName;
- (void)setSdkDisplayName:(id)fp8;
- (id)sdkVersion;
- (void)setSdkVersion:(id)fp8;
- (id)sdkRootPath;
- (void)setSdkRootPath:(id)fp8;
@end
@interface DTiPhoneSimulatorSessionConfig : NSObject <NSCopying>
{
NSString *_localizedClientName;
DTiPhoneSimulatorSystemRoot *_simulatedSystemRoot;
DTiPhoneSimulatorApplicationSpecifier *_applicationToSimulateOnStart;
NSArray *_simulatedApplicationLaunchArgs;
NSDictionary *_simulatedApplicationLaunchEnvironment;
BOOL _simulatedApplicationShouldWaitForDebugger;
NSString *_simulatedApplicationStdOutPath;
NSString *_simulatedApplicationStdErrPath;
}
- (id)simulatedApplicationStdErrPath;
- (void)setSimulatedApplicationStdErrPath:(id)fp8;
- (id)simulatedApplicationStdOutPath;
- (void)setSimulatedApplicationStdOutPath:(id)fp8;
- (id)simulatedApplicationLaunchEnvironment;
- (void)setSimulatedApplicationLaunchEnvironment:(id)fp8;
- (id)simulatedApplicationLaunchArgs;
- (void)setSimulatedApplicationLaunchArgs:(id)fp8;
- (DTiPhoneSimulatorApplicationSpecifier *) applicationToSimulateOnStart;
- (void) setApplicationToSimulateOnStart: (DTiPhoneSimulatorApplicationSpecifier *) appSpec;
- (DTiPhoneSimulatorSystemRoot *) simulatedSystemRoot;
- (void) setSimulatedSystemRoot: (DTiPhoneSimulatorSystemRoot *) simulatedSystemRoot;
- (BOOL) simulatedApplicationShouldWaitForDebugger;
- (void) setSimulatedApplicationShouldWaitForDebugger: (BOOL) waitForDebugger;
- (id)localizedClientName;
- (void)setLocalizedClientName:(id)fp8;
// Added in 3.2 to support iPad/iPhone device families
- (void)setSimulatedDeviceFamily:(NSNumber*)family;
@end
@interface DTiPhoneSimulatorSession : NSObject {
NSString *_uuid;
id <DTiPhoneSimulatorSessionDelegate> _delegate;
NSNumber *_simulatedApplicationPID;
int _sessionLifecycleProgress;
NSTimer *_timeoutTimer;
DTiPhoneSimulatorSessionConfig *_sessionConfig;
struct ProcessSerialNumber _simulatorPSN;
}
- (BOOL) requestStartWithConfig: (DTiPhoneSimulatorSessionConfig *) config timeout: (NSTimeInterval) timeout error: (NSError **) outError;
- (void) requestEndWithTimeout: (NSTimeInterval) timeout;
- (id)sessionConfig;
- (void)setSessionConfig:(id)fp8;
- (id)timeoutTimer;
- (void)setTimeoutTimer:(id)fp8;
- (int)sessionLifecycleProgress;
- (void)setSessionLifecycleProgress:(int)fp8;
- (id)simulatedApplicationPID;
- (void)setSimulatedApplicationPID:(id)fp8;
- (id<DTiPhoneSimulatorSessionDelegate>) delegate;
- (void) setDelegate: (id<DTiPhoneSimulatorSessionDelegate>) delegate;
- (id)uuid;
- (void)setUuid:(id)fp8;
@end

View File

@@ -1,77 +0,0 @@
/* Author: Landon Fuller <landonf@plausiblelabs.com>
* Copyright (c) 2008-2011 Plausible Labs Cooperative, Inc.
* All rights reserved.
*
* See the IOSSIM_LICENSE file in this directory for the license on the source code in this file.
*/
/* derived from https://github.com/phonegap/ios-sim */
#import <AppKit/AppKit.h>
#import "iphonesimulator.h"
#include <QLibrary>
#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0)
#include <QApplication>
#else
#include <QGuiApplication>
#endif
#include <QString>
#include <QStringList>
/* to do:
* - try to stop inferior when killed (or communicate with creator to allow killing the inferior)
* - remove unneeded functionality and streamline a bit
*/
/*
* Runs the iPhoneSimulator backed by a main runloop.
*/
int main (int argc, char *argv[]) {
int qtargc = 1;
char *qtarg = 0;
if (argc)
qtarg = argv[0];
#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0)
QApplication a(qtargc, &qtarg);
#else
QGuiApplication a(qtargc, &qtarg);
#endif
//NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
QString xcodePath = QLatin1String("/Applications/Xcode.app/Contents/Developer/");
for (int i = 0; i + 1 < argc; ++i) {
if (strcmp(argv[i], "--developer-path") == 0)
xcodePath = QString::fromLocal8Bit(argv[i + 1]);
}
if (!xcodePath.endsWith(QLatin1Char('/')))
xcodePath.append(QLatin1Char('/'));
/* manual loading of the private deps */
QStringList deps = QStringList()
<< QLatin1String("/System/Library/PrivateFrameworks/DebugSymbols.framework/Versions/A/DebugSymbols")
<< QLatin1String("/System/Library/PrivateFrameworks/CoreSymbolication.framework/CoreSymbolication")
<< (xcodePath + QLatin1String("../OtherFrameworks/DevToolsFoundation.framework/DevToolsFoundation"));
foreach (const QString &libPath, deps) {
QLibrary *lib = new QLibrary(libPath);
//lib->setLoadHints(QLibrary::ExportExternalSymbolsHint);
if (!lib->load())
printf("<msg>error loading %s</msg>", libPath.toUtf8().constData());
}
QLibrary *libIPhoneSimulatorRemoteClient = new QLibrary(xcodePath
+ QLatin1String("Platforms/iPhoneSimulator.platform/Developer/Library/PrivateFrameworks/iPhoneSimulatorRemoteClient.framework/iPhoneSimulatorRemoteClient"));
//libIPhoneSimulatorRemoteClient->setLoadHints(QLibrary::ResolveAllSymbolsHint|QLibrary::ExportExternalSymbolsHint);
if (!libIPhoneSimulatorRemoteClient->load())
printf("<msg>error loading iPhoneSimulatorRemoteClient</msg>");
iPhoneSimulator *sim = [[iPhoneSimulator alloc] init];
/* Execute command line handler */
[sim runWithArgc: argc argv: argv];
/* Run the loop to handle added input sources, if any */
int res = a.exec();
exit(res);
// [pool release];
return 0;
}

View File

@@ -1,6 +0,0 @@
/*
* See the IOSSIM_LICENSE file in this directory for the license on the source code in this file.
*/
int nsvfprintf (FILE *stream, NSString *format, va_list args);
int nsfprintf (FILE *stream, NSString *format, ...);
int nsprintf (NSString *format, ...);

View File

@@ -1,44 +0,0 @@
/*
* NSLog() clone, but writes to arbitrary output stream
*
* See the IOSSIM_LICENSE file in this directory for the license on the source code in this file.
*/
#import <Foundation/Foundation.h>
#import <stdio.h>
int nsvfprintf (FILE *stream, NSString *format, va_list args) {
int retval;
NSString *str = (NSString *) CFStringCreateWithFormatAndArguments(NULL, NULL, (CFStringRef) format, args);
retval = fprintf(stream, "%s\n", [str UTF8String]);
[str release];
return retval;
}
int nsfprintf (FILE *stream, NSString *format, ...) {
va_list ap;
int retval;
va_start(ap, format);
{
retval = nsvfprintf(stream, format, ap);
}
va_end(ap);
return retval;
}
int nsprintf (NSString *format, ...) {
va_list ap;
int retval;
va_start(ap, format);
{
retval = nsvfprintf(stdout, format, ap);
}
va_end(ap);
return retval;
}

View File

@@ -1,11 +0,0 @@
/*
* See the IOSSIM_LICENSE file in this directory for the license on the source code in this file.
*/
#import <Foundation/Foundation.h>
@interface NSString (ExpandPath)
- (NSString *)expandPath;
@end

View File

@@ -1,18 +0,0 @@
/*
* See the IOSSIM_LICENSE file in this directory for the license on the source code in this file.
*/
#import "nsstringexpandpath.h"
@implementation NSString (ExpandPath)
- (NSString *)expandPath {
if ([self isAbsolutePath]) {
return [self stringByStandardizingPath];
} else {
NSString *cwd = [[NSFileManager defaultManager] currentDirectoryPath];
return [[cwd stringByAppendingPathComponent:self] stringByStandardizingPath];
}
}
@end

View File

@@ -1 +0,0 @@
#define IOS_SIM_VERSION "1.8.2m"