Is there an easy way to change the scheme of a NSURL
? I do realize that NSURL
is immutable. My goal is to change the scheme of an URL to \"https\" if t
NSURLComponents
is your friend here. You can use it to swap out the http
scheme for https
. The only caveat is NSURLComponents
uses RFC 3986 whereas NSURL
uses the older RFCs 1738 and 1808, so there is some behavior differences in edge cases, but you're extremely unlikely to hit those cases (and NSURLComponents
has the better behavior anyway).
NSURLComponents *components = [NSURLComponents componentsWithURL:url resolvingAgainstBaseURL:YES];
components.scheme = inUseSecure ? @"https" : @"http";
return components.URL;
Why not just do a bit of string manipulation?
NSString *str = [url absoluteString];
NSInteger colon = [str rangeOfString:@":"].location;
if (colon != NSNotFound) { // wtf how would it be missing
str = [str substringFromIndex:colon]; // strip off existing scheme
if (inUseSecure) {
str = [@"https" stringByAppendingString:str];
} else {
str = [@"http" stringByAppendingString:str];
}
}
return [NSURL URLWithString:str];