iOS ทำให้หน้าจอเปิดใช้งานเก่าและไอคอนแอพหลังจากอัพเดต


173

ฉันมีแอพที่ฉันแทนที่รูปภาพเริ่มต้นและไอคอนแอพฉันเพิ่งลบเนื้อหาเก่าทั้งหมดออกจากทุกที่ในโครงการ เมื่อฉันอัพเกรดแอพจากเวอร์ชั่นเก่าเป็นเวอร์ชั่นใหม่โดยเพียงแค่สร้างใน Xcode ทุกอย่างก็ใช้ได้ อย่างไรก็ตามหากฉันติดตั้งแอพเวอร์ชั่นเก่าแล้วอัปเกรดจาก TestFlight ทุกครั้งที่ฉันฆ่าแอพแล้วรีสตาร์ทภาพการเปิดใช้งานเก่าจะปรากฏขึ้นชั่วครู่ก่อนที่จะแสดงภาพการเปิดตัวใหม่ ในทำนองเดียวกันเมื่อฉันปิดแอพไอคอนแอพเก่าจะกะพริบสั้น ๆ ก่อนที่จะเปลี่ยนกลับเป็นแอปใหม่ของฉัน

ฉันเปิดแอพโดยใช้ iExplorer และสังเกตว่ามีภาพของหน้าจอเรียกใช้งานเก่าที่บันทึกไว้ใน/Library/Caches/Shapshotsไดเรกทอรี (ฉันไม่รู้ว่าทำไมหรือทำไมถึงมีอยู่) เมื่อฉันลบด้วยตนเองผ่าน iExplorer มันจะหยุดปรากฏ อย่างไรก็ตามเมื่อฉันพยายามลบด้วยรหัสโดยใช้NSFileManagerวิธีการฉันได้รับข้อผิดพลาดว่าฉันถูกห้ามไม่ให้ลบไฟล์ในไดเรกทอรีนี้

มีใครเคยสัมผัสเรื่องนี้มาก่อนและมีคำแนะนำอะไรบ้าง?


3
ปัญหาเดียวกันและด้วยหน้าจอการเรียกใช้งานหน้าจอการเปิดตัวใหม่ไม่เคยปรากฏมาก่อนจึงใช้ภาพแคชของเวอร์ชันก่อนหน้า
Christophe Fondacci

คำตอบ:


327

ฉันสามารถลบแคชกระดานกระโดดน้ำสำหรับการทดสอบการเปลี่ยนแปลงภาพเริ่มต้นได้อย่างน่าเชื่อถือโดยทำสิ่งนี้:

  1. ลบแอพของคุณออกจากอุปกรณ์
  2. ปิดอุปกรณ์
  3. เปิดเครื่องอุปกรณ์ติดตั้งและเปิดแอพ

ภาพอัพเดทอย่างถูกต้องทุกครั้ง ความอัปยศฉันต้องปิดอุปกรณ์เพื่อให้มันไป - แต่อย่างน้อยฉันก็สามารถก้าวหน้าได้ด้วยวิธีนี้ ฉันหวังว่านี่จะช่วยให้ใครบางคน

ในกรณีของตัวจำลองการเพิ่งเริ่มการจำลองควรทำงาน


19
นี่เป็นทางออกเดียวที่ได้ผลสำหรับฉัน ขอบคุณมาก!
Marcin Kapusta

ขอบคุณฮีโร่ !! ทำงานเหมือนจับใจ
Ravi

5
ใช้งานได้กับอีมูเลเตอร์ด้วย
Alexey Podlasov

1
นี่เป็นวิธีแก้ไขสำหรับ TestFlight หรือไม่ การอัปเดตแอปจาก TestFlight จะเก็บภาพการเปิดตัวไว้ คุณแน่ใจหรือไม่ว่าสิ่งนี้จะไม่เกิดขึ้นกับเวอร์ชันแอปซึ่งแตกต่างจาก testflight
Hasan

1
มันทำให้คอมเมิร์ชกระจกตลกให้ฉัน แต่มันทำงานได้ยอดเยี่ยม ขอบคุณ!
ssowri1

