关于SpringBoard里获取GPS坐标, 编译通过,回调没来的问题

请教一下, 执行代码, 回调没来,是什么情况,,,。在线等。。。

#import <SpringBoard/SpringBoard.h>
#import <CoreLocation/CoreLocation.h>

%hook SpringBoard

@interface SpringBoard()<CLLocationManagerDelegate>

@end

- (void) locationManager: (CLLocationManager *) manager
    didUpdateToLocation: (CLLocation *) newLocation
    fromLocation: (CLLocation *) oldLocation{
	
    NSString *lat = [NSString alloc] initWithFormat:@"%g", 
        newLocation.coordinate.latitude];
		
    
    NSString *lng = [NSString alloc] initWithFormat:@"%g", 
        newLocation.coordinate.longitude];
		
    
    NSString *acc = [NSString alloc] initWithFormat:@"%g", newLocation.horizontalAccuracy]; 
	
    NSString* str = [NSString alloc] initWithFormat:@"%@ %@ %@", lat, lng, acc];
     
	NSLog(@"=================================================>>>> %@", str);
    [acc release];
    [lat release];
    [lng release];
	[str release];
}


-(void)applicationDidFinishLaunching:(id)application 
{
	%orig;
	
	static CLLocationManager* locationManager = [CLLocationManager alloc]init];
	locationManager.delegate = self;
	//[self.locationManager requestAlwaysAuthorization];    //执行会崩溃
	locationManager.desiredAccuracy = kCLLocationAccuracyBest;    	locationManager.distanceFilter = kCLDistanceFilterNone;
	[locationManager startUpdatingLocation];
	
	NSLog(@"========================================================<<<");
	
}

%end

帖子不要沉。。。。。

不能用category的方式给SpringBoard添加函数,原因书里已经提到了。
解决办法很简单,你另写一个自己的类,实现CLLocationManagerDelegate协议,然后把delegate给指定成这个类的对象就可以了

老大啊, 按照你的方法, 为什么不行呢。。。。

#import <SpringBoard/SpringBoard.h>
#import <CoreLocation/CoreLocation.h>

#import <UIKit/UIKit.h>

@interface MyLocationManager : NSObject<CLLocationManagerDelegate>

	@property (nonatomic, retain) CLLocationManager* locationManager;
	
	-(void)start;
	
@end

@implementation MyLocationManager

-(void)start
{
	_locationManager = [CLLocationManager alloc]init];
	_locationManager.delegate = self;
	//[self.locationManager requestAlwaysAuthorization];
	_locationManager.desiredAccuracy = kCLLocationAccuracyBest;    	_locationManager.distanceFilter = 500;
	[_locationManager startUpdatingLocation];
	
	NSLog(@"MyLocationManager ========================================================<<<");
}

- (void) locationManager: (CLLocationManager *) manager
     didUpdateToLocation: (CLLocation *) newLocation
            fromLocation: (CLLocation *) oldLocation{
			
NSLog(@"locationManager ========================================================<<<");
    
    NSString *lat = [NSString alloc] initWithFormat:@"%g",
                     newLocation.coordinate.latitude];
    
    
    NSString *lng = [NSString alloc] initWithFormat:@"%g",
                     newLocation.coordinate.longitude];
    
    
    NSString *acc = [NSString alloc] initWithFormat:@"%g",
                     newLocation.horizontalAccuracy];
    
    NSLog(@"%@ %@ %@\r\n", lat, lng, acc);
}

@end

%hook SpringBoard

-(void)applicationDidFinishLaunching:(id)application 
{
	%orig;
	
	NSLog(@"SpringBoard ===================================== start");
	
	static MyLocationManager* locationManager = [MyLocationManager alloc] init];
	[locationManager start];
}

%end

syslog里有输出吗?

其它都有, 就是回调没有输出。。

看看的输出下面有没有提示错误之类的信息

老大你看看。。。

Dec 17 11:34:16 Administrators-iPhone SpringBoard[4913] <Warning>: SpringBoard ===================================== start


Dec 17 11:34:16 Administrators-iPhone SpringBoard[4913] <Warning>: MyLocationManager ========================================================<<<


Dec 17 11:34:16 Administrators-iPhone SpringBoard[4913] <Warning>: Application windows are expected to have a root view controller at the end of application launch

Dec 17 11:34:16 Administrators-iPhone SpringBoard[4913] <Warning>: Application windows are expected to have a root view controller at the end of application launch


Dec 17 11:34:17 Administrators-iPhone kernel[0] <Debug>: launchd[4923] Container: /private/var/mobile/Applications/F515CB94-3A2B-42E3-BFDC-552E59D85031 (sandbox)


Dec 17 11:34:17 Administrators-iPhone SpringBoard[4913] <Warning>: SMS Plugin initialized.


Dec 17 11:34:17 Administrators-iPhone MobileMail[4923] <Notice>: MS:Notice: Injecting: com.apple.mobilemail [MobileMail] (847.27)


Dec 17 11:34:17 Administrators-iPhone SpringBoard[4913] <Warning>: SIMToolkit plugin for SpringBoard initialized.


