Làm cách nào để tôi có thể đặt vị trí (vì nó được chọn trong các dịch vụ CoreLocation) trong Trình mô phỏng iPhone?
Làm cách nào để tôi có thể đặt vị trí (vì nó được chọn trong các dịch vụ CoreLocation) trong Trình mô phỏng iPhone?
Câu trả lời:
Kể từ iOS 5, trình mô phỏng có vị trí có thể định cấu hình.
Trong menu Gỡ lỗi, mục nhập cuối cùng là "Vị trí"; điều này cung cấp cho bạn một menu phụ với:
Vị trí Tùy chỉnh cho phép bạn nhập giá trị Vĩ độ / Dài. Đi xe đạp, City Run và Freeway Drive là mô phỏng một địa điểm di chuyển (tất nhiên là ở Cupertino).
Tất nhiên, điều này không giúp ích gì cho việc gỡ lỗi cho iOS 4 (hoặc cũ hơn); nhưng đó là một cải tiến rõ ràng!
Tạo trong tệp TextEdit tệp sau đây, gọi là MyOffice chẳng hạn. Đặt phần mở rộng là .gpx
<?xml version="1.0"?> <gpx version="1.0" creator="MyName"> <wpt lat="53.936166" lon="27.565370"> <name>MyOffice</name> </wpt> </gpx>
Chọn trong Xcode tại khu vực Mô phỏng Add GPX File to Project...
Trong cuộc gọi lại ủy quyền của mình, tôi kiểm tra xem liệu tôi có đang chạy trong trình mô phỏng ( #if TARGET_ IPHONE_SIMULATOR
) hay không và nếu có, tôi cung cấp Lat / Long của riêng mình, đã được tra cứu trước. Theo hiểu biết của tôi, không còn cách nào khác.
Debug
trình đơn trên trình mô phỏng bằng cách sử dụng Location
mục nhập cho phép đặt vị trí tùy chỉnh hoặc chọn từ một số chuyến đi và địa điểm được xác định trước.
trong menu Trình mô phỏng iOS, đi tới Gỡ lỗi -> Vị trí -> Vị trí tùy chỉnh. Ở đó bạn có thể đặt vĩ độ và kinh độ và thử nghiệm ứng dụng cho phù hợp. Điều này hoạt động với mapkit và cả CLLocationManager.
Debug -> Location -> Custom Location
Features -> Location -> Custom Location
Để biết bạn có phiên bản XCode nào
$ /usr/bin/xcodebuild -version
Trước iOS 5, bạn có thể làm điều đó bằng mã:
Tôi sử dụng đoạn mã này ngay trước @implementation
lớp học mà tôi cần dữ liệu vị trí và tiêu đề giả của mình.
#if (TARGET_IPHONE_SIMULATOR)
@interface MyHeading : CLHeading
-(CLLocationDirection) magneticHeading;
-(CLLocationDirection) trueHeading;
@end
@implementation MyHeading
-(CLLocationDirection) magneticHeading { return 90; }
-(CLLocationDirection) trueHeading { return 91; }
@end
@implementation CLLocationManager (TemporaryLocationFix)
- (void)locationFix {
CLLocation *location = [[CLLocation alloc] initWithLatitude:55.932 longitude:12.321];
[[self delegate] locationManager:self didUpdateToLocation:location fromLocation:nil];
id heading = [[MyHeading alloc] init];
[[self delegate] locationManager:self didUpdateHeading: heading];
}
-(void)startUpdatingHeading {
[self performSelector:@selector(locationFix) withObject:nil afterDelay:0.1];
}
- (void)startUpdatingLocation {
[self performSelector:@selector(locationFix) withObject:nil afterDelay:0.1];
}
@end
#endif
Sau khi iOS 5 chỉ cần đưa một tệp GPX vào dự án của bạn như thế này để vị trí được cập nhật liên tục Hillerød.gpx:
<?xml version="1.0"?>
<gpx version="1.1" creator="Xcode">
<wpt lat="55.93619760" lon="12.29131930"></wpt>
<wpt lat="55.93625770" lon="12.29108330"></wpt>
<wpt lat="55.93631780" lon="12.29078290"></wpt>
<wpt lat="55.93642600" lon="12.29041810"></wpt>
<wpt lat="55.93653420" lon="12.28998890"></wpt>
<wpt lat="55.93660630" lon="12.28966710"></wpt>
<wpt lat="55.93670240" lon="12.28936670"></wpt>
<wpt lat="55.93677450" lon="12.28921650"></wpt>
<wpt lat="55.93709900" lon="12.28945250"></wpt>
<wpt lat="55.93747160" lon="12.28949540"></wpt>
<wpt lat="55.93770000" lon="12.28966710"></wpt>
<wpt lat="55.93785620" lon="12.28977440"></wpt>
<wpt lat="55.93809660" lon="12.28988170"></wpt>
<wpt lat="55.93832490" lon="12.28994600"></wpt>
<wpt lat="55.93845710" lon="12.28996750"></wpt>
<wpt lat="55.93856530" lon="12.29007480"></wpt>
<wpt lat="55.93872150" lon="12.29013910"></wpt>
<wpt lat="55.93886570" lon="12.28975290"></wpt>
<wpt lat="55.93898590" lon="12.28955980"></wpt>
<wpt lat="55.93910610" lon="12.28919500"></wpt>
<wpt lat="55.93861330" lon="12.28883020"></wpt>
<wpt lat="55.93845710" lon="12.28868000"></wpt>
<wpt lat="55.93827680" lon="12.28850840"></wpt>
<wpt lat="55.93809660" lon="12.28842250"></wpt>
<wpt lat="55.93796440" lon="12.28831520"></wpt>
<wpt lat="55.93780810" lon="12.28810070"></wpt>
<wpt lat="55.93755570" lon="12.28790760"></wpt>
<wpt lat="55.93739950" lon="12.28775730"></wpt>
<wpt lat="55.93726730" lon="12.28767150"></wpt>
<wpt lat="55.93707500" lon="12.28760710"></wpt>
<wpt lat="55.93690670" lon="12.28734970"></wpt>
<wpt lat="55.93675050" lon="12.28726380"></wpt>
<wpt lat="55.93649810" lon="12.28713510"></wpt>
<wpt lat="55.93625770" lon="12.28687760"></wpt>
<wpt lat="55.93596930" lon="12.28679180"></wpt>
<wpt lat="55.93587310" lon="12.28719940"></wpt>
<wpt lat="55.93575290" lon="12.28752130"></wpt>
<wpt lat="55.93564480" lon="12.28797190"></wpt>
<wpt lat="55.93554860" lon="12.28833670"></wpt>
<wpt lat="55.93550050" lon="12.28868000"></wpt>
<wpt lat="55.93535630" lon="12.28900190"></wpt>
<wpt lat="55.93515200" lon="12.28936670"></wpt>
<wpt lat="55.93505580" lon="12.28958120"></wpt>
<wpt lat="55.93481550" lon="12.29001040"></wpt>
<wpt lat="55.93468320" lon="12.29033230"></wpt>
<wpt lat="55.93452700" lon="12.29063270"></wpt>
<wpt lat="55.93438280" lon="12.29095450"></wpt>
<wpt lat="55.93425050" lon="12.29121200"></wpt>
<wpt lat="55.93413040" lon="12.29140520"></wpt>
<wpt lat="55.93401020" lon="12.29168410"></wpt>
<wpt lat="55.93389000" lon="12.29189870"></wpt>
<wpt lat="55.93372170" lon="12.29239220"></wpt>
<wpt lat="55.93385390" lon="12.29258530"></wpt>
<wpt lat="55.93409430" lon="12.29295010"></wpt>
<wpt lat="55.93421450" lon="12.29320760"></wpt>
<wpt lat="55.93433470" lon="12.29333630"></wpt>
<wpt lat="55.93445490" lon="12.29350800"></wpt>
<wpt lat="55.93463520" lon="12.29374400"></wpt>
<wpt lat="55.93479140" lon="12.29410880"></wpt>
<wpt lat="55.93491160" lon="12.29419460"></wpt>
<wpt lat="55.93515200" lon="12.29458090"></wpt>
<wpt lat="55.93545250" lon="12.29494570"></wpt>
<wpt lat="55.93571690" lon="12.29505300"></wpt>
<wpt lat="55.93593320" lon="12.29513880"></wpt>
<wpt lat="55.93617360" lon="12.29522460"></wpt>
<wpt lat="55.93622170" lon="12.29537480"></wpt>
<wpt lat="55.93713510" lon="12.29505300"></wpt>
<wpt lat="55.93776000" lon="12.29378700"></wpt>
<wpt lat="55.93904600" lon="12.29531040"></wpt>
<wpt lat="55.94004350" lon="12.29552500"></wpt>
<wpt lat="55.94023570" lon="12.29561090"></wpt>
<wpt lat="55.94019970" lon="12.29591130"></wpt>
<wpt lat="55.94017560" lon="12.29629750"></wpt>
<wpt lat="55.94017560" lon="12.29670520"></wpt>
<wpt lat="55.94017560" lon="12.29713430"></wpt>
<wpt lat="55.94019970" lon="12.29754200"></wpt>
<wpt lat="55.94024780" lon="12.29816430"></wpt>
<wpt lat="55.94051210" lon="12.29842180"></wpt>
<wpt lat="55.94084860" lon="12.29820720"></wpt>
<wpt lat="55.94105290" lon="12.29799270"></wpt>
<wpt lat="55.94123320" lon="12.29777810"></wpt>
<wpt lat="55.94140140" lon="12.29749910"></wpt>
<wpt lat="55.94142550" lon="12.29726310"></wpt>
<wpt lat="55.94147350" lon="12.29687690"></wpt>
<wpt lat="55.94155760" lon="12.29619020"></wpt>
<wpt lat="55.94161770" lon="12.29576110"></wpt>
<wpt lat="55.94148550" lon="12.29531040"></wpt>
<wpt lat="55.94093270" lon="12.29522460"></wpt>
<wpt lat="55.94041600" lon="12.29518170"></wpt>
<wpt lat="55.94056020" lon="12.29398010"></wpt>
<wpt lat="55.94024780" lon="12.29352950"></wpt>
<wpt lat="55.94001940" lon="12.29335780"></wpt>
<wpt lat="55.93992330" lon="12.29325050"></wpt>
<wpt lat="55.93969490" lon="12.29299300"></wpt>
<wpt lat="55.93952670" lon="12.29277840"></wpt>
<wpt lat="55.93928630" lon="12.29260680"></wpt>
<wpt lat="55.93915410" lon="12.29232780"></wpt>
<wpt lat="55.93928630" lon="12.29202740"></wpt>
<wpt lat="55.93933440" lon="12.29174850"></wpt>
<wpt lat="55.93947860" lon="12.29116910"></wpt>
<wpt lat="55.93965890" lon="12.29095450"></wpt>
<wpt lat="55.94001940" lon="12.29061120"></wpt>
<wpt lat="55.94041600" lon="12.29084730"></wpt>
<wpt lat="55.94076450" lon="12.29101890"></wpt>
<wpt lat="55.94080060" lon="12.29065410"></wpt>
<wpt lat="55.94086060" lon="12.29031080"></wpt>
<wpt lat="55.94092070" lon="12.28990310"></wpt>
<wpt lat="55.94099280" lon="12.28975290"></wpt>
<wpt lat="55.94119710" lon="12.28986020"></wpt>
<wpt lat="55.94134130" lon="12.28998890"></wpt>
<wpt lat="55.94147350" lon="12.29007480"></wpt>
<wpt lat="55.94166580" lon="12.29003190"></wpt>
<wpt lat="55.94176190" lon="12.28938810"></wpt>
<wpt lat="55.94183400" lon="12.28893750"></wpt>
<wpt lat="55.94194220" lon="12.28850840"></wpt>
<wpt lat="55.94199030" lon="12.28835820"></wpt>
<wpt lat="55.94215850" lon="12.28859420"></wpt>
<wpt lat="55.94250700" lon="12.28883020"></wpt>
<wpt lat="55.94267520" lon="12.28893750"></wpt>
<wpt lat="55.94284350" lon="12.28902330"></wpt>
<wpt lat="55.94304770" lon="12.28915210"></wpt>
<wpt lat="55.94325200" lon="12.28925940"></wpt>
<wpt lat="55.94348030" lon="12.28953830"></wpt>
<wpt lat="55.94366060" lon="12.28966710"></wpt>
<wpt lat="55.94388890" lon="12.28975290"></wpt>
<wpt lat="55.94399700" lon="12.28994600"></wpt>
<wpt lat="55.94379280" lon="12.29065410"></wpt>
<wpt lat="55.94364860" lon="12.29095450"></wpt>
<wpt lat="55.94350440" lon="12.29127640"></wpt>
<wpt lat="55.94340820" lon="12.29155540"></wpt>
<wpt lat="55.94331210" lon="12.29198450"></wpt>
<wpt lat="55.94315590" lon="12.29269260"></wpt>
<wpt lat="55.94310780" lon="12.29318610"></wpt>
<wpt lat="55.94301170" lon="12.29361530"></wpt>
<wpt lat="55.94292760" lon="12.29408740"></wpt>
<wpt lat="55.94290350" lon="12.29436630"></wpt>
<wpt lat="55.94287950" lon="12.29453800"></wpt>
<wpt lat="55.94283140" lon="12.29533190"></wpt>
<wpt lat="55.94274730" lon="12.29606150"></wpt>
<wpt lat="55.94278340" lon="12.29621170"></wpt>
<wpt lat="55.94280740" lon="12.29649060"></wpt>
<wpt lat="55.94284350" lon="12.29679100"></wpt>
<wpt lat="55.94284350" lon="12.29734890"></wpt>
<wpt lat="55.94308380" lon="12.29837890"></wpt>
<wpt lat="55.94315590" lon="12.29852910"></wpt>
<wpt lat="55.94263920" lon="12.29906550"></wpt>
<wpt lat="55.94237480" lon="12.29910850"></wpt>
<wpt lat="55.94220660" lon="12.29915140"></wpt>
<wpt lat="55.94208640" lon="12.29902260"></wpt>
<wpt lat="55.94196620" lon="12.29887240"></wpt>
<wpt lat="55.94176190" lon="12.29794970"></wpt>
<wpt lat="55.94156970" lon="12.29760640"></wpt>
</gpx>
Tôi sử dụng GPSies.com để tạo tệp cơ sở cho dữ liệu gpx. Tuy nhiên, cần phải dọn dẹp một chút.
Kích hoạt bằng cách chạy trình mô phỏng và chọn tệp của bạn
(nguồn: lâu đàiandersen.dk )
Bạn có thể dễ dàng chia sẻ bất kỳ vị trí mong muốn nào từ ứng dụng Bản đồ macOS với trình mô phỏng Xcode .
Điều này cho phép bạn nhanh chóng kiểm tra một số vị trí, hiểu được vị trí địa lý ở đâu (ví dụ: để kiểm tra cấu trúc địa lý) và quyết định nơi tiếp theo sẽ đi trong thời gian chạy (ví dụ: để gỡ lỗi và tinh chỉnh nội dung).
Đã kiểm tra điều này trên MacOS Catalina 10.15.4 và Xcode 11.4.
Những người tốt bụng tại FutureTap đã cung cấp FTLocationSimulator miễn phí tại GitHub . Nó cho phép bạn chuẩn bị một tuyến đường thử nghiệm bằng cách sử dụng Google Earth, sau đó yêu cầu trình mô phỏng cung cấp các tọa độ này cho ứng dụng của bạn.
Tôi đã viết một bài đăng trên blog về cách sử dụng FTLocationSimulator để dễ dàng chuyển đổi giữa nhiều tuyến đường trong quá trình thử nghiệm các tính năng vị trí.
bạn có thể thêm tệp gpx vào dự án của mình và sử dụng nó:
chỉnh sửa lược đồ> tùy chọn> cho phép mô phỏng vị trí> chọn tên tệp chứa ví dụ:
<?xml version="1.0"?>
<gpx version="1.1" creator="Xcode">
<wpt lat="41.92296" lon="-87.63892"></wpt>
</gpx>
tùy chọn chỉ cần mã hóa cứng các giá trị vĩ độ / kinh độ được trả về bởi trình quản lý vị trí. Đây là phong cách cũ mặc dù.
vì vậy bạn sẽ không thêm nó vào trình mô phỏng mà vào dự án Xcode của bạn.
Muộn còn hơn không :)
Tôi vừa xem qua iSimulate này cho phép bạn gửi vị trí Giả mạo đến ứng dụng. Giải pháp KHÔNG miễn phí.
> Q: How does iSimulate work?
> A: When added to your project, the iSimulate
> SDK library creates a listening server
> on your iPhone Simulator that waits
> for a connection from an iPhone/iPod
> running the iSimulate client. When
> such connection is established, the
> iSimulate client running on your
> iPhone/iPod captures all data from the
> accelerometer sensor, the touch
> events, the location and device ID and
> streams them to the server. The
> iSimulate SDK library then recreates
> all input events synthetically. This
> is entirely transparent to your
> application and does not interfere
> with your application's functionality.
Dù sao, tôi đang lên kế hoạch để có được điều này. sẽ cập nhật thêm sớm!
Bạn muốn đặt vị trí của mình ở đâu? bạn có thể sử dụng api mapkit để hiển thị vị trí của bạn. xem icodeblog.com để biết thêm chi tiết về cách sử dụng mapkit. Ngoài ra, bạn có thể lưu trữ các cuộn dây mong muốn của mình chỉ cần tạo một đối tượng CLLocation2D * vị trí; location.longitude = giá trị kinh độ mong muốn của bạn; location.latitude = giá trị vĩ độ mong muốn của bạn;