49

Springboard ใช้แคชเหล่านี้เพื่อให้แอปสลับอย่างรวดเร็ว นี่ไม่ใช่ปัญหาที่จะส่งผลกระทบต่อผู้ใช้งานโฆษณาของคุณและในทางทฤษฎีควรจะหายไปในครั้งต่อไปที่ Springboard ตัดสินใจที่จะจับภาพแอปของคุณ

อย่างที่บอกไปแล้วนี่ไม่ใช่ปัญหาที่คุณสามารถแก้ไขได้ นี่เป็นข้อผิดพลาดในรหัสของ Apple ไม่ใช่ของคุณ

UPDATE: ดูเหมือนจะมีการแก้ไขที่ไม่จำเป็นต้องรีสตาร์ทอุปกรณ์

สิ่งนี้จะมีผลหลังจากการเปิดตัวครั้งที่สอง!

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

คำอธิบายแบบเต็มของวิธีการทำงานที่นี่: https://rambo.codes/ios/quick-tip/2019/12/09/clearing-your-apps-launch-screen-cache-on-ios.html


7
คุณกรุณาเชื่อมโยงไปยังเอกสารที่จะยืนยันคำสั่งของคุณ "นี่ไม่ใช่ปัญหาที่จะส่งผลกระทบต่อผู้ใช้งานของคุณ"? ฉันมีปัญหาเดียวกันฉันตกลงถ้าเป็น dev เท่านั้น แต่ฉันจะไม่ใช้โอกาสนี้หากไม่มีเอกสารอย่างเป็นทางการที่ระบุสิ่งที่คุณพูดอย่างชัดเจน
Christophe Fondacci

