- vừa được xem lúc

iOS Thay đổi App Icon mà không cần phải build lại lên AppStore

0 0 24

Người đăng: 漢輝

Theo Viblo Asia

Bạn muốn App Icon của bạn trên màn hình thay đổi theo thời gian hay mục đích nào đó mà lại không muốn phải build lại app thì mình làm như thế nào?

Ví dụ:

  1. Thay đổi App Icon theo ban ngày, ban đêm.
  2. Thay đổi theo sự kiện.
  3. Thay đổi dựa trên thao tác người dùng.
  4. .... Cùng hàng tỉ dự kiện mà bạn có thể dựa vào đó để làm.

Thật ra thủ thuật này cũng có từ phiên bản iOS 10.3 trở đi, Apple đã cung cấp một chức năng thú vị cho developer là thay đổi App Icon.

Apple's API

Trong tài liệu Apple' API, có 3 điều cần hiểu rõ.

var supportsAlternateIcons: Bool { get } var alternateIconName: String? { get } func setAlternateIconName(String?, completionHandler: ((Error?) -> Void)? = nil)
  • supportsAlternateIcons là thuộc tính chỉ đọc, thuộc tính này cho biết là app bạn có thể thay đổi App Icon không?

  • alternateIconName cũng là thuộc tính chỉ đọc, cho biết tên của icon đang được hiển thị.

  • setAlternateIconName là hàm cho phép set tên icon, nếu để nil, app sẽ lấy icon chính để hiển thị.

Chi tiết hơn, bạn có thể vào đọc tài liệu của Apple: https://developer.apple.com/documentation/uikit/uiapplication/2806815-supportsalternateicons

Điều kiện cần thiết

Trước khi tiến hành làm demo, bạn cần có một vài icon để sử dụng cho mục đích thay đổi icon app.

Bước 1: Chuẩn bị icon

Một điều lưu ý rằng: không để các tập tin Icon trong Assets, mà để như hình dưới đây.

Đưa các files icon vào app như sau

Bước 2: Cài đặt vào info.plist

Đưa các thông tin file icon đó vào info.plist

<key>CFBundleIcons</key>
<dict> <key>CFBundleAlternateIcons</key> <dict> <key>Test1</key> <dict> <key>CFBundleIconFiles</key> <array> <string>Test1</string> </array> <key>UIPrerenderedIcon</key> <false/> </dict> <key>Test2</key> <dict> <key>CFBundleIconFiles</key> <array> <string>Test2</string> </array> </dict> </dict> <key>CFBundlePrimaryIcon</key> <dict> <key>CFBundleIconFiles</key> <array> <string>AppIcon60x60</string> </array> </dict>
</dict>

Bước 3: Coding

Đoạn code để thay đổi App Icon, sử dụng hàm setAlternateIconName của UIApplication.

UIApplication.shared.setAlternateIconName("<Tên Icon App được set trong info.plist>", completionHandler: { (error) in if error != nil { print("\(String(describing: error?.localizedDescription))") }
})

Screen ở demo app

Trước khi set icon

Màn chính của App

Khi nhấn vào button Change Icon

Và đây là kết quả

Source Code demo:

https://github.com/tranhanhuy/swift-set-AlternateIcon

Nguồn:

https://ashishkakkad.com/2020/03/how-to-set-alternate-icon-for-an-ios-app-programmatically/

Bình luận

Bài viết tương tự

- vừa được xem lúc

Học Flutter từ cơ bản đến nâng cao. Phần 1: Làm quen cô nàng Flutter

Lời mở đầu. Gần đây, Flutter nổi lên và được Google PR như một xu thế của lập trình di động vậy.

0 0 260

- vừa được xem lúc

Học Flutter từ cơ bản đến nâng cao. Phần 3: Lột trần cô nàng Flutter, BuildContext là gì?

Lời mở đầu. Màn làm quen cô nàng FLutter ở Phần 1 đã gieo rắc vào đầu chúng ta quá nhiều điều bí ẩn về nàng Flutter.

0 0 194

- vừa được xem lúc

Swift: Tạo custom phép toán tử (Operator) của riêng bạn!

Swift cho phép bạn tạo các toán tử có thể tùy chỉnh của riêng bạn. Điều này đặc biệt hữu ích khi bạn xử lý các loại dữ liệu của riêng mình. Operator Types in Swift. Có năm loại toán tử chính trong Swift.

0 0 50

- vừa được xem lúc

Chương 6 Protocol oriented programming.

Cuốn sách này là về lập trình hướng protocol. Khi Apple thông báo swift 2 ở WWDC 2015.

0 0 32

- vừa được xem lúc

Ví dụ về UIActivityViewController

Trên iOS, UIActivityViewController cung cấp giao diện thống nhất để người dùng chia sẻ và thực hiện các hành động trên văn bản, hình ảnh, URL và các mục khác trong ứng dụng. let string = "Hello, world!". let url = URL(string: "https://nshipster.com").

0 0 49

- vừa được xem lúc

Quản lý self và cancellable trong Combine.

. . Công việc quản lý bộ nhớ memory management thường trở nên phức tạp khi chúng ta thực hiện các tác vụ bất đồng bộ asynchronous vì chúng ta thường phải lưu giữ một số object nằm ngoài scope mà object được define trong khi vẫn phải đảm bảo được việc giải phóng object đó được thực hiện đúng quy trìn

0 0 33