ios 뽀개기180 ios push 갱신 https://captainwonjong.github.io/2018-10-22/APNS-%EC%9D%B8%EC%A6%9D%EC%84%9C-%EB%B0%9C%EA%B8%89,-%EA%B0%B1%EC%8B%A0/ http://throughkim.kr/2016/12/27/ios-notification/ http://devstory.ibksplatform.com/2017/09/ios-3-apn.html https://nicgoon.tistory.com/203 2020. 4. 14. 표준입출력& 배열 #include //4.문자열을 입력 받을 때 키 입력 횟수 제한하기 int GetMyString(char buffer[] , int limit){ int i; for (i = 0; i 0 && num 2019. 11. 29. 반복문 실습 - 별그리기 //문자를 한번에 한개씩만 출력해서 삼각형만들기 /* * ** *** **** ***** */ //출력문을 이용해서 printf("*\n"); printf("**\n"); printf("***\n"); printf("****\n"); printf("*****\n"); printf("\n"); //반복문을 이용해서 char star = '*'; for (char i = 1; i 1; i--) { //공백.. 2019. 11. 19. 비트연산 #include //3단계 변수의 특정 비트를 0으로 만드는 예제 //dest_data 변수의 bit_num 번째 있는 비트를 0으로 설정하는 함수로 해당 비트가 0으로 설정된 값을 반환한다. unsigned char ResetBit (unsigned char dest_data , unsigned char bit_num){ //1바이트 변수라서 비트 이동은 0~7 까지 가능함 if (bit_num > 2; /* 이동후 : 0000 0110*/ printf("%d \n" , r_data); //6 (26에 2의 2승을 나눈것과 같다.) //변수에 부호가 있는경우 : 부호비트가 1이면 이동한 빈 공간에 1로 채우고, 부호비트가 0이면 이동한 공간에 0으로 채운다. char my_data = 0x85; my_.. 2019. 11. 18. 자료형 int main(int argc, const char * argv[]) { //정수를 표현하는 자료형 세가지 : 1바이트 , 2바이트 4바이트 /*부호가 있는 1바이트 저장공간 -128 - 127 저장가능 */ signed char temperature; // 오류 : Implicit conversion from 'int' to 'signed char' changes value from -129 to 127 //temperature = -129; temperature = -2; printf("%d \n", temperature); /* 부호가 없는 1바이트 저장공간 0 ~ 255 저장가능 */ unsigned char age; age = 255; printf("%d \n" ,age); /* 부호가 있는 .. 2019. 11. 18. NSNotification 예제 (자식창 닫을때 부모창도 같이 닫기) NSNotification 예제 최상위뷰가 있다. 최상위 뷰에서 부모뷰를 띄웠다. 부모뷰에서 자식 뷰를 띄웠다. 이때, 자식뷰를 닫을때 부모뷰까지 같이 닫아 줘야하는 요구사항이 있다. 이럴때는 NSNotification 을 사용한다. 먼저 부모뷰에 NSNotification 설정과 콜백메소드(편의상 이렇게 부르겠다)를 작성해준다. viewdidload{ //노티피케이션 등록 - 자식창을 닫을때 이곳(부모)도 닫히게 노티 등록 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(closeViewControllerBySelf:) name:@"close" object:nil]; } 이렇게 셋팅을 해주고 호출될 메소드를 작성해준다... 2019. 10. 24. NSTimer & label 속성 (가운데, 줄간격, 위치고정 등) 30초 카운트 다운 타이머 만들기 (countdownlabel 객체는 storybord에 미리 만들어 놓는다.) #import @interface SosRequestViewController : UIViewController //타이머 객체 @property(strong,nonatomic) NSTimer *CountDownTimer; @property (nonatomic, assign) NSInteger second; @end .m //타이머 시작! -(void)startTimer{ //폰트를 넣어줘야, lable 위치가 흔들리지 않는다. UIFont *myfont = [UIFont monospacedDigitSystemFontOfSize:_countDownLabel.font.pointSize weigh.. 2019. 10. 24. 단순 팝업 메시지 //단순 메시지 전달해서 팝업 띄우기 메소드 - (void)popUpWithMessage:(NSString *)message { UIAlertController * alert= [UIAlertController alertControllerWithTitle:@"알림" message:message preferredStyle:UIAlertControllerStyleAlert]; UIAlertAction* ok = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) { [alert dismissViewControllerAnimated:YES completion:nil]; }]; [.. 2019. 10. 24. ios 인디케이터 .h //인디케이터 객체 선언 @property (nonatomic, retain) UIActivityIndicatorView *activityIndicator; .m //인디케이터 시작 -(void)startIndicater{ NSLog(@"인디케이터 시작"); // ProgressBar Setting _activityIndicator = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(0, 0, 32, 32)]; [_activityIndicator setCenter:self.view.center]; [_activityIndicator setColor:UIColor.whiteColor]; if (@available(iOS 13.0, *)) { [_.. 2019. 10. 24. ios 디바이스 사이즈 구하기 & xib 파일 이름으로 뷰 띄우기 //디바이스 사이즈 구하기 CGRect screenRect=[[UIScreen mainScreen]bounds]; CGFloat deviceWidth=screenRect.size.width; CGFloat deviceHeight=screenRect.size.height; //xib 파일 이름으로 뷰컨트롤러 객체 생성 _cancelViewController=[[CancelViewController alloc]initWithNibName:@"CancelViewController" bundle:nil]; //상단에 얻은 디바이스 크기로 뷰를 호출하기전에 리사이즈 합니다. [_cancelViewController.view setFrame:CGRectMake(0, 0, deviceWidth, deviceHeigh.. 2019. 10. 24. viewDidLoad 에서 alert 띄울때 발생하는 오류 viewDidLoad 에서 alertViewController를 띄우면 계층구조 오류 메시지를 던지고 alert가 뜨지 않는다. 처음에는, 뷰가 로드 되었는데 왜 안떠? 라고 생각하고 구글에서 삽질을 좀 했다. 알고봤더니 뷰가 로드는 되었지만 나타나지는 않았기 때문에 viewDidLoad에서 alert 를 띄우면 alert를 띄울수 있는 부모 viewcontroller가 없다고 난 에러였다. 그래서 viewController에서 alert를 띄울려면 viewDidLoad 말고viewDidAppear 이나 다른 메소드를 만들어서 alert를 띄어줘야 한다. 2019. 10. 23. 문자 타입의 바이트를 NSData타입으로 변환 문자 타입의 바이트를 NSData타입으로 변환 #import NS_ASSUME_NONNULL_BEGIN @interface Util : NSObject // 문자 타입의 바이트를 NSData타입으로 변환 +(NSMutableData *)convertStringToNSData:(NSString *) bytesString; @end NS_ASSUME_NONNULL_END #import "Util.h" @implementation Util // 문자 타입의 바이트를 NSData타입으로 변환 +(NSMutableData *)convertStringToNSData:(NSString *) bytesString{ //넘어온 문자형식의 byte NSString *signNum = bytesString; signNum .. 2019. 10. 22. CALayer 관련 참고 페이지 //쿼츠코어를 임포트해야 CALayer 와 CoreAnimation을 사용할 수 있다. #import #import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. // #.정의 : CALayer는 스크린에 시각적 큰텐츠를 그리는 사각형의 class 이다. //self.view 는 viewcontroller 의 view 이다 . 이를통해 컨트롤러의 view 에 접근할 수 있다. //여기서 자동생성된 layer는 calayer이다. //배경.. 2019. 10. 18. ios 로컬 음악파일 간단하게 재생하기 .h 파일 #import //사운드를 재생할 오디오 플레이어객체 , @property (nonatomic,strong)AVAudioPlayer *player; .m 파일 /* 로컬에 sound 파일 재생하기 위한 경로를 가져온다. 경로를 url 타입으로 변환 - > avaudioplayer로 재생. */ NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:@"sos" ofType:@"wav"]; NSURL *soundFileURL = [NSURL fileURLWithPath:soundFilePath]; NSLog(@"soundFileURL : %@" , soundFileURL); NSError *error; self.player = [[AV.. 2019. 10. 18. objective c 블루투스 corebluetooth objective c 블루투스 corebluetooth #import "SosRequestViewController.h" #import //코어 블루투스 라이브러리 추가한것 임포트 한다. #import //센트럴의 이벤트를 수행할 수 있도록, 델리게이트 구현 @interface ViewController : UIViewController @property (strong, nonatomic) CBCentralManager *centralManager; //센트럴 역할을 수행해줄 객체 @property (strong, nonatomic) CBPeripheral *safetyPeripheral; //주변기기 객체 @property (strong, nonatomic) CBCharacteristic *charac.. 2019. 10. 18. protocol 개념 - 1 objective c 에서 프로토콜이라는 문법이 있다. 프로토콜은 약속,규칙이라는 뜻이다. 예를들어, Car Class 에 '작동' 이라는 프로토콜(약속)이 존재 한다면, 이 약속을 airplain, bike 등 여러 클래스에서 가져다가 사용할 수 있다. 조금 어렵게 말하면 프로토콜은 인터페이스(선언부) 이고, delegate 는 인터페이스를 구현하는 객체이다. 그럼 프로토콜을 쓰면 좋은점은 무엇일까? 바로 객체간 종속성이 줄어든다! //프로토콜 선언! @protocol ProtocolName @optional //구현해도 되고 안해도 되는 메소드 @required //필수적으로 구현해야 하는 메소드 @end //프로토콜 구현! @interface ClassName : 부모클래스 or @interface.. 2019. 10. 9. c언어 기초4 #include #include //문자열 길이를 구하는 strlen 함수를 사용하기 위해서 #include // atoi 함수를 사용하기 위해 int main(int argc, const char * argv[]) { //배열포인터 //data 배열은 1 - 5 까지의 값을 저장하고 있다. char data[5] = {1,2,3,4,5}; //합산에 사용할 result 변수는 0으로 초기화 한다. int result = 0, i; char *p = data; // data배열의 시작위치를 포인터 변수 p에 저장한다. //5번 반복하면서 포인터 p를 사용하여 배열의 각 항목을 result 변수에 합산 for (i = 0; i data[1] -> ... } //합산한 결과를 출력한다. printf("dat.. 2019. 5. 22. c언어 기초 3 #include #include //문자열 길이를 구하는 strlen 함수를 사용하기 위해서 #include // atoi 함수를 사용하기 위해 //14 - 10 문자를 정수로 변환 int ArrayToInteger(char string[]){ int count = 0, num = 0; //문자열이 끝날때 까지 반복 while (string[count] != 0) { //반복할 때마다 이전 값에 10을 곱해서 자릿수를 증가시킴 num = num * 10 + string[count] - '0'; count++; } return num; } /* buffer : 사용자가 입력한 문자열을 저장할 배열 limit : 최대 입력 가능한 문자개수 1반환 : 정상입력 0반환 : 제한된 개수만 받았다 */ int Ge.. 2019. 5. 21. c언어 기초2 #include #include int result; //전역변수, 특별한 초기화 값이 없으면 0으로 초기화됨 //배열 길이 구하기- 5 //매개변수 data의 [ ] 의 숫자는 적지 않아도 된다. 전달되는 배열의 크기에 영향을 받기 때문에 어떤 숫자를 적어도 무방하다. int GetStringLength(char datas[]){ int count = 0; /* 0이 나올 때까지 문자의 개수를 더한다 */ while (datas[count]) { printf("배열안의 글자는 : %c \n" , datas[count]); /* 배열안의 글자는 : h 배열안의 글자는 : a 배열안의 글자는 : p 배열안의 글자는 : p 배열안의 글자는 : y */ count++; } return count; } //st.. 2019. 5. 17. c언어 기초1 #include //더하기 함수 int Sum(int value1, int value2){ int result = value1 + value2; return result; } int main(int argc, const char * argv[]) { //step 6 자료형 - int day; //int형 변수 선언 day = 17; //int형 변수에 값 대입 printf("오늘은 몇일 ? : %d 일 \n" , day ); //출력 : 오늘은 몇일 ? : 17 일 int sumResult; sumResult = Sum(5, 6); printf("두 수를 더한 값 : %d \n" , sumResult); //출력 : 두 수를 더한 값 : 11 //문자 더하기 putchar('m'); putchar('y'.. 2019. 5. 16. AVCaptureVideoDataOutput을 이용해서 카메라 만들기 3 - 녹화 AVCaptureVideoDataOutput을 이용해서 카메라 만들기 3 - 녹화 로직 작성 순서는 아래와 같다 //녹화 step1 //IDCaptureSessionPipelineViewController클래스 - 녹화,정지 토글 버튼 기능 - (IBAction)toggleRecording:(id)sender { NSLog(@"IDCaptureSessionPipelineViewController - toggleRecording 버튼"); if (_recording) { [_captureSessionCoordinator stopRecording]; } else { //잠자기 모드 비활성화 [UIApplication sharedApplication].idleTimerDisabled = YES; //아직 세션.. 2019. 4. 17. AVCaptureVideoDataOutput을 이용해서 카메라 만들기 2 - 녹화 AVCaptureVideoDataOutput을 이용해서 카메라 만들기 2 - 녹화 #.지난번 포스팅에 이어서 '녹화' 버튼을 클릭했을때 작동되는 로직 순서를 알아보자. 1.녹화버튼을 클릭 하면 IDCaptureSessionPipelineViewController클래스의 toggleRecording 메소드가 작동된다. 2.IDCaptureSessionAssetWriterCoordinator 클래스의 startRecording 진입해서 레코딩 상태변화를 시키기위해 transitionToRecordingStatus 메소드를 호출한다. // oldStatus : 0, newStatus: 1 3.IDCaptureSessionAssetWriterCoordinator 클래스의 startRecording 에서 계속해서.. 2019. 4. 17. AVCaptureVideoDataOutput을 이용해서 카메라 만들기1 AVCaptureVideoDataOutput을 이용해서 카메라 만들기1 iOS 비디오 녹화 어플을 만들다가 생각지도 못한 난관에 봉착했다. 비디오를 녹화하는 도중에 녹화한 데이터크기를 실시간으로 체크하는 기능을 추가해야하는 상황이 발생했다. 젠장… AVCaptureMovieFileOutput을 이용해서 비디오를 커스터마이징 하고 있었는데, AVCaptureMovieFileOutput으로는 실시간으로 데이터를 체크가 불가능했다. 대신, AVCaptureVideoDataOutput 과 AVAssetWriter를 이용해야지 데이터 체크가 가능했다. 그리고 AVCaptureVideoDataOutputSampleBufferDelegate, AVCaptureAudioDataOutputSampleBufferDeleg.. 2019. 4. 16. Ios autoLayout 기초 Ios autoLayout 기초 예제소스 #import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; //크기 고정 뷰 - 화면 정중앙에 배치될 정사각형의 뷰 만들기 UIView *oneView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)]; oneView.translatesAutoresizingMaskIntoConstraints = NO; //필수! [oneView setBackgroundColor:[UIColor brownColor]]; [self.view add.. 2019. 4. 5. ios 화면보호기 & 터치 감지하기 ios 화면보호기 & 터치 감지하기 목표 iOS UIWindow에서 터치를 감지한 후 일정시간 터치가 없으면 화면보호기 viewcontroller 띄워주는 기능 구현 순서 *공통상수클래스 제작- CommonValues 설명: 화면보호기 시간을 설정해준다. #import @interface CommonValues : NSObject @property(nonatomic,assign) int SAVER_TIME; //화면보호기 시간 @end #import "CommonValues.h" @implementation CommonValues @synthesize SAVER_TIME; - (instancetype)init { self = [super init]; if (self) { SAVER_TIME = 3; //.. 2019. 4. 5. 날짜를 이용해서 파일 삭제하기 날짜를 이용해서 파일 삭제하기 날짜를 이용해서 30일이 지난 폴더 또는 파일을 삭제하는 기능을 구현해 보자. 먼저, 다큐먼트 폴더 안에 video, photo, audio 폴더가 각각있다고 가정하자. 위의 미디어 폴더 아래는 20190401, 20190402 와 같이 폴더 or 파일이름이 생성한 날짜인 파일들이 존재할 것이다. 참고로 다큐먼트 폴더는 사용자가 접근할 수 있는 최상위 폴더이다. 다큐먼트 이외의 폴더로는 애플 정책상(보안문제)접근이 어렵다. 필요한 데이터는 아래와 같다. 1.오늘날짜를 초를 변환한 값. 2.파일을 생성한 날짜를 초로 변환한 값 3.생성한 날짜에 30일(초값)을 더한 값. - 삭제예정일 (생성한 날짜를 초로 변환하고 30일을 초로 변환해서 계산 후 리턴 한다.) 위의 데이터를 .. 2019. 4. 3. 날짜계산(특정시간 이후 날짜 구하기) 날짜계산(특정시간 이후 날짜 구하기) 날짜와 시간을 위한 프로그래밍을 위해서는 기본적으로 NSDate를 사용한다. NSDate는 2001년 1월 1일 자정을 기준으로 현재시간(특정)까지의 경과한 시간(초)을 저장하고 있는 객체이다. 두 시점의 과거 , 미래 시간을 비교하는 작업은 가능하나, 구체적인 날짜나 요일을 구하기는 어렵다. (예 3월1일은 무슨요일인가 ?등) 날짜를 자유자재로 다룰려면 NSCalendar와 NSDateComponents 객체에 대해서 알아야 한다. NSDateComponents는 몇 월, 몇 일 등 날짜 정보를 구성하는 달력에서 기본 단위들에 대한 정보를 얻는데 사용된다. 실제로 NSDate 객체와 NSDateComponents 객체를 NSCalendar 객체가 연결해준다. *코드.. 2019. 4. 3. uuid 구하기(ios 기기 고유번호) uuid 구하기(ios 기기 고유번호) 과거 iOS 기기의 고유 번호를 얻기 위해서 udid가 존재했었다. 하지만 개인정보 문제 등으로 ios5 부터는 udid가 사라지고 uuid(임의로 생성한 고유값)가 생겨났다. 애플도 uuid를 이용해서 기기 고유번호를 생성하라고 권고한다. 하지만 문제는 uuid도 앱을 삭제하면 새롭게 생성 된다. 즉 고유값이라고 할 수 없다. 개인정보 문제로 부터 자유로워졌긴 하지만, 개발자들이 이 고유번호를 다루기가 까다로워졌다. 여러 방법이 있겠지만 uuid를 최초로 생성하고 keychain에 저장시켜주는 방법 찾아보았다. /* File: KeychainItemWrapper.m Abstract: Objective-C wrapper for accessing a single ke.. 2019. 4. 2. 카메라 줌 AVCaptureDevice Zoom 카메라 줌 AVCaptureDevice Zoom 예전시간에 카메라 자동 회전 기능을 소개했다. https://abc1211.tistory.com/615 그곳에 카메라 줌기능을 넣기 위해서 이것저것 찾아보고 시도해보았다. 처음에는 카메라 캡쳐화면을 실시간으로 보여주는 PreviewLayer에 pinchegesture를 걸어서 제스쳐 변화 값을 이용해서 zoom해주면 된다고 생각했는데 거의 오전 내내 삽질을 했다. 결론은 previewlayer에는 gesture 를 걸 수 없다. Avcapturedevice 를 이용해야 한다. 아래는 해당 소스이다. 주석을 달아 놓았다. *제스쳐 함수 //self.view 에 pinches 제스쳐 이벤트를 걸었다. view 화면을 두 손가락으로 움직이면 AVCaptureDe.. 2019. 4. 2. core audioqueue player 에 대하여 2(추가설명) core audioqueue player 에 대하여 2(추가설명) 지난번 글에서 오디오 큐로 오디오 플레이어를 구현하는 법을 포스팅 했다. 테스트를 하면서 확인해 본결과 오디오 파일을 읽을 때 읽을 패킷 값을 UInt32 numPackets = 10*1000; 이런식으로 고정값으로 해놓으니 런타임이 긴 오디오에서는 콜백을 타지 않는 현상이 발견했다. 그래서 DeriveBufferSize 함수를 만들어서 버퍼 사이즈와 한번에 읽을 패킷 수를 유동적으로 구하기로 했다. 또 지난번에 로그를 확인하는 시간을 안가졌다. 오디오 큐가 오디오 파일을 어떻게 읽는지, 그 읽은 값은 어떻게 되는지.또 오디오 파일을 읽은 후 오디오 큐가 콜백 함수를 어떻게 호출 하는지.. 콜백 함수 내부에서는 어떤일이 일어나는지 등등 로.. 2019. 3. 29. 이전 1 2 3 4 ··· 6 다음