6
สำหรับบางคนที่ได้รับสิ่งนี้เพื่ออัปเดต App Store ด้วย :(
Ajumal

15
น่าเสียดายที่ฉันสามารถยืนยันว่าปัญหานี้ส่งผลกระทบต่อผู้ใช้ที่เป็นผู้ผลิต (ดังนั้นหลังจากอัปเกรดแอปจาก App Store)
Eugenio

ใช่มันมีผลต่อบิลด์การผลิต / การสร้าง App Store
Jonny

แหล่งใดสำหรับสิ่งนี้?
Daniel Springer

27

สำหรับการจำลองเพียง Reset Contents and Settings...


นี่ไม่ใช่คำถาม ประเด็นก็คือเมื่อทำการปรับใช้แอพใหม่ด้วยไอคอนหรือรูปภาพใหม่แอปเหล่านั้นจะไม่ได้รับการรีเฟรชในลักษณะเดียวกันทั้งหมดและบางแอปจะถูกเก็บไว้บนหน้าจอในขณะที่ถูกลบออก
Stephane Paquet

18

@InkGolem

นี่ไม่ใช่ปัญหาที่จะส่งผลกระทบต่อผู้ใช้งานจริงของคุณ

เป็นความจริง.

ฉันประสบปัญหานี้เมื่อฉันเปลี่ยนหน้าจอเรียกใช้ SplashScreen และไอคอนแอพ ฉันลองทุกวิธี แต่ไม่ได้ผล สุดท้ายฉันตีพิมพ์เพียง app ของฉันและดาวน์โหลดใบสมัครของฉันจากร้าน App กับอุปกรณ์ที่ผมไม่ได้ใช้สำหรับการพัฒนา SplashScreen และไอคอนแอปทำงานตามปกติ !!!


1
มีความคิดอะไรที่จะเกิดขึ้นหากคุณมีแอพอยู่แล้วใน appstore และผู้ใช้เพียงแค่อัปเดตแอปพลิเคชั่นด้วยหน้าจอเปิดตัวใหม่
rhcpfan

ฉันมีแอพอยู่แล้วในการดาวน์โหลด appstore และฉันปล่อยการอัปเดตด้วยหน้าจอเปิดตัวใหม่ หลังจากปล่อยแอพของฉันฉันทดสอบกับอุปกรณ์มากกว่า 10 เครื่อง (ไม่ได้ใช้สำหรับการพัฒนา) เพื่อยืนยันว่า "นี่ไม่ใช่ปัญหาที่จะส่งผลกระทบต่อผู้ใช้งานจริงของคุณ" เป็นเรื่องจริงและฉันไม่ได้รับการร้องเรียนใด ๆ หน้าจอ.
chinnawatp

7
ปัญหานี้มีความสุขใน Appstore build สำหรับฉันและเคล็ดลับ @Brian Trzupek ทำงานได้
Ajumal

3
ยืนยันว่าเกิดเหตุการณ์นี้ขึ้นกับงานสร้างสดจาก App Store คำตอบนี้มีปัญหาเกี่ยวกับภาษา ฉันไม่สามารถบอกได้ว่าพวกเขาหมายถึงปัญหาที่เกิดขึ้นส่งผลกระทบต่อการผลิตสร้างหรือไม่ แต่ประสบการณ์เชิงประจักษ์ของฉันบอกว่ามันไม่
จอนนี่

2
มันเกิดขึ้นกับผู้ใช้งานจริง !! หน้าจอสแปลชที่แสดงนั้นเป็นของเก่า การรีบูตโทรศัพท์คงที่ หวังว่าผู้คนจะเห็นสแปลชใหม่ในเวลาต่อไปนี้โดยไม่ต้องรีบูตเครื่อง
Valerio

13

ฉันพบวิธีแก้ปัญหาหากคุณต้องการแก้ไขปัญหานี้จริงๆ Apple มีกลไกบางอย่างในการแคชรูปภาพของหน้าจอเรียกใช้ซึ่งการจัดทำดัชนีโดยใช้ชื่อไฟล์รูปภาพ

เมื่อคุณเปลี่ยนรูปภาพใด ๆ บนหน้าจอเรียกใช้และคุณต้องการเห็นการเปลี่ยนแปลงเหล่านั้นในการเรียกใช้ครั้งถัดไปทันที กรุณาใช้ชื่อภาพใหม่ซึ่งภาพที่คุณเปลี่ยนและเชื่อมโยงไปยังไฟล์ภาพใหม่ในกระดานเรื่องราวหรือ xib

ทำงานอีกครั้งคุณจะเห็นการเปลี่ยนแปลงใหม่ปรากฏขึ้น


1
ฉันไม่ต้องการลบแอปดังนั้นฉันจึงลองอันนี้ รวมถึงการรีสตาร์ทอุปกรณ์ของฉันใช้งานได้สำหรับฉัน
Murray Sagal

สิ่งนี้ไม่ได้ผลสำหรับฉัน การรีสตาร์ทอุปกรณ์ก็ไม่ทำงาน ... ฉันยอมแพ้แล้ว
Lensflare

ไม่ได้ผลสำหรับฉัน ฉันได้ลบ imageView และสร้างใหม่ด้วยรูปภาพใหม่และมันยังไม่ทำงาน
Rickard Elimää

มันไม่ได้ผลสำหรับฉัน ฉันได้ภาพเก่าที่ไม่ได้โหลด (สีพื้นหลังยังคงถูกนำเสนอแทนภาพ) และมันก็ยังถูกนำเสนอในเวลาเพียงเสี้ยววินาทีก่อนที่หน้าจอการเปิดตัวใหม่จะปรากฏขึ้น
Michal Cichon

13

สิ่งนี้ใช้ได้กับฉัน: http://arsenkin.com/launch_screen_image_cache.html

ขอบคุณอีกครั้งที่กระทู้ที่ฉันอ้างถึงข้างต้นฉันพบวิธีแก้ปัญหานี้ - ตั้งชื่อภาพใหม่ของคุณแตกต่างจากภาพที่เคยมีมาก่อนในกรณีที่ภาพใหม่ของคุณมีชื่อเหมือนกับภาพเก่าและนำออกจาก * .xcassets โฟลเดอร์ไปยังไดเรกทอรีโครงการและอ้างอิงใน UIImageView ของคุณ และนั่นคือมัน เสียงงี่เง่าง่าย ๆ แต่โอ้ว้าวฉันโกรธมากแค่ไหน


3
ที่สำคัญนี่คือการเก็บภาพเหล่านั้นออกมาจากแคตตาล็อกสินทรัพย์ ขอบคุณ!
Michal Cichon

3
โซลูชั่นนี้ช่วยได้จริงถ้าคุณใส่ใจ UX ที่ดีของผู้ใช้งานโปรดักชั่นและต้องการหลีกเลี่ยงการเปลี่ยนภาพเก่าและภาพใหม่ที่น่าเกลียด
Michal Cichon

3
ในที่สุดโซลูชั่นที่ใช้งานได้จริง! กุญแจสำคัญในที่นี้คือการนำภาพออกจากโฟลเดอร์ทรัพย์สิน
Elad

1
ทำงานได้อย่างสมบูรณ์แบบโดยไม่ต้องรีสตาร์ทหรือลบแอป
Soufian Hossam

แปลก. แต่ภาพพื้นหลังที่ฉันย้ายออกจากแคตตาล็อกสินทรัพย์บางครั้งไม่โหลดและฉันได้รับพื้นหลังสีดำ ตอนนี้ฉันต้องแก้จุดบกพร่องอีกครั้ง แต่ฉันไม่รู้ว่าจะทำซ้ำได้อย่างไร
Michal Cichon

10

ถอนการติดตั้งแอพรีสตาร์ทโทรศัพท์และติดตั้งแอพของคุณอีกครั้ง ... กรณีนี้ได้รับการแก้ไขจริง


5

ฉันยังต้องเผชิญกับปัญหาเดียวกัน มันเกิดขึ้นเพราะอุปกรณ์จำลอง / iOS เก็บแคชรูปภาพเริ่มต้นเมื่อคุณเปิดใช้แอปพลิเคชันเป็นครั้งแรก ฉันเพิ่มการแก้ไขบางคำตอบของ Brian Trzupek :

  1. ลบชุดรูปภาพจากเนื้อหา Xcode (เช่น launch_image)
  2. เพิ่มชุดภาพใหม่และเพิ่มภาพเข้าไป
  3. ปิดและเปิดอุปกรณ์ iOS (รีเซ็ตเนื้อหาและการตั้งค่าเพื่อจำลอง)
  4. ทำความสะอาดโฟลเดอร์สร้าง Xcode (กดcommand+ option+ shift+ K)
  5. ลบแอพออกจากอุปกรณ์ / ตัวจำลอง (ถ้ามี)
  6. ทำงานอีกครั้ง

5

อะไรที่ทำให้ฉัน:

  • การลบฉากและมุมมองของ LaunchScreen และสร้างขึ้นมาใหม่ ( ตรวจสอบให้แน่ใจว่าคุณได้ตั้งค่าเป็น "มุมมองเริ่มต้นตัวควบคุม" ในตัวตรวจสอบแอตทริบิวต์ )

สิ่งที่ไม่ได้ผลสำหรับฉัน:

  • กำลังลบแอพ
  • รีสตาร์ท iPhone, Mac หรือ Xcode
  • การลบข้อมูลที่ได้รับ
  • การลบคอนเทนเนอร์ของอุปกรณ์
  • การทำความสะอาด
  • ตุ๊กตาวูดู 3 ชิ้นของ Steve Jobs

บันทึก:

บางครั้งการลบ (โปรแกรมจำลอง) ก็จำเป็นเช่นกัน


4
ฉันไม่มั่นใจ ฉันจะต้องการที่ตั้งแหล่งที่มาของตุ๊กตาวูดูของ Steve Jobs เพื่อยืนยัน
Chris Brandsma

3

เพียงเชื่อมต่ออุปกรณ์ของคุณไปที่ Xcode> หน้าต่าง> อุปกรณ์> อุปกรณ์ของคุณตอนนี้อยู่ในแอพที่ติดตั้งเลือกแอพของคุณคลิกขวาและดาวน์โหลดคอนเทนเนอร์ไปที่ไฟล์ที่สร้างขึ้นคลิกขวาแสดงเนื้อหาแพคเกจ AppData ห้องสมุดแคช และลบไฟล์ ตอนนี้ไปที่ Xcode> หน้าต่าง> อุปกรณ์> อุปกรณ์ของคุณ> แอพของคุณและคลิกขวาเพื่อแทนที่คอนเทนเนอร์


3

พูดตามตรงฉันไม่ได้เสี่ยงที่จะแสดงสดโดยไม่แน่ใจว่าสิ่งนี้จะได้รับการปรับปรุงหรือไม่

ดังนั้นสมมติว่าคุณใช้ xcassets วิธีง่ายๆคือ:

  1. ลบชุดภาพเก่า
  2. สร้างขึ้นใหม่ด้วยชื่ออื่นและเพิ่มภาพหน้าจอสแปลชของคุณ
  3. อัปเดตกระดานเรื่องราวของคุณเพื่อใช้การอ้างอิงชุดรูปภาพ 'ใหม่' นี้

มันจะอัปเดตแน่นอน! (ฉันได้ทดสอบกับแอพที่ติดตั้งไว้ในอุปกรณ์แล้ว) ไม่จำเป็นต้องล้างแคชของอุปกรณ์หรืออื่น ๆ


3
  1. ลบแอพของคุณออกจากอุปกรณ์
  2. ปิดอุปกรณ์
  3. เปิดเครื่องอุปกรณ์
  4. ติดตั้งและเปิดใช้แอพ

1

ตกลงดังนั้นฉันจึงพบปัญหา ในแอพเวอร์ชันก่อนหน้าของเราเรากำลังใช้ Launch Screen XIB ที่ไหนสักแห่งในการพัฒนารุ่นใหม่นี้ xib ถูกลบและแทนที่ด้วยภาพเปิดตัวแบบคงที่เท่านั้น

วิธีแก้ไขคือใช้ Launch Screen XIB ฉันสังเกตเห็นว่าทันทีที่ฉันใช้หน้าจอเปิดตัว xib เป็นครั้งแรกไฟล์ที่จัดเก็บในไดเรกทอรีสแน็ปช็อตจะถูกแทนที่ด้วยสแน็ปช็อตของ xib


2
ไม่ฉันกำลังใช้ Launch Screen XIB และไม่ได้อัปเดต ฉันเดาว่าคุณจะแก้ไขปัญหาด้วยการสลับจากหน้าจอเรียกใช้> รูปภาพนิ่ง> หน้าจอเรียกใช้ การปรับเปลี่ยนหน้าจอการเปิดตัวใน XCode และการใช้มันยังคงแสดงหน้าจอการเปิดตัวเก่าบน iPhone รูปภาพถูกแคชบนอุปกรณ์ ฉันเดาว่าถ้าฉันเปลี่ยนชื่อของหน้าจอการเปิดตัวมันจะทำเคล็ดลับ
Christophe Fondacci

การสร้างหน้าจอเรียกใช้งานที่มีชื่อแตกต่างกันไม่สามารถแก้ไขปัญหาได้ แต่ยังคงเห็นชื่อเดิม "ความหวัง" เพียงอย่างเดียวคือ iOS จะสร้างแคชใหม่ในทุกการอัปเดตแอป แต่ฉันไม่สามารถหาเอกสารใด ๆ เกี่ยวกับเรื่องนี้ได้
Christophe Fondacci

1

Xcode 10 / iOS 12

หลังจากลองทุกสิ่งที่กล่าวมาข้างต้นฉันต้องลบ imageview ออกจาก LaunchScreen และแทนที่ด้วยอันใหม่


1

นี่เป็นวิธีที่เร็วที่สุดที่ฉันพบเพื่อแก้ไขปัญหานี้แม้ว่าจะฟังดูโง่เง่าก็ตาม:

  1. คลิกขวาบนLaunchScreen.xibหรือในไฟล์ launchscreen ของคุณและเลือกแล้วเลือกRemove file Remove to trashการดำเนินการนี้จะลบการอ้างอิงทั้งหมดของไฟล์และการอัปเดตที่ผ่านมาออกจากโครงการของคุณ

  2. ไปที่ถังขยะของคุณแล้วลากและวางไฟล์กลับเข้าไปในโครงการ xCode ของคุณ (ภายในyourProjectName)

  3. ทำความสะอาดและสร้างใหม่


1

ใช้รหัสนี้เพื่อล้างแคชของหน้าจอเรียกใช้:

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
    }
}

