일단 개발중인 App 이 웹뷰 하단에 버튼이 있고, 하단에 버튼을 누를시 자바 스크트 함수를 호출해서 input box 를 띄우는 작업을 하는데, 이상하게 input box 가 화면에 보여 진 상태 인데도 키보드가 나타나질 않았다. 그래서 focus() 대신 click() 도 호출해보고 iOS 쪽에서 직접 focus 도 호출해보고 별에 별짓을 다했는데, 처음 한번 키보드가 뜨고 다음 호출부터는 키보드가 뜨지 않는 문제가 있었다. 이문제의 해결코드는 다음과 같다. 아래 코드는 한줄이라도 빠지면 동작하지 않는다. 꼭 순서를 지켜 사용하기를 바란다. 해당 해결방법이 검색을 아무리 해도 안되서 고생을 했다. 다른 사람은 고생하지 말기를.... UIApplication.shared.sendAction(#selec..
XCode 에서 Product를 상용과 개발로 분리 시킨후 기존에 바라보던 서버 주소도 각각 빌드에 맞게 자동적으로 적용 하고 싶다면 어떻게 해야할까? 간단하게 전처리 매크로를 이용해서 분리 시킬수 있다. 먼저 상용 셋팅은 별도로 건드리지 말고, 개발쪽 셋팅을 변경해 보자! 아래처럼 프로젝트 셋팅에서 1. Beta Product를 선택한 2. 상단 메뉴에 Build Settings 를 클릭 3. custom 을 검색한다. 4. Swift Compiler - Custom Flags 를 그림 1과 같이 셋팅한다. (아마 처음 Debug 는 DEBUG 로 되어 있을 건데 DEV 를 추가하고, Release 는 아무것도 없을 건데 마찬가지로 DEV 를 추가해 준다.) 5. 분기를 태우고 싶은 코드를 아래처럼 전..
iOS 배포를 위해 심사 제출을 했는데, 리젝이 되었다. 이유는 아래와 같다. Guideline 2.3.3 - Performance - Accurate Metadata We noticed that your screenshots do not sufficiently reflect your app in use. Specifically, your 6.5-inch iPhone screenshots do not display the app in the correct device frame. Next Steps To resolve this issue, please revise your screenshots to ensure that they accurately reflect the app in use on the s..
저번주 금요일부터 휴가여서 주말을 쾌적하게 보내고 출근해서 iOS App 을 업데이트 하려고 업로드 했더니 아래와 같은 메일이 날라왔다. App Store Connect Dear Developer,We identified one or more issues with a recent delivery for your app, "zxxxxx" 0.0.1 (16). Your delivery was successful, but you may wish to correct the following issues in your next delivery:ITMS-90809: Deprecated API Usage - Apple will stop accepting submissions of apps that use UIWebV..
1. 메시지 구성을 Notification에 title, body 로 구성 할 경우 해당 메시지를 다르게 변경해서 보여줄 수 없다. (OS에서 관리함) 2. Notification을 재구성해 사용자에게 보내주고 싶을 경우 payload안에 Notification을 없애고, 다른 key, value 값으로 보내고 payload를 파싱해서 Local Notification 으로 재구성 해서 보내주면 된다. 3. 하지만 2번 방법은 치명적인 단점이 있다. iOS 정책에 의해 App이 Background 로 들어간 후 메모리 부족등의 이유로 OS가 App을 메모리에서 해제 하면 Notification을 받을수 없다. 또한 사용자가 App을 Background에서 지워도 동일하게 받을수 없게된다. 4. 결론은 i..
TestFlight에 앱을 올리고 테스터들을 초대해야하는데 방법은 아래와 같다. 1. 아래 사이트에 들어간다. https://appstoreconnect.apple.com/access/users https://appstoreconnect.apple.com/login?targetUrl=%2Faccess%2Fusers&authResult=FAILED appstoreconnect.apple.com 2. + 버튼을 누른다. 3. 사용자 이름과 이메일, 역할에 맞게 체크후 초대를 누른다. 4. 초대완료후 사용자가 초대메일을 승인한뒤 5. https://appstoreconnect.apple.com/WebObjects/iTunesConnect.woa/ra/ng/app
아이폰 사파리 또는 브라우저에서 화면을 이동할때 손가락으로 Swipe를 하면서 Back 또는 forward 로 페이지 이동을 해 보았을 것이다. 해당 기능을 WKWebView 에서 이용하고 싶다면, wkWebView.allowsBackForwardNavigationGestures = true 옵션을 추가해 주면 된다. 참고 : https://stackoverflow.com/questions/32012428/swipe-gesture-for-back-forward-in-uiwebview
WKWebView 에서 구글 간편 로그인Google Sign-In을 사용하기 위해서는 UserAgent 변경을 해 주어야 한다. 모바일 환경에서는 Native Library의 API를 사용하는게 원칙 이기 때문인데 어쩔수 없이 기존 웹페이지에 포함된 구글 간편 로그인 기능을 사용하고 싶다면, 아래 처럼 WKWebView에 UserAgent를 따로 설정해 주면 된다. let userAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit/600.7.12 (KHTML, like Gecko) Version/8.0.7 Safari/600.7.12" override func loadView() { super.loadView() initWebView..
그림 1 처럼 XCode Archive 를 선택을 할수 없을때가 있는데 이때는 그림 2 에서 Device 를 실제 iPhone 으로 선택 해 주거나 Generic iOS Device 를 선택해 주면 활성화 된다.
Realm에서 데이터를 찾을때 realm.objects(Info.self).filter(age > 10) 방식으로 찾으면 실제 테이블이 아직 없거나 할경우 App 이 죽게 된다. 따라서 Object 에 PrimaryKey를 사용한다고 가정하에 아래와 같은 방법을 사용하면 옵셔널을 포함하여 안전하게 데이터를 가져올수 있다. realm.object(ofType: Info.self , forPrimaryKey: "0") 좀더 다양한 모델을 Generic 한 방법으로 여러 곳에서 공통으로 사용할 함수를 만들고 싶다면, 아래와 같이 선언하여 사용 가능하다. func getSafetyDataInRealm(_ className: T.Type, _ primaryKey: String?) -> T? { guard prim..