
App Clip 만들어보기. Human Interface Guide App Clip 이란? 경량 버전 앱. QR코드, NFC, URL로 실행 가능하다. 앱 클립은 필수 기능에 중접을 두고 단순히 광고하는 수단으로 사용되면 안된다. 앱 클립은 용량이 가벼워야한다. 앱 클립은 사용 후 계정을 만들게끔 개발해야 한다. 전체앱을 설치시 기기의 앱클립이 교체된다. 이때는 앱클립 호출시 전체앱이 실행된다. Developer Document 전체 앱에는 하나의 앱 클립을 가질수 있고 앱 클립의 기능은 전체 앱에서 완전히 지원되어야 한다. 사용자가 앱클립을 시작시 앱클립의 메타데이터와 URL을 확인하고 URL을 이용하여 앱 클립 카드 UI를 업데이트 하게 된다. 앱클립 용량은 10MB를 넘기면 안된다. 런타임시 사용할..

이번 WWDC에는 iOS 14, iPadOS 14, watchOS 7, macOS Big Sur 에 대하여 발표가 진행되었습니다. 다양한 기능들이 많이 소개되었지만, 이 문서에서는 앱 개발에 직접적인 영향이 있는 iOS에 대해서만 정리해보려 합니다. iOS 14 iOS 14는 사용자가 홈 화면을 맞춤화하고, App Clips를 통해 앱을 탐색 및 사용하며 메시지로 연결될 수 있는 새로운 방법을 도입한다. 1. 새로운 홈 스크린 위젯 https://developer.apple.com/documentation/widgetkit?changes=latest_major#topics WidgetKit는 사용자가 iOS 홈 화면 또는 MacOS Notification Center에 위젯을 배치하여 앱의 콘텐츠에 즉시..
네비게이션뷰에 rightButton을 두개 넣어야하는 상황이 생겼다..넣었더니 title이 왼쪽으로 쏠림... setFrame으로 width를 조정해주었으나변화가 없었다. 구글링을 해보니 iOS 11 부터 navigationBar가 오토레이아웃이 적용이 되면서 setFrame이 먹질 않는다고 하더라. UIControl *cus = [[UIControl alloc] initWithFrame:CGRectMake(0, 0, 22, 22)]; UIImageView *imageView; imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"edit_rbtn_ov"]]; [imageView sizeToFit]; [cus addTarget:self..
자주 쓰이는 것중 하나이다!예전같았으면 프레임으로 올리고 내렸었는데지금은 오토레이아웃의 시대쟈낭 ^ㅠ^ viewBottom은 오토레이아웃으로 잡아준 viewBottom이다. 소스코드는 저대로 쓰면 바로 됨. 그리고 iPhoneX일경우 SafeArea를 사용하지 않는다면 하단노치로 인한 여백이 생기는것 같아 분기처리를 해놨다.ㅠㅠ(뇌피셜임) //viewDidLoad // ----------------------------- // 키보드 세팅 관련. // ----------------------------- [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillS..
+(NSString *) getDeviceName{ //인스턴스 메서드 입니당 struct utsname u; uname(&u); if ( !strcmp(u.machine, "iPhone4,1") ) return @"iPhone 4S"; else if ( !srcmp(u.machine, "iPhone5,1") ) return @"iPhone 5"; else if ( !strcmp(u.machine, "iPhone5,2") ) return @"iPhone 5"; else if ( !strcmp(u.machine, "iPhone5,3") ) return @"iPhone 5c"; else if ( !strcmp(u.machine, "iPhone5,4") ) return @"iPhone 5c"; else if ..
XCode-인터페이스 빌더에 boder, corner를 추가해보자. View에 broder와 corner값을 줘야할때 소스로 구현한다면 이런 모양이 된다. 뷰가 하나여서 지금 모양새가 괜찮지만 만약 설정해야 하는 뷰가 여러개라면?소스의 반이상이 border와 corner관련 소스가 될 것이다. UI관련을 인터페이스 빌더에서 처리한다면 좋을것 같다.다음 소스를 추가하여 UIView의 기능을 확장해주자. @IBDesignable extension UIView { @IBInspectable var borderWidth: CGFloat { set { layer.borderWidth = newValue } get { return layer.borderWidth } } @IBInspectable var corner..
ObjC - Category, Swift - Extenions ObjC Category - 클레스 확장 - 어떤 클래스에 기능을 추가하는 방식.- 상속을 사용하지 않고 어떤 클레스에 메소드만을 추가하는 방식- 변수는 추가할수 없고 메소드만 추가 가능함. 기존 소스 코드에서 접근하지 못하는 타입들을 확장하는 기능. 파일명- 기존클래스 + 확장이름 Ex) NSString+NilToString 하기 부분은 NSString 타입에 새 메소드를 추가해주는 예제이다. NSString+NilToSTring.h #import @interface NSString (NilToString) - (NSString *)nilToString : (NSString *) str; @end NSString+NilToSTring.m #..
UICollectionView에서는 cell눌렀을때의 이벤트를 처리하기 위한 didSelectItemAtIndexPath가 있다.-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath 하지만 cell이 아니라! cell안에 있는 버튼을 눌렀을때에만 동작하고 싶을때가 있다 !! 구글링 했을때 제스쳐나 다른 방법들이 많았던걸로 기억하지만 내가 썼던 방법은 tag를 사용하여 데이터를 제거후 collectionView를 reload 시켜주었다.CollectionView에 있는 데이터를 삭제하기 위하여 찾았던 방법이었기 때문에 이 방법이 적합했었던것 같다. - (UICollect..
블럭문 뭔지 몰라서 못 쓰고 있다가 어느순간 필요해서 사용했을때 굉장히 편리했었다. 가장 기억에 남는경우가 통신 완료 > 값 세팅 > 세팅한 값 기반으로 트레킹 호출 이 로직이었는데 값 세팅 완료시점을 지정해주지 않아 값이 없는데 트레킹을 호출해주게되어 올바르지 않은 값으로 호출이 되었었다. 사실 값 세팅하고난뒤 세팅한값 기반으로 트레킹 호출하면 되지않을까 생각을 했는데 기존로직에 덧붙이는 부분이라 영향안가게끔 하기 위해서 블록문을 사용했었던듯... //메서드 -(void)autoLoginData:(NSData *)responseData complete:(void(^)(void))complete { //값 없을때 if(responseData==nil){ if(complete){ complete(); } ..