การใช้งาน:

UIApplication.shared.clearLaunchScreenCache()

0

มีปัญหานี้ด้วย เป็นมือใหม่ทั้งหมดฉันเปลี่ยน LaunchScreen.storyboard เป็น LaunchScreen.xib อย่างไร้เดียงสา การรันล้มเหลว (duh) ดังนั้นฉันจึงเปลี่ยนกลับเป็น. บอร์ดเรียกใช้แอปอีกครั้งเพื่อทดสอบว่าฉันไม่ได้ทำอะไรผิดพลาดขึ้น - และหน้าจอเก่าไม่ปรากฏขึ้นมาก่อน ดังนั้นสิ่งที่ฉันทำก็ต้องล้างแคชเก่าออก


0

พบปัญหาเดียวกัน แต่มีเฉพาะภาพที่ใช้ในบอร์ดเนื้อเรื่องบนหน้าจอ การย้ายรูปภาพจากแค็ตตาล็อกสินทรัพย์เปลี่ยนชื่อ 'เป็นชุดแอป (ตัวอย่างเช่นชุดรูปภาพเก่าในแคตตาล็อกเนื้อหาเรียกว่า launch_logo และรูปภาพในชุดแอปเรียกว่า launchscreen_logo.png) แก้ไขปัญหาสำหรับเรา


