컴파일 때 trigraph 에 대한 경고문

오랜만에 멀티플랫폼 빌드에서 특이한 경고를 보았다.
 
sprintf(s, "%s:?-??(??)", mi.pattern.c_str());

위의 코드가 문제의 코드인데, 다음과 같은 경고가 나왔다.
 
warning: trigraph converted to '[' character [-Wtrigraphs]
sprintf(s, "%s:?-??(??)", mi.pattern.c_str());
                 ^
warning: trigraph converted to ']' character [-Wtrigraphs]
sprintf(s, "%s:?-??(??)", mi.pattern.c_str());
                    ^
 
최근에는 거의 생각치도 않던 spec인 trigraph가 여기에 적용된 것인데,
예상을 못했던 것은 따옴표 안의 문장에서도 trigraph가 적용된다는 것이었다.
 
??( 는 [ 로, ??) 는 ] 로 변환이 되니, 문제의 
"%s:?-??(??)"
"%s:?-[]" 가 된다.

Posted by 안영기

2019/05/14 23:24 2019/05/14 23:24
Response
0 Trackbacks , 0 Comments
RSS :
http://smgal.ismine.net/tc_191/blog1/rss/response/52

Trackback URL : 이 글에는 트랙백을 보낼 수 없습니다

비교적 최근부터, 개인적으로 만든 API server를 돌리면서 자체 app이나 자체 웹 페이지에서 그 기능을 이용하도록 하는 개인 프로젝트를 하고 있었다.

API server를 이용하는 app 중에는 Unity로 만든 것도 2개가 있었는데, 며칠 전에 그 중 하나의 GUI를 업데이트 하는 작업을 하였다. Unity의 테스트는 Windows에서 하기 때문에 개발 시의 테스트는 아무런 문제가 없이 잘 진행되었다. 그리고 최종 타겟 디바이스는 Android이기 때문에 마지막으로 디바이스에서 테스트만 하면 업데이트 테스트는 끝나는 상황이었다.

그런데, 그 중에 일부 기능이 타겟 동작을 하지 않았다.

<상황>
1. Windows에서는 잘 되던 app이 Android 디바이스에서는 제대로 동작하지 않았다.
2. 문제의 부분은 API server를 이용하는 부분이었다.
3. Server 쪽의 로그를 보면 app으로부터 아예 요청이 가지 않았다.
4. Unity 쪽에서 원인을 좁혀가니 www.error 가 "Unknown Error"가 발생하는 문제였다.
5. 네트워크와 관련된 부분은 이번에 code를 손댄 적이 없다.
6. 같은 API 서비스를 이용하는 또 다른 app은 문제없이 구동되고 있다.

흔한 오류 패턴은 아니었기 때문에 제일 먼저는 나의 실수인지를 체크했다.
잘 동작하고 있는 또 다른 app의 네트워크 부분과 diff 툴로 확인을 했지만 문제는 찾을 수가 없었다.

따로 방법이 없다보니 adb의 로그를 봐야 했다.

adb logcat -s Unity ActivityManager PackageManager dalvikvm DEBUG

그리고 유의미해 보이는 로그를 찾았다.

05-12 10:19:12.331 19641 19670 E Unity   : java.io.IOException: Cleartext HTTP traffic to api.******.net not permitted
05-12 10:19:12.344 19641 19657 I Unity   : ERROR: Unknown Error
 
저 'Cleartext HTTP traffic'라는 것이 생소해서 검색을 했더니, '안드로이드 9.0 파이(API level 28)'부터는 TLS 기반의 통신이 아니면 이 에러를 낸다고 한다.

https://android-developers.googleblog.com/2018/04/protecting-users-with-tls-by-default-in.html

즉, HTTP를 HTTPS로 바꾸어야 한다는 것인데, 그렇다고 당장에 server를 HTTPS로 바꾸는 것은 무리이다. 그리고 애시당초 내 쪽에서는 code를 손 댄 적이 없는데 발생하는 것이라서 더 원인을 알아 내야만 했다.

일단 1차적인 원인을 제거하기 위해서 Unity - Project Setting - Player 쪽으로 가서 Android의 빌드 버전을 바꾸기로 했는데 거기서 문제의 원인을 찾았다.
Android의 SDK가 다른 PC와의 작업을 위해서 Target API Level을 Automatic(highest installed) 로 했는데 그것이 문제였다.

최근에, Unity의 개발과는 별도로 또 다른 Android project를 위해 Android Studio를 업그레이드 하고 SDK도 가장 최신인 Pie를 추가로 설치했는데 이것이 문제의 발단이다.
원래는 제일 높은 버전이 27이었지만, 이 작업으로 인해 제일 높은 버전이 28로 바뀌게 되었고, Unity의 app을 Android용으로 재빌드를 하는 순간 API level 28이 적용되어 버린 것이었다.
 
사용자 삽입 이미지
결국 가장 빠른 문제 해결인 다음의 방법으로 해결하였다.
 
사용자 삽입 이미지

Posted by 안영기

2019/05/12 12:12 2019/05/12 12:12
Response
0 Trackbacks , 0 Comments
RSS :
http://smgal.ismine.net/tc_191/blog1/rss/response/51

Trackback URL : 이 글에는 트랙백을 보낼 수 없습니다


블로그 이미지

게임 개발을 기반으로 한, 잡다한 개발 기록 저장소

- 안영기

Notices

Archives

Authors

  1. 안영기

Recent Comments

Recent Trackbacks

Calendar

«   2019/05   »
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  

Site Stats

Total hits:
251865
Today:
17
Yesterday:
11