2016년 9월 26일 월요일

UINavigationbar 1px bottom line 제거 하기

http://stackoverflow.com/questions/19226965/how-to-hide-ios7-uinavigationbar-1px-bottom-line

네비게이션 바를 추가 하면 위와 같이 네비게이션바의 색상과 view의 색상이 일치 할때도 
1px  라인이 하나 있다.

이것을 제거 하려면 어떻게 해야 하는가?


stackoverflow에 아름다운 방법이 있었다.

저 밑줄의 view를 찾아 내서 hidden 시켜 버리는 것이다.

private var shadowImageView: UIImageView?
    override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)
        
        if shadowImageView == nil {
            shadowImageView = findShadowImage(under: navigationController!.navigationBar)
        }
        shadowImageView?.hidden = true
    }
    
    override func viewWillDisappear(animated: Bool) {
        super.viewWillDisappear(animated)
        
        shadowImageView?.hidden = false
    }
    
    private func findShadowImage(under view: UIView) -> UIImageView? {
        if view is UIImageView && view.bounds.size.height <= 1 {
            return (view as! UIImageView)
        }
        
        for subview in view.subviews {
            if let imageView = findShadowImage(under: subview) {
                return imageView
            }
        }
        return nil
    }


UIImage 이면서 height 가 1인 view를 찾아서 그것을  viewWillAppear() 메서드에서 hidden을 시키는... UIImage height가 1인 디자인을 추가 하지 않는한 정상적으로 동작 한다.


2016년 9월 19일 월요일

XCode 이전 버젼 다운 받기

https://developer.apple.com/download/more/



다행이도 7.3.1 을 받을 수 있다.


Xcode 7.3.1.dmg

XCode 8로 업그레이드 했다가 다른 라이브러리들이 지원을 하지 못하는 경우 어쩌나!

돌아 갈 수 있다.

2016년 9월 17일 토요일

XCode 8 , swift 2.3, 3.0 코드 컨버트

9월 14일 XCode 8이 출시 하였다.

업그레이드를 해야 하나 ....

이전에 swift2.0 2.1, 2.2등에 마이너 업그레이드 시에 자동으로 소스 코드를 변환 시켜줘서 문제 없이 동작 하기에 감행한 적은 있었다.

XCode 8은 swift 2.3과 3을 동시에 지원 하며 변환도 선택적으로 가능 한 듯 하다.
swift는 아직도 진화 중이다.



Convert 버튼을 누르면 다음과 같은 화면이 나타난다.



일단 디폴트는 3.0이지만 2.3을 선택 해보았다.



프로젝트에서 이용하는 다른 프레임워크도 변환 하는 체크가 있다.


생각 보다 적은 수의 파일이 변환해야 한다는 프리뷰 화면이 뜬다.
대부분 옵셔널 (!) 을 추가 해주는 변환이 많더라

swift 2.2 상태로 그대로 빌드 하면 어떻게 되나 해보았다.
XCode 8로 업그레이드 했지만 이전 코드를 그대로 빌드 할 수 있다면
구지 변환 하지 않고 그냥 그대로 고고 하고 싶다.



역시나 swiftJSON, Alamofire 등 다른 프레임워크에 문제가 있다.


swift 3.0으로 변환 하니 와우! 엄청나게 많은 파일을 수정 해야 한다는 preview...


신규 프로젝트는 3.0으로 가야 겟지만...
나머지는 그냥 2.3으로 가자 ㅠ.ㅠ








android - retrofit + gson 삽질기

아이폰에서 RESTfull API를 통한 서버 통신 앱을 만든다고 한다면
Alamofire + swiftyJSON 을 이용하면 간단하게 REST API 통신을 하고 JSON 파싱을 통해 데이터를 이용 할 수 있다.

안드로이드에서 같은 기능을 수행하는 라이브러리는 retrofit과 gson 조합이다.
retrofit + gson


https://github.com/square/retrofit
공식 github 사이트

여기에 보면 github 서비스 예제가 있다.
테스트해보면 잘된다.

하지만 나 처럼 안드로이드 개발 초보 입장에서 삽질은 여럿 도사리고 있었다.

삽질 항목을 나열 한다.

retrofit 2 버젼 기준으로. 이전 버젼은 사용해보지 못했으니 모른다.

1. interface에서 부분 URL이 되는 곳에서 백슬레쉬 /으로 시작 되면 안된다.