0

ฉันเดาว่าสิ่งเหล่านี้ขึ้นอยู่กับสถานการณ์ เมื่อมันเกิดขึ้นที่ debug หรือ test ให้ทำการลบรูปภาพบนหน้าจอ launch หรือถอนการติดตั้งแอพของคุณแล้วเริ่มการเปิดใช้งานใหม่

แต่มันจะไปได้หลังจากเก็บแล้วก็ไม่ได้แก้ปัญหาด้วยการตั้งค่าใหม่และทำความสะอาด


0

ในกรณีของฉันฉันยังไม่ได้เลือกแหล่งที่มาของ AppIcon จากการตั้งค่าแอพ -> ทั่วไป - ป้อนคำอธิบายรูปภาพที่นี่> ไอคอนแอพและเปิดรูปภาพ -> แหล่งไอคอนแอพ


0

ลองใช้ใน 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

โซลูชันทำงานให้ฉัน

  1. ลบแอพของคุณออกจากอุปกรณ์
  2. ปิดอุปกรณ์
  3. เปิดอุปกรณ์
  4. ทำความสะอาดสร้างโฟลเดอร์
  5. สร้างและติดตั้งและเปิดใช้แอปอีกครั้ง

    สนุก


0

ตรวจสอบให้แน่ใจว่าคุณได้ทำตามขั้นตอนเหล่านี้แล้ว

  1. ค้นหาคีย์ ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME ในการตั้งค่าบิลด์และค้นหามูลค่าสินทรัพย์ในแอปพลิเคชันทั้งหมดจากนั้นลบออก
  2. ลบ ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME จากการตั้งค่า Build
  3. สร้างหน้าจอเรียกใช้ใหม่ Xcode -> ไฟล์ -> ใหม่ -> ไฟล์ -> หน้าจอเรียกใช้
  4. ไปที่เป้าหมายหลักของแอป -> ทั่วไป -> ไอคอนแอพและเปิดรูปภาพ -> ไฟล์หน้าจอเรียกใช้ -> เลือกไฟล์หน้าจอเปิดตัวใหม่
  5. หากคุณเพิ่งเปลี่ยนหน้าจอเปิดตัวเก่าให้ลองตั้งชื่อเนื้อหาใหม่ด้วยชื่ออื่น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.