본문 바로가기

플러터27

[Flutter] 모바일 앱을 보호하기 위한 몇가지 보안 난독화 코드 난독화는 역엔지니어링을 위해 코드를 읽기 어렵게 만드는 것입니다. 난독화 코드에 대한 방법은 넘어가겠습니다. 메모리 캐시 플러시 뱅킹 앱과 같은 안전을 중요시하는 앱의 경우 주기적으로 인메모리 캐시를 플러시해야 합니다. class CacheControl extends WidgetsBindingObserver { CacheControl() { WidgetsBinding.instance.addObserver(this); } void _cleanAllCache() { // Cleans all cache. } @override void didChangeAppLifecycleState(ApplifecycleState state) { // 앱이 일시 중지된 시점 체크 if (state == AppLif.. 2023. 5. 21.
[Flutter] Theme.of(context) 성능 이슈 Flutter에서 테마 오브(context)를 사용할 때 발생할 수 있는 성능 이슈에 대한 문제점을 알아보겠습니다. 중복 빌드 아래의 코드의 경우에는 `builder` 함수가 위젯 트리가 빌드될 때마다 호출되어 여러 번 빌드가 발생됩니다. 위젯 상태의 변경이나 애니메이션, 화면 리사이즈 등 다양한 이벤트가 발생할 때마다 호출됩니다. class Home extends StatefulWidget { @override _HomeState createState() => _HomeState(); } class _HomeState extends State { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: T.. 2023. 5. 10.
[Flutter] 플러터 개발시 모범사례 확인하기 플러터(Flutter)로 앱을 개발할 때, 일관성 없는 코드 작성이나 특정 컨벤션을 지키지 않는 경우 성능 이슈나 재사용성의 저하 등의 문제가 발생할 수 있습니다. 이러한 문제를 방지하기 위해서는 다음과 같은 모범 사례를 따르는 것이 좋습니다. 뷰단 삼항연산자 플러터(Flutter)는 UI(View)와 비즈니스 로직(Model, Controller)을 구분하지 않고 코드를 작성할 수 있기 때문에, 뷰단에서도 코드를 자유롭게 혼합할 수 있습니다. 이러한 점은 개발자들이 빠르게 프로토타이핑을 할 수 있도록 도와주지만, 코드를 장기적으로 유지하기 어렵거나 가독성이 떨어질 수 있다는 단점도 존재합니다. 따라서, 개발자는 코드의 가독성을 높이기 위해 모델과 컨트롤러 등을 적절히 분리하고, 코드의 일관성을 유지하는.. 2023. 4. 9.
[Flutter] 앱에서 이미지 최적화하여 성능 향상 시키기 이미지가 이러한 시스템에서 필요한 것보다 큰 경우 특히 저사양 장치에서 성능 저하를 유발할 수 있으며 목록 보기에서와 같이 이미지가 많은 경우에는 성능 하락에 영향이 있으며, 심한 경우에는 앱이 크래시가 발생할 수도 있습니다. 태그 추가 main에 아래 코드를 추가해줍니다. 아래와 같이 추가하게 되면 이제 디버그 콘솔에서 확인할 수 있습니다. debugInvertOversizedImages = true; 이미지 조절 이미지 assets/images/signin/onboarding_1.png의 디스플레이 크기는 639×400이지만 디코딩 크기는 960×600이며 추가로 1666KB를 사용합니다. 사전에 자산 크기 조정, 639의 cacheWidth 매개변수, 400의 cacheHeight 매개변수 제공 또.. 2023. 4. 9.
[Flutter] File not found: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphoneos.a 해결하기 해당 오류의 경우 Xcode가 필요한 파일을 찾지 못해서 발생합니다. 구체적으로는 "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphoneos.a" 파일을 찾지 못하고 있다는 것을 의미합니다. 하지만, 실제 오류의 문구와 관계없이 아래의 단계를 통해서 해결이 가능할 수 있습니다. 패키지 IOS 버전 확인 프로젝트와 관련된 패키지에 IOS Target Version을 확인해봐야 합니다. 예를 들면 현재 프로젝트 Target IOS Version은 11로 해놓은 상태이나 관련 패키지 IOS 버전이 너무 낮거나 다른 경우 최소로 수정하여 맞춰주시면 됩니다. 다른 패키지들을.. 2023. 4. 4.
[Flutter] Cannot find "xcodebuild". Xcode 13 or greater is required to develop for iOS. Encountered error while building for device. "xcodebuild"를 찾을 수 없다는 오류 메시지와 함께 "iOS 개발을 위해 Xcode 13 이상이 필요합니다"(Cannot find "xcodebuild". Xcode 13 or greater is required to develop for iOS. Encountered error while building for device.)라는 메시지가 표시되면 시스템에 Xcode를 설치하거나 업데이트해야 합니다. 누락되어 설치가 안된 문제가 있을 수 있기 때문에 아래와 같은 방법으로 시도해 보시면 될 것 같습니다. Xcode Developer 설치 터미널에서 아래의 명령어를 입력하여, 설치되지 않은 패키지를 설치해주세요. sudo xcode-select --switch /Applications/Xcode... 2023. 4. 4.
[Flutter] 소셜 애플 로그인(Sign In with Apple) 구현하기 해당 글에서는 애플 개발자 등록 및 파이어베이스 등록 및 절차에 관한 내용은 넘어간 후의 애플 로그인 구현을 설명드리겠습니다. Apple 로그인에서 제공되는 정보 이름 : 필수로 받습니다. 단, 유저의 이름은 직접 수정도 가능하기 때문에 실명이 아닐 수 있습니다. 이메일 : 선택입니다. 이외 전화번호, 프로필 사진 등 다른 소셜 로그인에서 제공되는 정보는 받아 올 수 없습니다. Firebase 설정 프로젝트에 맞게 Firebase에서도 프로젝트를 생성해 줍니다. 앱 추가 등록 위 이미지처럼 처음에 Firebase에 접속하게 되면 앱 등록 바로 보이게 됩니다. 안드로이드, IOS 모두 등록해 줍니다. 등록 과정에서 다운되는 google-services.json 파일은 아래와 같이 폴더 경로에 맞게 다르게 .. 2023. 4. 3.
[Flutter] 플러터 인앱(in_app_purchase) 결제 상품 구매 구현하기 플러터(Flutter)를 사용하여 앱 내에서 상품을 구매하고 소비하는 인앱 결제 기능을 구현하는 방법을 소개합니다. 인앱 결제는 사용자가 앱에서 콘텐츠, 기능, 서비스 등을 구매할 수 있도록 하는 강력한 기능입니다. 이 글에서는 플러터에서 인앱 결제를 구현하는 방법을 간단하게 설명합니다. 먼저, 진행하기 전에 가장 궁금하신 게 결제자를 어떻게 판별하고 관리하는지 궁금하실 거예요. 구글에서 전체적으로 관리를 제공해주지 않기 때문에 별도로 백엔드를 구현하셔서 주문 고객 등 관리를 별도로 해주셔야 합니다. 필요한 패키지 설치 플러터 인앱 결제를 구현하기 위해 필요한 패키지를 설치하려면, pubspec.yaml 파일에 아래와 같이 in_app_purchase 패키지를 추가하세요. in_app_purchase |.. 2023. 3. 19.
[Flutter] 어노테이션(annotation) `@` 사용해보기 어노테이션은 개발자가 소스 코드를 정적으로 분석하여 추론할 수 없는 의도를 표현하는 데 사용할 수 있는 주석입니다. 어노테이션 종류 @alwaysThrows 해당 함수가 항상 예외를 던진다는 것을 나타내는 어노테이션입니다. 이 어노테이션이 붙은 함수를 오버라이드하는 함수도 동일한 계약을 준수해야 합니다. @doNotStore 해당 메서드, 게터, 혹은 최상위 게터나 함수에서 반환된 값을 필드나 최상위 변수에 저장하지 말아야 한다는 것을 나타내는 어노테이션입니다. @experimental 해당 라이브러리나 클래스의 API가 실험적이며 언제든지 변경될 수 있다는 것을 나타내는 어노테이션입니다. 이 어노테이션이 붙은 API가 변경되어도 해당 패키지의 버전이 업데이트되지 않아도 됩니다. @factory 해당 인.. 2023. 3. 19.
[Flutter] 임펠러(Impeller) 사용해보기 Kaleidoscopia는 임펠러로 그래픽 성능을 개선한 예를 보여주는 데모 임펠러는 Flutter의 새로운 렌더링 런타임으로 Flutter 3.7 Impeller는 Flutter 프레임워크의 최신 버전에서 추가된 기술입니다. Impeller는 성능, 그래픽 품질, 호환성, 개발 효율 등을 개선하는 기술로, 플러터 개발자가 더 높은 효율성으로 애플리케이션을 개발할 수 있도록 돕습니다. 사전 컴파일된 셰이더를 사용하여 보다 예측 가능한 성능을 제공하며, 실행 시 셰이더 컴파일로 인한 프레임 손실을 완화합니다. iOS와 Android의 최신 로우 레벨 API인 Metal과 Vulkan의 프리미티브를 활용합니다. 또한 동시성을 효과적으로 활용하여 스레드에 단일 프레임 워크로드를 분산합니다. 셰이더 활용 2023. 1. 31.