iOS Giữ màn hình khởi chạy cũ và biểu tượng ứng dụng sau khi cập nhật


173

Tôi có một ứng dụng gần đây tôi đã thay thế các hình ảnh khởi động và biểu tượng ứng dụng, tôi đã xóa tất cả các tài sản cũ từ mọi nơi trong dự án. Khi tôi nâng cấp ứng dụng từ phiên bản cũ lên phiên bản mới chỉ bằng cách xây dựng trong Xcode, mọi thứ đều ổn. Tuy nhiên, nếu tôi đã cài đặt phiên bản cũ của ứng dụng thì hãy nâng cấp nó từ TestFlight, mỗi khi tôi tắt ứng dụng thì hãy khởi động lại hình ảnh khởi chạy cũ xuất hiện nhanh trước khi hiển thị hình ảnh khởi chạy mới. Tương tự như vậy khi tôi đóng ứng dụng, biểu tượng ứng dụng cũ sẽ nhấp nháy nhanh trước khi quay lại ứng dụng mới.

Tôi đã mở Ứng dụng bằng iExplorer và nhận thấy rằng có một hình ảnh của màn hình khởi chạy cũ được lưu trong /Library/Caches/Shapshotsthư mục (Tôi không biết làm thế nào hoặc tại sao nó lại ở đó). Khi tôi xóa thủ công thông qua iExplorer, nó sẽ ngừng xuất hiện. Tuy nhiên, khi tôi cố gắng loại bỏ nó bằng mã bằng NSFileManagercác phương thức, tôi gặp lỗi nói rằng tôi bị cấm xóa các tệp trong thư mục này.

Có ai có kinh nghiệm này trước đây và có lời khuyên nào không?


3
Vấn đề tương tự, và với màn hình khởi chạy, màn hình khởi chạy mới không bao giờ hiển thị, nó đang sử dụng hình ảnh được lưu trong bộ nhớ cache của phiên bản trước.
Barshe Fondacci

Câu trả lời:


327

Tôi đã có thể xóa bộ nhớ cache springboard một cách đáng tin cậy để kiểm tra thay đổi hình ảnh khởi chạy bằng cách thực hiện điều này:

  1. Xóa ứng dụng của bạn khỏi thiết bị
  2. Tắt nguồn thiết bị
  3. Bật nguồn thiết bị, cài đặt và khởi chạy ứng dụng.

Hình ảnh cập nhật đúng mỗi lần. Thật xấu hổ tôi cần phải tắt thiết bị để khiến thiết bị hoạt động - nhưng ít nhất tôi đã có thể tiến bộ theo cách này. Tôi hi vọng điêu nay se giup được ai đo.

Trong trường hợp trình giả lập, chỉ cần khởi động lại trình giả lập sẽ hoạt động.


19
Đây là giải pháp duy nhất hiệu quả với tôi. Cảm ơn rât nhiều!
Marcin Kapusta

Cảm ơn anh hùng !! Làm việc như người ở.
Ravi

5
Hoạt động cho trình giả lập quá.
Alexey Podlasov

1
Đây cũng là bản sửa lỗi cho TestFlight? cập nhật ứng dụng từ TestFlight cũng lưu trữ các hình ảnh khởi chạy. Bạn có chắc chắn điều này sẽ không xảy ra trên phiên bản ứng dụng không giống như bản thử nghiệm?
hasan

1
Nó nhắc tôi tự động hài kịch với tôi. Nhưng nó hoạt động rất tuyệt. Cảm ơn bạn!
ssowri1

49

Các bộ nhớ cache này được Springboard sử dụng để chuyển đổi ứng dụng nhanh chóng. Đây không phải là vấn đề sẽ ảnh hưởng đến người dùng sản xuất của bạn và về lý thuyết sẽ biến mất vào lần tới khi Springboard quyết định chụp nhanh ứng dụng của bạn.

Điều đó đang được nói, đây không phải là một vấn đề bạn có thể khắc phục. Đây là một lỗi trong mã của Apple không phải của bạn.

CẬP NHẬT: Dường như có một công việc xung quanh không yêu cầu khởi động lại thiết bị.

Điều này sẽ có hiệu lực sau lần ra mắt thứ hai!

