0%

找到文件 /triplets/x64-osx.cmake
添加下面内容

1
2
3
set(VCPKG_OSX_DEPLOYMENT_TARGET 10.10)
set(VCPKG_C_FLAGS -mmacosx-version-min=10.10)
set(VCPKG_CXX_FLAGS -mmacosx-version-min=10.10)

这个设置只支持使用 cmake 编译的库。
如果要使用其他库需要目前最好的办法是下载对应的 ports。

网上内容挺多,需要注意的是库的链接问题,推荐先使用 linuxdeployqt 打包,然后再生成 deb 包。

NSURLSessionConfiguration 方式

URLSession 可以设置 configuration , NSURLSessionConfiguration 有设置代理的方法,代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
NSURLSessionConfiguration *conf = [NSURLSessionConfiguration defaultSessionConfiguration];
NSString* proxyHost = @"";
NSNumber* proxyPort = @(0);
NSString* proxyUser = @"";
NSString* proxyPwd = @"";
NSMutableDictionary *proxyDict = [NSMutableDictionary dictionary];
[proxyDict setObject:[NSNumber numberWithInt:1] forKey:(NSString *)kCFNetworkProxiesHTTPEnable];
[proxyDict setObject:proxyHost forKey:(NSString *)kCFNetworkProxiesHTTPProxy];
[proxyDict setObject:proxyPort forKey:(NSString *)kCFNetworkProxiesHTTPPort];

[proxyDict setObject:[NSNumber numberWithInt:1] forKey:(NSString *)kCFNetworkProxiesHTTPSEnable];
[proxyDict setObject:proxyHost forKey:(NSString *)kCFNetworkProxiesHTTPSProxy];
[proxyDict setObject:proxyPort forKey:(NSString *)kCFNetworkProxiesHTTPSPort];

[proxyDict setObject:proxyUser forKey:(NSString *)kCFProxyUsernameKey];
[proxyDict setObject:proxyPwd forKey:(NSString *)kCFProxyPasswordKey];
conf.connectionProxyDictionary = proxyDict;
// 需要认证的代理连接 需加上下面的请求头
NSString* proxyIDPasswd = [NSString stringWithFormat:@"%@:%@",proxyUser,proxyPwd];
NSData* proxyoriginData = [proxyIDPasswd dataUsingEncoding:NSUTF8StringEncoding];
NSString *base64EncodedCredential = [proxyoriginData base64EncodedStringWithOptions:0];
NSString *authString = [NSString stringWithFormat:@"Basic: %@", base64EncodedCredential];
conf.HTTPAdditionalHeaders = @{@"Proxy-Authorization": authString};

NSURLProtocol

推荐使用苹果官方的demo CustomHTTPProtocol

需要注意的请求的过滤条件和转发规则,具体原理后面的链接有提供。

WKWebView

由于没有用到 WKWebView ,不做过多介绍了,网上有很多教程

NetworkExtension

需要单独申请权限,并且比较重,不建议使用。不过用起来还是很爽的,多看文档。

Ubuntu 搭建代理服务器

搭建一个测试环境
主要是用的是一个 squid 服务
需要注意在设置账号密码的时候,在配置文件中一定要确认好认证账号文件的路径

测试 命令 使用curl 测试代理联通性

1
curl -x http://proxy_server:proxy_port --proxy-user username:password -L http://url

具体搭建过程,下方参考中有

参考

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
CFDictionaryRef proxies = SCDynamicStoreCopyProxies(NULL);
if (proxies) {
NSDictionary *dict = [NSDictionary dictionaryWithDictionary:(__bridge NSDictionary *)proxies];
CFNumberRef hpEnableRef = CFDictionaryGetValue(proxies, kSCPropNetProxiesHTTPEnable);
NSNumber *enable = (__bridge NSNumber *)hpEnableRef;
if (enable) {
// host
CFStringRef hpURLRef = (CFStringRef)CFDictionaryGetValue(proxies,kSCPropNetProxiesHTTPProxy);
// port
CFNumberRef hpPortRef = CFDictionaryGetValue(proxies, kSCPropNetProxiesHTTPPort);

if (hpURLRef) {
NSNumber *port = (__bridge NSNumber *)hpPortRef;
NSString *url = (__bridge NSString *)hpURLRef;
NSString *pUrl = [NSString stringWithFormat:@"http://%@:%@",url,port];
self.proxyServer = pUrl;
}
}
CFRelease(proxies);
}

参考

异步

处理异步事件 XCTestExpectation

1
2
3
4
5
6
7
8
9
10
11
12
13
14
XCTestExpectation* exception = [self expectationWithDescription:@"metadata"];

NetWrok *req = [NetWrok new] ;
[req startWithCompletionBlockWithSuccess:^(LDBaseRequest *request) {
[exception fulfill];
} failure:^(LDBaseRequest *request) {
XCTAssertNil(request.error);
[exception fulfill];
}];

[self waitForExpectationsWithTimeout:50 handler:^(NSError * _Nullable error) {
XCTAssertNil(error);
}];

参考

path/name 就是本地引入的 submodule 的路径,可以使用git submodule 来查看本地路径

依次执行以下命令,来删除本地引用的submodule

1. git submodule deinit -f -- path/name    
2. rm -rf .git/modules/path/name
3. git rm -f path/name
4. git rm --cached path/name

之前在写Qt程序的时候,如果在原文件中的字符串直接写中文,例如有些地方需要弹出错误或者警告的对话框提示,那么提示内容就是中文信息,我发现有部分字符会出现乱码,并且有时候编译的时候会报错:error C2001: 常量中有换行符这一般是编码问题

我是这么解决的,在包含中文(即使是注释中有中文有时候也报错)的源文件的开头加入 #pragma execution_character_set("utf-8") 这一行指定文件的编码,同时使用UE编辑器打开该文件,另存为UTF-8的编码,在QtCreator中重新打开即可。