Dec 17 11:34:17 Administrators-iPhone SpringBoard[4913] <Warning>: Sharing Plugin initialized.


Dec 17 11:34:17 Administrators-iPhone SpringBoard[4913] <Error>: WiFi: Consulting "no-sdio-devices" property.


Dec 17 11:34:17 Administrators-iPhone SpringBoard[4913] <Error>: WiFi: "no-sdio-devices" property not found.


Dec 17 11:34:17 Administrators-iPhone SpringBoard[4913] <Warning>: WiFi picker plugin initialized


Dec 17 11:34:17 Administrators-iPhone calaccessd[4924] <Notice>: MS:Notice: Injecting: com.apple.calaccessd [calaccessd] (847.27)


Dec 17 11:34:17 Administrators-iPhone backboardd[520] <Error>: HID: The 'Passive' connection 'MobileMail' access to protected services is denied.


Dec 17 11:34:18 Administrators-iPhone passd[4926] <Notice>: MS:Notice: Injecting: com.apple.passd [passd] (847.27)


Dec 17 11:34:18 Administrators-iPhone locationd[41] <Warning>: Launch Services: Registering unknown app identifier com.apple.PassKit failed


Dec 17 11:34:18 Administrators-iPhone locationd[41] <Warning>: Launch Services: Unable to find app identifier com.apple.PassKit


Dec 17 11:34:20 Administrators-iPhone syncdefaultsd[4928] <Notice>: MS:Notice: Injecting: com.apple.syncdefaultsd [syncdefaultsd] (847.27)


Dec 17 11:34:27 Administrators-iPhone profiled[4915] <Notice>: (Note ) profiled: Service stopping.


Dec 17 11:34:27 Administrators-iPhone locationd[41] <Notice>: Location icon should now be in state 'Inactive'


Dec 17 11:34:32 Administrators-iPhone backboardd[520] <Notice>: ALS: SetDisplayFactor: factor=0.0000


Dec 17 11:34:32 Administrators-iPhone kernel[0] <Debug>: AppleMultitouchN1SPI: updating power statistics


Dec 17 11:34:32 Administrators-iPhone SpringBoard[4913] <Warning>: [MPUSystemMediaControls] Disabling lock screen media controls updates for screen turning off.


Dec 17 11:34:32 Administrators-iPhone SpringBoard[4913] <Warning>: [MPUNowPlayingController] Not registered for now playing notifications. Ignoring call to -unregisterForNotifications.


Dec 17 11:34:32 Administrators-iPhone backboardd[520] <Notice>: MultitouchHID: detection mode: 6->255


Dec 17 11:34:32 Administrators-iPhone kernel[0] <Debug>: ALS: AppleARMBacklight::setBacklightEnableGated 0 (set level to 0x1d7)


Dec 17 11:34:32 Administrators-iPhone backboardd[520] <Notice>: Posting 'com.apple.iokit.hid.displayStatus' notifyState=0


Dec 17 11:34:32 Administrators-iPhone SpringBoard[4913] <Warning>: [MPUNowPlayingController] Not registered for now playing notifications. Ignoring call to -unregisterForNotifications.


Dec 17 11:34:33 Administrators-iPhone kernel[0] <Debug>: ALS: AppleARMBacklight::handleMessageGated - framebufferState -> 0

看起来像是iOS 8里SpringBoard没有使用CLLocationManager的权限了,你把这个功能放到别的进程里去应该就好了

我测试了一下,把这段代码放在MobileMail里面,会报错:

我在隐私设置里给MobileMail赋上获取地理位置的权限,就正常了

我用的是IOS7.1 SDK用的是8.0编译的。

老大, 如果我真要在Spring Board里获得GPS,怎么办。。。。。。。而且是还是IOS7的机器。。。。

hook住检测CoreLocation权限的那个进程,让它不检查SpringBoard

locationd 进程,。。。。。。我去好啊。 好蛋疼。。。。。有没有什么资料什么的。。

我试了一下,下面的代码在iOS 6和7上可用,8上失效

#import <CoreLocation/CoreLocation.h>

@interface CLLocationManager ()
- (instancetype)initWithEffectiveBundleIdentifier:(NSString *)arg1;
@end

@interface iOSRELocationManager : CLLocationManager <CLLocationManagerDelegate>
@end

@implementation iOSRELocationManager
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
	NSLog(@"iOSRE: %@", locations);
}

- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
{
	NSLog(@"iOSRE: %@", error);
}
@end

%hook SpringBoard
- (void)applicationDidFinishLaunching:(id)application 
{
	%orig;

	iOSRELocationManager* locationManager = [iOSRELocationManager alloc] initWithEffectiveBundleIdentifier:@"com.apple.Maps"];
	locationManager.delegate = locationManager;
	[locationManager startUpdatingLocation];
}
%end

这段代码的意思,相当于是SpringBoard借用了Maps的定位功能,因此前提是Maps的定位要开启,才能正常工作。
别忘了你说的一天发一个帖子啊!