do {
   try FileManager.default.removeItem(atPath: NSHomeDirectory()+"/Library/SplashBoard")
} catch {
   print("Failed to delete launch screen cache: \(error)")
}

Một lời giải thích đầy đủ về cách thức hoạt động ở đây: https://rambo.codes/ios/quick-tip/2019/12/09/clear-your-apps-launch-screen-cache-on-ios.html


7
Bạn có thể vui lòng liên kết đến tài liệu sẽ xác nhận tuyên bố của bạn "Đây không phải là vấn đề sẽ ảnh hưởng đến người dùng sản xuất của bạn"? Tôi có cùng một vấn đề, tôi ổn nếu đây chỉ là dev nhưng tôi sẽ không nắm lấy cơ hội mà không có tài liệu chính thức nêu rõ những gì bạn nói.
Barshe Fondacci

6
Đối với một số người cũng nhận được bản cập nhật App Store này :(.
Ajumal 16/07/17

15
Thật không may, tôi có thể xác nhận sự cố này ảnh hưởng đến cả người dùng sản xuất (vì vậy sau khi nâng cấp ứng dụng từ App Store).
Eugenio

Có, nó ảnh hưởng đến các bản dựng sản xuất / bản dựng App Store.
Jonny

Bất kỳ nguồn cho điều này?
Daniel Springer

27

Đối với trình giả lập chỉ Reset Contents and Settings...


Đây không phải là một câu hỏi. Vấn đề là khi triển khai một ứng dụng mới với các biểu tượng hoặc hình ảnh mới, chúng không được làm mới theo cùng một cách và một số được giữ trên màn hình trong khi chúng đã bị xóa.
Stephane Paquet

18

@InkGolem

Đây không phải là vấn đề sẽ ảnh hưởng đến người dùng sản xuất của bạn

là đúng.

Tôi đã phải đối mặt với vấn đề này khi tôi thay đổi Màn hình khởi chạy, SplashScreen và Biểu tượng ứng dụng. Tôi đã thử mọi phương pháp, nhưng nó không hiệu quả. Cuối cùng, tôi vừa xuất bản ứng dụng của mình và tải xuống ứng dụng của mình từ App store với thiết bị mà tôi không sử dụng để phát triển . SplashScreen và Biểu tượng ứng dụng hoạt động như bình thường !!!


1
Bất kỳ ý tưởng nào sẽ xảy ra nếu bạn đã có một ứng dụng trên kho ứng dụng và người dùng chỉ cần cập nhật ứng dụng với Màn hình khởi chạy mới?
rhcpfan

Tôi đã có một ứng dụng trên các bản tải xuống của cửa hàng ứng dụng và tôi phát hành bản cập nhật với Màn hình khởi chạy mới. Sau khi phát hành ứng dụng của mình, tôi đã thử nghiệm với hơn 10 thiết bị (không sử dụng để phát triển) để xác minh rằng "Đây không phải là vấn đề sẽ ảnh hưởng đến người dùng sản xuất của bạn" là có thật và tôi không nhận được bất kỳ khiếu nại nào từ người dùng về màn hình giật gân.
chinnawatp

7
Vấn đề này đang xảy ra với bản dựng Appstore đối với tôi và các mẹo @Brian Trzupek đã hoạt động.
Ajumal

3
Xác nhận, điều này xảy ra trên các bản dựng trực tiếp từ App Store. Câu trả lời này có một số vấn đề với ngôn ngữ; Tôi không thể biết liệu chúng có nghĩa là vấn đề có ảnh hưởng đến việc xây dựng sản xuất hay không, nhưng kinh nghiệm thực nghiệm của tôi nói rằng nó .
Jonny

2
Nó thực sự đang xảy ra với người dùng sản xuất !! Màn hình Splash hiển thị là cái cũ. Khởi động lại điện thoại đã sửa. Hy vọng mọi người sẽ thấy giật gân mới trong những giờ sau mà không cần khởi động lại.
Valerio

13

Tôi tìm thấy giải pháp khắc phục những gì nếu bạn thực sự muốn khắc phục vấn đề này. Apple có một số cơ chế để lưu trữ hình ảnh của màn hình khởi chạy, lập chỉ mục theo tên tệp hình ảnh.

Khi bạn thay đổi bất kỳ hình ảnh nào trên màn hình khởi chạy và bạn muốn thấy những thay đổi đó trong lần chạy tiếp theo ngay lập tức. vui lòng sử dụng tên hình ảnh mới mà hình ảnh bạn đã thay đổi và liên kết đến tệp hình ảnh mới trong bảng phân cảnh hoặc xib.

Chạy lại, bạn sẽ thấy thay đổi mới xuất hiện.


1
Tôi không muốn xóa ứng dụng vì vậy tôi đã thử ứng dụng này. Điều này cộng với việc khởi động lại thiết bị của tôi làm việc cho tôi.
Murray Sagal

Điều này đã không làm việc cho tôi. Khởi động lại sự thành công cũng không hiệu quả ... Tôi bỏ cuộc ngay bây giờ.
Lensflare

Không làm việc cho tôi. Tôi thậm chí đã xóa imageView và tạo một cái mới với hình ảnh mới, và nó vẫn không hoạt động.
Rickard Elimää

Nó không làm việc cho tôi. Tôi đã nhận được một hình ảnh cũ không tải (màu nền vẫn được hiển thị thay vì hình ảnh) và nó vẫn được hiển thị trong một phần giây trước khi màn hình khởi chạy mới xuất hiện.
Michal Cichon

13

Điều này làm việc cho tôi: http://arsenkin.com/launch_screen_image_cache.html

Một lần nữa, nhờ vào chủ đề mà tôi đã tham chiếu ở trên, tôi đã tìm ra cách giải quyết vấn đề này - đặt tên cho hình ảnh mới của bạn khác với hình ảnh trước đó trong trường hợp hình ảnh mới của bạn có cùng tên với hình ảnh cũ và đưa nó ra khỏi * thư mục .xcassets vào thư mục dự án và tham chiếu nó trong UIImageView của bạn. Và đó là nó. Nghe có vẻ ngu ngốc dễ dàng nhưng oh gawd tôi đã có bao nhiêu cơn thịnh nộ.


3
Các chủ chốt ở đây là để giữ những hình ảnh ra khỏi Danh mục tài sản. Cảm ơn!
Michal Cichon

2
Giải pháp này thực sự hữu ích nếu bạn quan tâm đến UX sản xuất của người dùng tốt và muốn tránh sự chuyển đổi xấu xí đó giữa hình ảnh cũ và hình ảnh mới.
Michal Cichon

2
cuối cùng, một giải pháp thực sự hiệu quả! Chìa khóa ở đây là đưa hình ảnh ra khỏi thư mục tài sản.
Elad

1
Hoạt động hoàn hảo mà không cần khởi động lại hoặc xóa ứng dụng.
Soufian Hossam

Kỳ dị. Nhưng hình nền tôi chuyển ra từ danh mục tài sản đôi khi không tải và tôi nhận được nền đen. Bây giờ tôi cần gỡ lỗi nó một lần nữa, nhưng tôi không biết làm thế nào để sao chép một cách đáng tiếc.
Michal Cichon

10

Gỡ cài đặt ứng dụng của bạn, khởi động lại điện thoại của bạn và cài đặt lại ứng dụng của bạn ... Điều này thực sự đã được khắc phục trong trường hợp của tôi.


5

Tôi cũng phải đối mặt với vấn đề tương tự. Nó xảy ra vì trình giả lập / thiết bị iOS lưu trữ hình ảnh khởi chạy khi bạn khởi chạy ứng dụng lần đầu tiên. Tôi đã thêm một số sửa đổi cho câu trả lời của Brian Trzupek :

  1. Xóa bộ ảnh khỏi tài sản Xcode (ví dụ: launch_image)
  2. Thêm một bộ hình ảnh mới và thêm hình ảnh vào nó.
  3. Tắt và bật Thiết bị iOS. (Đặt lại nội dung và cài đặt cho trình giả lập).
  4. Làm sạch thư mục xây dựng Xcode (Nhấn command+ option+ shift+ K).
  5. Xóa ứng dụng khỏi thiết bị / trình giả lập (nếu có).
  6. Chạy lại.

5

Điều gì làm việc cho tôi:

  • Xóa Trình điều khiển chế độ xem và cảnh của LaunchScreen và tạo một bộ điều khiển mới ( đảm bảo bạn đặt nó làm "Trình điều khiển chế độ xem ban đầu" trong Trình theo dõi thuộc tính ).

Những gì không làm việc cho tôi:

  • Xóa ứng dụng
  • Khởi động lại iPhone, Mac hoặc Xcode
  • Xóa dữ liệu phái sinh
  • Xóa hộp chứa của thiết bị
  • Làm sạch
  • Đốt 3 búp bê Steve Jobs Voodoo

Ghi chú:

Đôi khi cũng cần xóa (giả lập)


4
Tôi không tin chắc. Tôi sẽ cần các vị trí nguồn của búp bê voodoo Steve Jobs để xác nhận.
Chris Brandsma

3

Chỉ cần kết nối thiết bị của bạn, đi đến Xcode> Window> Thiết bị> Thiết bị của bạn, giờ đây trong các ứng dụng đã cài đặt, chọn ứng dụng của bạn, nhấp chuột phải và tải xuống container, đi đến tệp được tạo, nhấp chuột phải, Hiển thị nội dung gói, AppData, Thư viện, Caches, và xóa các tập tin. Bây giờ, hãy truy cập Xcode> Window> Thiết bị> Thiết bị của bạn> ứng dụng của bạn và nhấp chuột phải để thay thế các thùng chứa.


3

Thành thật mà nói, tôi đã không mạo hiểm để sống mà không chắc chắn liệu điều này có được cập nhật hay không.

Vì vậy, giả sử bạn đang sử dụng xcassets, một giải pháp đơn giản là:

  1. Xóa bộ ảnh cũ
  2. Tái tạo một tên với một tên khác và thêm hình ảnh màn hình giật gân của bạn
  3. Cập nhật bảng phân cảnh của bạn để sử dụng tham chiếu bộ ảnh 'mới' này

Nó sẽ cập nhật cho chắc chắn! (Tôi thậm chí đã thử nghiệm với ứng dụng đã được cài đặt trên thiết bị). Không cần phải xóa bộ nhớ cache của thiết bị hoặc như vậy.


3
  1. Xóa ứng dụng của bạn khỏi thiết bị
  2. Tắt nguồn thiết bị
  3. Bật nguồn thiết bị
  4. Cài đặt và khởi chạy ứng dụng.

1

Ok, vì vậy tôi đã tìm ra vấn đề. Trong phiên bản trước của ứng dụng của tôi, chúng tôi đã sử dụng Launch Screen XIB. Ở đâu đó trong quá trình phát triển phiên bản mới này, xib đã bị xóa và chỉ được thay thế bằng hình ảnh khởi chạy tĩnh.

Giải pháp là sử dụng Launch Screen XIB. Tôi nhận thấy rằng lần đầu tiên tôi sử dụng xib màn hình khởi chạy, tệp được lưu trong thư mục ảnh chụp nhanh đã được thay thế bằng ảnh chụp nhanh của xib.


2
Không, tôi đang sử dụng Launch Screen XIB và nó không cập nhật. Tôi đoán bạn đã khắc phục sự cố bằng cách chuyển từ Màn hình khởi chạy> Ảnh tĩnh> Màn hình khởi chạy. Sửa đổi màn hình khởi chạy trong XCode và chạy nó vẫn hiển thị màn hình khởi chạy cũ trên iPhone. Hình ảnh được lưu trữ trên thiết bị. Tôi đoán rằng nếu tôi thay đổi tên của màn hình khởi chạy thì nó sẽ thực hiện được mánh khóe
Barshe Fondacci

Việc tạo lại màn hình khởi chạy với một tên khác không khắc phục được vấn đề, vẫn nhìn thấy màn hình cũ. "Hy vọng" duy nhất là iOS tạo lại bộ nhớ cache của mình ở mỗi lần cập nhật ứng dụng, nhưng tôi không thể tìm thấy bất kỳ tài liệu nào về việc này
Barshe Fondacci

1

Xcode 10 / iOS 12

Sau khi thử tất cả những điều được đề cập ở trên, tôi đã phải xóa chế độ xem hình ảnh khỏi LaunchScreen và thay thế nó bằng một cái mới.


1

Đây là cách nhanh nhất tôi tìm thấy để giải quyết vấn đề này mặc dù nghe có vẻ ngu ngốc:

  1. Nhấp chuột phải vào LaunchScreen.xibhoặc trên tập tin launchscreen của bạn và chọn Remove filesau đó chọn Remove to trash. Điều này sẽ xóa tất cả các tham chiếu của tệp và các cập nhật trước đây khỏi dự án của bạn.

  2. Đi vào thùng rác của bạn và kéo và thả tệp trở lại vào dự án xCode của bạn (bên trong yourProjectName).

  3. Làm sạch và xây dựng lại.


1

Sử dụng đoạn mã này để dọn dẹp bộ đệm màn hình khởi chạy:

import UIKit

public extension UIApplication {
    func clearLaunchScreenCache() {
        #if DEBUG
        do {
            let launchScreenPath = "\(NSHomeDirectory())/Library/SplashBoard"
            try FileManager.default.removeItem(atPath: launchScreenPath)
        } catch {
            print("Failed to delete launch screen cache - \(error)")
        }
        #endif
    }
}

Sử dụng:

UIApplication.shared.clearLaunchScreenCache()

0

Có vấn đề này cũng có. Là một người mới hoàn toàn, tôi ngây thơ thay đổi LaunchScreen.storyboard thành LaunchScreen.xib. Việc chạy không thành công (duh), vì vậy tôi đã đổi nó thành .storyboard chạy lại ứng dụng chỉ để kiểm tra Tôi không làm hỏng bất cứ điều gì khác - và màn hình cũ không xuất hiện đầu tiên. Vì vậy, bất cứ điều gì tôi đã làm, nó phải xóa bộ nhớ cache cũ.


0

Có cùng một vấn đề nhưng chỉ với hình ảnh được sử dụng trong bảng phân cảnh. Di chuyển hình ảnh từ danh mục tài sản thay đổi tên của nó sang gói ứng dụng (ví dụ: hình ảnh cũ được đặt trong danh mục tài sản được gọi là launch_logo và hình ảnh trong gói ứng dụng được gọi là launchscreen_logo.png) đã giải quyết vấn đề cho chúng tôi.


0

Tôi đoán những điều này phụ thuộc vào các tình huống. Khi nó xảy ra lúc gỡ lỗi hoặc thử nghiệm, hoạt động xóa hình ảnh trên màn hình khởi chạy. Hoặc gỡ cài đặt ứng dụng của bạn, sau đó khởi động lại khởi động.

Nhưng nó đi ngay cả sau khi lưu trữ, sau đó Nó không giải quyết với thiết lập lại và làm sạch.


0

Trong trường hợp của tôi, tôi đã không chọn Nguồn AppIcon từ Cài đặt ứng dụng -> Chung - nhập mô tả hình ảnh ở đây> Biểu tượng ứng dụng và Khởi chạy hình ảnh -> Nguồn biểu tượng ứng dụng


0

Dùng thử trong AppDelegate

    if #available(iOS 13.0, *) {
        do {
            try FileManager.default.removeItem(atPath: NSHomeDirectory()+"/Library/SplashBoard")
        } catch {
            print("Failed to delete launch screen cache: \(error)")
        }
    } else {
        print("ios is min")
    }

