Skip to content

Commit 5f05674

Browse files
authored
Merge pull request #1866 from alttester/1838-error-unityframeworkunityframework-swifth-file-not-found-when-build-in-xcode
Implement AltProxyFinder in Objective-C and remove Swift version
2 parents d446dc5 + bf62dff commit 5f05674

File tree

6 files changed

+94
-123
lines changed

6 files changed

+94
-123
lines changed
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
// AltProxyFinder.h
2+
#import <Foundation/Foundation.h>
3+
4+
@interface AltProxyFinder : NSObject
5+
6+
+ (instancetype)shared;
7+
- (NSString *)getProxyForDestinationUrl:(NSString *)destinationUrl destinationHost:(NSString *)destinationHost;
8+
9+
@end
10+
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
// AltProxyFinder.m
2+
#import "AltProxyFinder.h"
3+
#import <CoreFoundation/CoreFoundation.h>
4+
#import <CFNetwork/CFNetwork.h>
5+
6+
@implementation AltProxyFinder
7+
8+
+ (instancetype)shared {
9+
static AltProxyFinder *sharedInstance = nil;
10+
static dispatch_once_t onceToken;
11+
dispatch_once(&onceToken, ^{
12+
sharedInstance = [[AltProxyFinder alloc] init];
13+
});
14+
return sharedInstance;
15+
}
16+
17+
- (NSString *)getProxyForDestinationUrl:(NSString *)destinationUrl destinationHost:(NSString *)destinationHost {
18+
NSDictionary *proxySettings = (__bridge NSDictionary *)(CFNetworkCopySystemProxySettings());
19+
if (!proxySettings) {
20+
return @"";
21+
}
22+
23+
NSNumber *pacEnabled = proxySettings[@"ProxyAutoConfigEnable"];
24+
if ([pacEnabled intValue] == 1) {
25+
NSString *pacUrlString = proxySettings[@"ProxyAutoConfigURLString"];
26+
if (pacUrlString) {
27+
NSURL *pacUrl = [NSURL URLWithString:pacUrlString];
28+
if (pacUrl) {
29+
__block NSString *proxyUrl = @"";
30+
dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
31+
32+
[[[NSURLSession sharedSession] dataTaskWithURL:pacUrl completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
33+
if (data && !error) {
34+
NSString *pacContent = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
35+
pacContent = [pacContent stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
36+
if (![pacContent hasPrefix:@"<!DOCTYPE html>"]) {
37+
CFArrayRef proxyArray = CFNetworkCopyProxiesForAutoConfigurationScript((__bridge CFStringRef)pacContent, (__bridge CFURLRef)[NSURL URLWithString:destinationUrl], NULL);
38+
if (proxyArray && CFArrayGetCount(proxyArray) > 0) {
39+
NSDictionary *proxy = (__bridge NSDictionary *)CFArrayGetValueAtIndex(proxyArray, 0);
40+
NSString *type = proxy[(NSString *)kCFProxyTypeKey];
41+
if ([type isEqualToString:(NSString *)kCFProxyTypeHTTP] || [type isEqualToString:(NSString *)kCFProxyTypeHTTPS]) {
42+
NSString *host = proxy[(NSString *)kCFProxyHostNameKey] ?: @"null";
43+
NSNumber *port = proxy[(NSString *)kCFProxyPortNumberKey] ?: @(0);
44+
if (![host isEqualToString:@"null"] && [port intValue] != 0) {
45+
proxyUrl = [NSString stringWithFormat:@"http://%@:%@", host, port];
46+
}
47+
}
48+
}
49+
if (proxyArray) CFRelease(proxyArray);
50+
}
51+
}
52+
dispatch_semaphore_signal(semaphore);
53+
}] resume];
54+
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
55+
return proxyUrl;
56+
}
57+
}
58+
}
59+
60+
NSNumber *httpsEnable = proxySettings[@"HTTPSEnable"];
61+
if ([httpsEnable intValue] == 1 && [destinationUrl hasPrefix:@"https"]) {
62+
NSString *host = proxySettings[@"HTTPSProxy"];
63+
NSNumber *port = proxySettings[@"HTTPSPort"];
64+
if (host && port) {
65+
return [NSString stringWithFormat:@"https://%@:%@", host, port];
66+
}
67+
}
68+
69+
NSNumber *httpEnable = proxySettings[@"HTTPEnable"];
70+
if ([httpEnable intValue] == 1) {
71+
NSString *host = proxySettings[@"HTTPProxy"];
72+
NSNumber *port = proxySettings[@"HTTPPort"];
73+
if (host && port) {
74+
return [NSString stringWithFormat:@"http://%@:%@", host, port];
75+
}
76+
}
77+
78+
return @"";
79+
}
80+
81+
@end

Assets/AltTester/Runtime/AltDriver/Proxy/Plugins/iOS/AltProxyFinder/Source/AltProxyFinderBridge.mm.meta renamed to Assets/AltTester/Runtime/AltDriver/Proxy/Plugins/iOS/AltProxyFinder/Source/AltProxyFinder.mm.meta

File renamed without changes.

Assets/AltTester/Runtime/AltDriver/Proxy/Plugins/iOS/AltProxyFinder/Source/AltProxyFinder.swift

Lines changed: 0 additions & 84 deletions
This file was deleted.

Assets/AltTester/Runtime/AltDriver/Proxy/Plugins/iOS/AltProxyFinder/Source/AltProxyFinder.swift.meta

Lines changed: 0 additions & 37 deletions
This file was deleted.

Assets/AltTester/Runtime/AltDriver/Proxy/Plugins/iOS/AltProxyFinder/Source/AltProxyFinderBridge.mm

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
#import <UnityFramework/UnityFramework-Swift.h>
1+
#import <UnityFramework/UnityFramework.h>
2+
#import "AltProxyFinder.h"
23

34
extern "C"
45
{
@@ -15,7 +16,7 @@
1516

1617
char* _getProxy(const char* uri, const char* host)
1718
{
18-
NSString *returnString = [[AltProxyFinder shared] swiftGetProxy:[NSString stringWithUTF8String:uri] destinationHost:[NSString stringWithUTF8String:host]];
19+
NSString *returnString = [[AltProxyFinder shared] getProxyForDestinationUrl:[NSString stringWithUTF8String:uri] destinationHost:[NSString stringWithUTF8String:host]];
1920
return cStringCopy([returnString UTF8String]);
2021
}
2122
}

0 commit comments

Comments
 (0)