[Dev, flutter] 플러터로 iOS 앱 개발 시작하기 (1) - Widget
·
Dev/flutter
Swift로 네이티브 앱 개발을 주력으로 하다가 팀 프로젝트에서 하이브리드 앱을 만들 필요성이 생겨 그토록 미뤄왔던 flutter를 시작한다. 코드 위주로 작성을 하고, 필요한 개념들만 간단히 정리할 계획이다. 이미 시중에 플러터 관련 코드가 많지만, 내가 찾아보기엔 iOS cupertino design 기반의 예제 코드가 부족해 보여, 기존의 material design 코드를 iOS 느낌으로 전환하는 방식으로 작성해본다. 1. Hello Worldimport 'package:flutter/cupertino.dart';void main() { runApp( CupertinoApp( home: CupertinoPageScaffold( child: Center( ..
[Dev, Python] Firebase Realtime Database를 Python으로 다뤄보자
·
Dev/etc
서버 개발자가 아니거나, 간단한 사이드 프로젝트를 하는 입장에서 백엔드를 필요로 하는 상황이 굉장히 많이 발생한다. 이를 해결해 줄 것이 바로 Google의 Firebase인데, 지금 내가 서비스 운영 중인 명언 iOS 앱 또한 간단한 명언 데이터를 수집/제공해 줄 목적으로 Firebase의 Realtime Database 서비스를 이용 중이다. 이 앱의 Android OS는 동료 개발자가 운영하고 있는데, 현재는 서비스 앱 말고도 수집된 명언 데이터를 처리하는 간단한 앱 또한 이 친구가 만들어 둬 좀 더 수월한 데이터 처리를 돕고 있었다. 이 앱을 운영한 지가 어엿 4년 차가 돼 가는데, 둘 다 소프트웨어 공학적 지식이 불충분한 상태에서 시작했기에 디자인 패턴을 고려하지 않았고, 기능을 추가할수록 코드..
[BOJ, Swift] 1021 - 회전하는 큐 ( with 덱(Dequeue) )
·
PS (Problem Solving)
1021번: 회전하는 큐 첫째 줄에 큐의 크기 N과 뽑아내려고 하는 수의 개수 M이 주어진다. N은 50보다 작거나 같은 자연수이고, M은 N보다 작거나 같은 자연수이다. 둘째 줄에는 지민이가 뽑아내려고 하는 수의 위치가 www.acmicpc.net 추가하는 건 맨 뒤에서, 빼는 건 양쪽 방향에서 해줄 수 있는 큐가 필요하다. 덱(double ended queue)을 구현해주면 되는데, 해당 문제에서는 양방향으로 추가해줄 필요가 없어서 기존에 구현했던 큐를 일부 수정, 변형하였다. 회전하는 큐 구현 struct Queue { var left = [Int]() var right = [Int]() var count: Int { left.count + right.count } var isEmpty: Bool ..
[자료구조, Swift] 힙(Heap) 구현하기
·
Computer Science and Engineering/Data Structures and Algorithms
Swift같은 개발 언어 중에는 힙, 큐, 덱같이 기본적으로 다른 언어에서 제공해주는 라이브러리가 따로 있지 않다. 따라서 직접 구현해줘야 한다. 알아야 될 것 1. 완전 이진트리로 부모 노드를 탐색하려면, 시작 인덱스를 1부터 시작해야 한다. 2. 힙은 우선순위 큐를 위한 자료형이다. 3. 우선순위 큐의 목적은 값을 추가할 때 부모 노드에 최댓값 or 최솟값을 넣기 위함이다. 4. 따라서 입, 출력을 할 때만 연산이 수행되고, 전체 힙의 값을 확인하면 오름차순이나 내림차순으로 정렬되지 않을 수 있다. struct Heap { var heap: Array = [] // 초기화 1. 아무 것도 넣지 않을 때 init() { } // 초기화 2. 시작부터 넣을 때 init(_ data: [Int]) { he..
[Dev, iOS] Storyboard 없이 첫 화면을 구성하는 법
·
Dev/iOS
storyboard로 개발을 하는게 더 편리하고  쉽지만, 가끔은 SnapKit 라이브러리를 활용하여 코드로 화면을 짤 수도 있습니다. Project를 생성하고, 기본으로 포함되어있는데 ViewController에 바로 개발을 할 수는 있지만, 굳이 필요 없는 무거운 파일들을 앱에 포함시킬 필요는 없어요. 1. ViewController 삭제 2. Info.plist > Information Property List > Application Scene Manifest > Scene Configuration > Application Session Role > Item 0 > Storyboard Name 삭제 3. Ctrl + N -> 새로운 VC 생성 4. SceneDelegate에 해당 코드 작성func..
[Dev, iOS] 백그라운드 진입 시 민감한 정보 가리기
·
Dev/iOS
금융 등 개인 정보를 담는 앱들은 백그라운드에서 앱 화면을 가리는 기능을 사용한다.iOS 13 미만을 지원하는 앱에서는 appDelegate에서,이상의 버전을 지원하는 앱에서는 sceneDelegate에서 해당 메소드들을 구현해주자. // 액티브 상태가 되었을 경우(다시 앱으로 돌아왔을 때) func sceneDidBecomeActive(_ scene: UIScene) { callBgImage(false) } // 홈 바를 쓸어 올리거나 홈버튼을 두번 눌렀을 경우 func sceneWillResignActive(_ scene: UIScene) { } // 백그라운드 상태였다가 돌아왔을 때 func sceneWillEnterForeground(_ scene: UIScene) { ..
[Dev, iOS] 배경을 Gradient로 색칠하기
·
Dev/iOS
let gradientView = CAGradientLayer()gradientView.frame = bgView.bounds // bgView는 그라데이션을 덮을 superView에 해당let colors: [CGColor] = [ // 해당 부분에 그라데이션을 넣을 색상을 입력 (오름차순으로 표현됌)]gradientView.colors = colors// 그라데이션의 시작점과 끝점을 좌표로 표현, 0은 0을, 1은 maximum X/Y point를 의미gradientView.startPoint = CGPoint(x: 0.5, y: 0.0)gradientView.endPoint = CGPoint(x: 0.5, y: 1.0)// 할당하면 끝bgView.layer.addSublayer(gradientView)
[Dev, iOS] iOS 앱에 카카오 애드핏(Kakao AdFit) 연동 및 구현하기
·
Dev/iOS
구글 애드몹을 연동해놓은 앱이 있는데 해당 앱이 국내 유저 기반이기도 하고, 카카오 애드핏 광고가 더 예쁘고 가지런해 보이더군요. 그래서 구글 애드몹을 버리고(?) 카카오 애드핏으로 갈아타기로 마음먹었습니다. 확실히 구글 애드몹이 사용자 수가 많아서인지 금방 구현하는 법을 찾을 수 있었는데 카카오 애드핏은 없어서 구현하는 김에 포스팅을 작성해보렵니다. 해당 포스팅은 카카오 애드핏 공식 GitHub 문서를 참고하여 작성하였습니다. https://github.com/adfit/adfit-ios-sdk/wiki/배너-광고-연동 1. 먼저 카카오 애드핏 사이트에 접속, 가입(카카오 계정 연동 가능) 해주시고, 아래 절차를 밟으시면 됩니다. 광고 단위명은 그냥 사용자 마음대로 설정하시면 돼요. * 현재 앱에서는 ..
[Dev, iOS] 탭바 컨트롤러 위 테두리를 없애고 싶을 때
·
Dev/iOS
탭 바의 경계선(border)의 두께를 0.50 포인트로 설정합니다.탭 바의 경계선(border)의 색상을 투명하게 설정합니다. 여기서는 경계선의 색상을 투명하게 설정하여 경계선이 보이지 않도록 합니다.탭 바의 클립을 설정합니다. clipsToBounds가 true로 설정되면, 탭 바의 경계를 넘어서는 모든 하위 뷰는 잘립니다. 즉, 탭 바의 경계를 넘어서는 부분이 화면에 보이지 않게 됩니다. self.tabBarController!.tabBar.layer.borderWidth = 0.50self.tabBarController!.tabBar.layer.borderColor = UIColor.clear.cgColorself.tabBarController?.tabBar.clipsToBounds = true