0

Giải pháp làm việc cho tôi

  1. Xóa ứng dụng của bạn khỏi thiết bị
  2. Tắt thiết bị
  3. Bật thiết bị
  4. xây dựng thư mục sạch
  5. Một lần nữa xây dựng và cài đặt và khởi chạy ứng dụng.

    Thưởng thức


0

Hãy chắc chắn rằng bạn đã làm tất cả các bước này

  1. Tìm kiếm khóa ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME trong cài đặt bản dựng và tìm kiếm giá trị tài sản của nó trong toàn bộ ứng dụng, sau đó xóa nó.
  2. Xóa ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME khỏi cài đặt Xây dựng.
  3. Tạo màn hình khởi chạy mới Xcode -> Tệp -> Mới -> Tệp -> Màn hình khởi chạy
  4. Mục tiêu chính của ứng dụng Goto -> Chung -> Biểu tượng ứng dụng và khởi chạy hình ảnh -> Khởi chạy tệp màn hình -> Chọn tệp màn hình khởi chạy mới.
  5. Nếu bạn chỉ thay đổi màn hình Launch cũ, hãy thử đặt tên cho các tài sản mới bằng các tên khác nhau.

-1

Hãy thử mở trình giả lập, đi đến Phần cứng -> Xóa tất cả nội dung và cài đặt.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.