public interface Login {
    @GET("Login")
....


여기서 /Login 안된다

baseURL에서 포트 번호가 문제인지. 한참을 고생 했다. 결국 baseURL 쪽에 /로 끝내고
인터페이스 쪽에서는 /로 시작 하지 않게 하니 되더라

다른 인터넷 예제를 보면 그렇게 하지 않아도 되는 코드 들이 잇는 것으로 보아 정확한 문제를 모르겠다. 하지만 2.1.0에서 분명 문제가 발생 한다.


2. github 예제 처럼 @Path 만 있는게 아니다.
https://futurestud.io/tutorials/retrofit-multiple-query-parameters-of-same-name
여기를 참고 하면 파라메터 전달에 대해 @Query()를 쓰는게 참고가 되더라


이렇게 두어가지 문제로 삽질좀 하고 나니 나름 편하게 사용할 수있는 라이브러리 같다.



2016년 8월 4일 목요일

AWS free tier 사용기 - 예상하지 못했던 과금

AWS 에 가입하고 무료로 제공 하는  EC는 tmicro 이다.
기본 저장 볼륨은 30GB 이지만

M$ Windows SERVER가 설치 되어 있는 이 서버는  가용 용량이 턱없이 부족하다.

여기서 첫번째 실수를 했다.

어디선가 웹에서 AWS에 볼륨 사이즈를 늘리는 것을 보고 볼륨 사이즈를 늘렸다.

무료 사용자라는걸 잠시 잊었다.

거기에 지금까지 설정한 세팅이 아쉬워서 EBS 볼륨 스냅샷까지 만들었다.

추가 볼륨을 만들고 스냅샷으로 볼륩을 복원해서 큰 용량의 서버를 구축 했다.

뒤늦게 과금 문제가 생각 나서 무료에 대한 정보를 읽어 보았다.
30GB만 무료인것이다.

다시 30GB로 용량을 돌려 놓고 꾸역 꾸역 적은 공간에 디스크 압축 설정 까지 해가면서
무료로 설정 하였다.

아뿔싸

잊은게 잇었다.
스냅샷!

결국 새벽4시에 문자를 받았다.
US$ 2.63 미국 Amazon w 승인

그렇다 스냅샷 조차 허용되지 않는다. 1GB가 무료?
스냅샷은 1GB만 무료인것이다.

스냅샷도 시원하게 delete 시켰다.

2016년 8월 3일 수요일

mac용 chm 앱 ReadCHM

갑자기 CHM 파일이 Windows 10 / Windows Server 2012 R2에서 내용을 볼수가 없다.


갑자기 가 아니라 이미 오래전 부 터 열리지 않고 있었는지 모른다.
좀 낡은 chm 파일을 봐야 하는데 정말 답답하게 되었다.


파일은 열리지만 내용이 하나도 안보 이는 현상이다.


아마존에 Windows SERVER나 페러럴에 Windows 10이나 모두 같은 현상인 걸로 봐서
최신 MS 윈도우에 HTML처리 방식에서 더 이상 지원하지 않는것인지 M$ windows 컴맹인 나로서는 어떻게 해결할 방법이 없다.

그래서 맥용 CHM 파일을 볼수 잇는 앱을 찾아 나섰다.

여러 앱을 설치 했지만 한글 인코딩을 지원하지 않는다.
모두 그러한 기능이 없다.




단 하나의 앱을 제외 하고 무료로 한글 인코딩이 지원되는 앱은 ReadCHM 오직 하나 였다.







이 훌륭한 무료 앱은 PDF컨버팅 까지 지원하지만 유료 버젼으로 업그레이드 하지 않으면 PDF로 변환은 되지만 워터마크가 새겨진 PDF파일이 생성된다.

하지만 뭐 이 정도만이라도 허접한 윈도우 도움말 보기보단 훨 좋다.




2016년 7월 31일 일요일

TMap API로 예상 소요시간을 구하려면?

애플지도, 구글지도 등등 여러 다른  지도에서도 경로 탐색이 가능 하고
자동차, 자전거, 도보에 따른 예상 시간을 구할 수 있을 것이다.

하지만 꼭집어서 TMap API로 해주세요. 이런 경우 삽질이 불가피 했다.

TMapOpenAPI PDF 문서를 보면 다음과 같이 되어 있다.

4.9.15. (NSDictionary*) findTimeMachineCarPathWithStartPoint: (TMapPoint*)startPoint
타임머신 자동차 길안내로 출발 혹은 도착시간을 예측한 자동차 길 안내정보를 제공한다. 반환된 정보는 NSDictionary 안에 포함이 되어 있고, 자세한 내용은 skpPlanetx.com 의 경로안내를 참조하면 된다. 주소는 https://developers.skplanetx.com/apidoc/kor/t-map/course-guide/geojson/ 이다.


Parameters
- (TMapPoint*) startPoint : 출발지점
Return
- https://developers.skplanetx.com/apidoc/kor/t-map/course-guide/geojson/ 참조
Example


당연히 네비게이션을 만들수 있는 TMap API를가지고 경로 안내는 물론 예상 도착 시간을 구할 수 있어야 하는데
설명이 너무 부족 하다.

https://developers.skplanetx.com/apidoc/kor/t-map/course-guide/geojson/
여기 사이트를 참조 하라?
응답 값으로 geoJSON이란 형태로 주어진 위치에 대한 경로 정보가 리턴 된다고 한다.

type
features --- type
geometry
properties -- totalTime

findTimeMachineCarPathWithStartPoint 메서드에 응답 NSDictionary도 이와 같다는 의미로 해석 하면 될 듯 하다.

결국 내가 구하고자 하는 것은 예상 소요시간이므로

let path = TMapPathData()

let startPoint = TMapPoint(lon: start_lon, lat: start_lat)
let endPoint = TMapPoint(lon: end_lon, lat: end_lat)

let date = NSDate()

var dict = path.findTimeMachineCarPathWithStartPoint(startPoint , endPoint: endPoint, isStartTime: true, time: date, wayPoints: nil)

let totalTime = (dict["features"]! as! NSArray)[0]["properties"]!!["totalTime"] as! Double


features의 NSArray중 첫번째에서 properties,그 하위 totalTime을 Double로 변환 시키면 totalTime을 구할 수 있다.