본문 바로가기
300x250

전체 글244

자동 문자 입력 메세지 앱이 열리고 원하는 번호로 원하는 내용이 바로 입력되어 있는 상태 구현 1. MessageUI를 import 한다 2. 해당 ViewController에 MFMessageCompseViewControllerDelegate를 채택한다. 3. 메세지 앱으로 연결할 버튼을 하나 생성하고 4. 버튼의 액션은 @IBAction func sendMessage(_ sender: UIButton) { let messageComposer = MFMessageComposeViewController() messageComposer.messageComposeDelegate = self if MFMessageComposeViewController.canSendText(){ messageComposer.recipients.. 2022. 1. 6.
API 통신 API 통신을 할 때, HTTP body에 노출되면 안되는 정보는 haeder를 통해 전달하는 것이 좋다. (api 서버 주소나 인증키 같은) NSURL *url = @"url"; NSURLSession *session = [NSURLSession sharedSession]; NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url]; [request setHTTPMethod:@"GET"]; [request setValue:@"auth value" forHTTPHeaderField:@"Authorization"]; [request setValue:@"application/json" forHTTPHeaderField:@"Cont.. 2022. 1. 4.
Xcode 반자동 배포 - 전처리문 이용 전처리문을 사용한 초간단 Xcode 반자동 배포 #define ReleaseServer_URL "https://release.com" #define DebugServer_URL "https://debug.com" #ifdef RELEASE #define SERVER_URL ReleaseServer_URL #else #define SERVER_URL DebugServer_URL #endif 이런식으로 define 하여 API 호출 시, URL을 define 변수를 이용하면 빌드 스키마에 따라 자동으로 서버URL을 반영 시킬 수 있다. 이렇게 하면 완전 자동은 아니지만 배포 시 서버 URL을 테스트용으로 올리는 실수는 없앨 수 있다. 다른 방법도 다양하다 : https://leechanho.tistory.c.. 2021. 12. 23.
스트링 인터닝(String Interning) 문자열은 메모리 영역에 같은 상수를 참조하여 위치하게 되는데 이를 string interning 이라고 한다. 컴파일 시, 단순히 해당 문자열을 가져오는 것이 아니라 메모리에 존재하는 문자열 중 같은 문자열이 있는지 없는지 판단하여 리턴하게 된다. 같은 문자열이 있다면 그 주소값을 참조하게 되고, 같은 문자열이 없다면 새로 영역을 할당하여 그 주소값을 가져오게 된다. NSString * str1 = @"안녕"; NSString * str2 = @"안녕"; 이 경우, 둘은 같은 "안녕" 이라는 문자열이 선언되어 있으므로, 같은 주소값을 참조하게 된다. 참고: https://cornswrold.tistory.com/265 2021. 12. 15.
용어 사전 문자열 리터럴(String Literal) 큰따옴표(")에 둘러쌓인 문자의 연속체를 의미한다. 핫픽스(Hotfix) 버그의 수정이나 취약점 보완 또는 성능 향상을 위해 '긴급히' 배포되는 패치 브레이킹 체인지(Breaking Change) 호환성을 지원하지 않게 되는 변경 즉, 변화로 인해 기존의 코드가 제대로 동작하지 않거나 다시 빌드를 해야하는 경우(예, 라이브러리의 인터페이스가 바뀔 경우) 2021. 12. 15.
cornerRadius 원하는 부분에만 적용 UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:self.myview.bounds byRoundingCorners:(UIRectCornerTopLeft | UIRectCornerTopRight) cornerRadii:CGSizeMake(25.0f, 25.0f)]; CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init]; maskLayer.frame = self.myview.bounds; maskLayer.path = maskPath.CGPath; self.myview.layer.mask = maskLayer; 2021. 12. 15.
Push Notification 앱이 실행상태가 아니다 (push 수신으로 앱 실행) 실행 중에 push 수신 백그라운드 상태에서 push 수신 UIApplicationStateActive: 앱 실행 중 UIApplicationStateInactive: 앱이 실행 중이지만 이벤트가 없는 상태(중단 중이거나 백그라운드로 전환 중) UIApplicationStateBackground: 앱이 백그라운드에 있음 [[[UIApplication sharedApplication] currentUserNotificationSettings] types] != UIUserNotificationTypeNone // 결과가 true.. 2021. 12. 6.
네트워크 통신 주의점 a 테이블뷰가 있고 셀의 상세 화면이 있다 셀을 클릭하면 상세화면으로 넘어간다 상세화면의 데이터는 테이블뷰가 있는 컨트롤러에서 넘겨준다 이 데이터를 상세화면에 뿌려줄때 깔끔하게 바로 보여주려면 (빈값이나 완전히 로드되지 않은 화면이 보이지 않도록) 테이블뷰가 있는 컨트롤러에서 상세화면에 필요한 네트워크 통신을 미리 해주어야 한다. 단, 통신 전과 데이터가 달라질 가능성이 있다면 이러한 설계는 조심할것 2021. 12. 3.
_myView vs. self.myView 참고자료의 내용 일부를 정리함 self.myView는 myView라는 프로퍼티 값을 읽어온다. (=setter/getter) 변수에 접근하는 것이 아닌 변수에 대한 값을 가져오는 것 _myView는 예전 @synthesize 사용시 `@synthesize myView = _myView`라고 사용했던것 처럼 단순히 변수의 별칭으로 사용된다고 보면 된다. 즉, self.myView는 _myView라는 변수를 사용하는 것이고, self.myView를 통해 _myView에 값을 넣는 것 결론적으로 self.myView = _myView 단, ARC 미적용 프로젝트는 예외 참고>> https://wingsnote.com/31 https://stackoverflow.com/questions/10333495/diff.. 2021. 11. 17.
300x250