아이폰 앱 다운로드 링크
NSURL *appStoreURL = [NSURL URLWithString:@"itms-apps://itunes.apple.com/app/id123456789"];[[UIApplication sharedApplication]openURL:appStoreURL];
참고
http://stackoverflow.com/questions/433907/how-to-link-to-apps-on-the-app-store
아이폰 앱 다운로드 링크
NSURL *appStoreURL = [NSURL URLWithString:@"itms-apps://itunes.apple.com/app/id123456789"];[[UIApplication sharedApplication]openURL:appStoreURL];
참고
http://stackoverflow.com/questions/433907/how-to-link-to-apps-on-the-app-store
지난 WWDC에서 iOS 9가 발표되면서 apple developer 사이트에도 iOS 9 베타 버전이 공개되었는데요,
그래서인지 벌써부터 iOS 9 베타를 설치하시는 분들이 많이 계시더군요.
그런데 iOS 9로 업데이트한 후 운영 중인 앱이 사용할 수 없다는 VOC가 들어오더군요.
마침 xcode 7 베타 버전도 같이 공개되어 부랴부랴 다운로드 받아서 설치해 봤습니다.
시뮬레이터로 확인해 보니
App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file.
CFNetwork SSLHandshake failed (-9824)
NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9824)
Error Domain=NSURLErrorDomain Code=-1022 "The resource could not be loaded because the App Transport Security policy requires the use of a secure connection."
secure connection 이 필요하다는 메시지가 나오네요.
검색을 해보니 iOS 9.0 이상에서는 ATS(App Transport Security)라는 기술이 나오네요.
결론은 app - web 간 connection 에서는 secure connection 이 기본값이라는 ....
그런데 서버가 특A급은 아니다 보니.... 아무래도 SSL 암복호화 부하를 무시할 수는 없어서....
로그인이 필요 없는 일부 기능만이라도 SSL을 좀 피해보려고....
관련 내용을 찾아 봤습니다.
찾아보니 info.plist 에서 예외 처리를 할 수 있더군요.
NSAppTransportSecurity > NSAllowsArbitraryLoads : true 로 설정하면 ATS 를 비활성화 할 수 있습니다.
또는
다시 리빌드 해보니 정상적으로 사용이 가능하네요.
조금이나마 도움 되시기를....
※ 참고
https://github.com/facebook/react-native/issues/1563
본문에 NSAllowsArbitaryLoads -> NSAllowsArbitraryLoads 로 바뀌어야 할 것 같아요
복사할수 있는 텍스트가 약간 잘못되있네요
좋은 정보 감사합니다!!!!
책보고 하는데 안되길래 서치해서 보게 되었습니다.
저의 경우에 info.plist에 해당 key-value가 없어서 추가를 했습니다.
추가할 수 있다는 것도 첨 알았네요
잘 배우고 갑니다.~
API를 통해 JSON 데이터를 받아
version의 NEWIVERSION을 찾아 NSUserDefaults에 값을 저장하는 로직입니다.
NSString *ver = [[mainInfoDict objectForKey:@"version"] objectForKey:@"NEWIVERSION"]; if (ver != nil) { [[NSUserDefaults standardUserDefaults] setObject:ver forKey:@"NEWIVERSION"]; [[NSUserDefaults standardUserDefaults] synchronize]; }
그런데 API에 문제가 생겨 NEWIVERSION을 가져오지 못하게 되자
시뮬레이터에서 App이 죽는 현상이 발생하더군요.
Attempt to set a non-property-list object null as an NSUserDefaults/CFPreferences value for key NEWIVERSION
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Attempt to insert non-property list object null for key NEWIVERSION'
NEWIVERSION key를 갖는 값 자체가 존재하지 않다 보니
Null 객체 insert 오류가 생겼던 거 같습니다.
그래서 NSNull 객체 검사를 추가해 봤습니다.
NSString *ver = [[mainInfoDict objectForKey:@"version"] objectForKey:@"NEWIVERSION"]; if (ver != nil && ![ver isEqual:[NSNull null]]) { [[NSUserDefaults standardUserDefaults] setObject:ver forKey:@"NEWIVERSION"]; [[NSUserDefaults standardUserDefaults] synchronize]; }
이렇게 처리하고 나니 API에서 오류가 발생해도 App 중지 없이 실행할 수 있었습니다.
AIX 7.11 서버에서 소켓통신을 통해 데이터를 수신하는데
텍스트 내용이 잘리는 현상이 발생하였습니다.
그래서 실제 서버에서 수신되는 패킷을 확인해야만 했는데,
AIX 에서는 tcpdump 를 사용해서는 원하는 내용을 확인하기 어렵더군요.
그래서 관련 내용을 검색하다 보니
AIX 에서는 iptrace 를 사용한다는 내용을 찾았습니다.
그래서 급하게 iptrace 사용법을 찾아봤습니다.
옵션 |
설명 |
-a |
ARP 패킷은 표시하지 않음 |
-i <interface> |
패킷 모니터를 할 인터페이스 |
-s <source ip> |
패킷 출발지 IP |
-b |
bidirectional 양방향 패킷을 모두 모니터 |
-d <destination ip> |
패킷 도착지 IP |
-p <port> |
모니터할 포트 지정 |
iptrace -a -i en0 -s 123.123.123.123 -b -d 234.234.234.234 -p 8888 /home/krcash/iptrace
en0 인터페이스를 통해
IP 123.123.123.123 와 IP 234.234.234.234 가
8888 포트로 주고 받는 패킷을 모니터해서
/home/krcash/iptrace 파일로 저장
이렇게 실행하면 iptrace 프로세스의 프로세스 ID를 리턴하고
패킷을 모니터해서 저장하기 시작합니다.
저장을 마치려면 kill -15 로 프로세스를 종료합니다.
Can't turn off tracing 메시지가 떨어지지만
ps 로 확인하면 프로세스가 죽은 걸 확인할 수 있습니다.
/home/krcash 에 iptrace 라는 파일명으로 생성된 것을 볼 수 있습니다.
이 파일은 바이너리 파일이기 때문에
텍스트 형태로 변환이 필요합니다.
ipreport -ns /home/krcash/iptrace > /home/krcash/iptrace.log
/home/krcash/iptrace 를 iptrace.log 라는 텍스트 파일로 변환합니다.
이제 해당 파일을 열어보면
주고 받은 패킷의 내용을 확인할 수 있습니다.
참조
IBM Using packet trace tools iptrace, snoop, tcpdump, wireshark, andnettl
http://www-01.ibm.com/support/docview.wss?uid=swg21175744