เป็นไปได้หรือไม่ที่ไฟล์ AppleScript .scpt จะยังคงมีไอคอนที่กำหนดเองแม้ว่าจะแก้ไขโค้ดแล้วหรือยัง?


3

ไฟล์:

ฉันสร้างไฟล์ AppleScript .scpt ใน Script Debugger.app

นี่คือวิธีที่ฉันกำหนดไอคอนที่กำหนดเองให้กับไฟล์. scpt นี้:

  • ฉันดาวน์โหลดที่ไม่ซ้ำกันไอคอน (ในรูปแบบ "512px PNG") จากIconArchive.com

  • ฉันเปิดไฟล์. png ด้วย Preview.app ในภาพตัวอย่างฉันคลิกEditto Copyเพื่อวางภาพนี้บนคลิปบอร์ดของฉัน

  • ฉันเปิดGet Infoหน้าต่างไฟล์. scpt ใน Finder ฉันคลิกซ้ายที่ไอคอนเริ่มต้นซึ่งอยู่ที่มุมบนซ้ายของGet Infoหน้าต่าง จากนั้นจะมีโครงร่างสีน้ำเงินล้อมรอบไอคอนเริ่มต้นซึ่งแสดงว่าไอคอนถูกเลือก

  • ⌘ commandสุดท้ายผมวางไอคอนที่กำหนดเองไปที่ไอคอนเริ่มต้นผ่านทางแป้นพิมพ์ลัด V+ ไอคอนที่กำหนดเองถูกตั้งค่าทันที ฉันปิดGet Infoหน้าต่าง


ข้อผิดพลาด:

เมื่อฉันเปิดไฟล์. scpt ใน Script Debugger เพื่อแก้ไขรหัสแล้วทำการบันทึกไฟล์. scpt ไอคอนแบบกำหนดเองจะหายไป

เมื่อบันทึกไอคอนต่อไปนี้จะเข้าแทนที่ไอคอนที่กำหนดเองทันที:

(นี่เป็นไอคอนเริ่มต้นของ OS X สำหรับไฟล์. scpt)

แน่นอนว่าต้องผ่านขั้นตอนการตั้งค่าไอคอนที่กำหนดเองทุกครั้งที่ฉันบันทึก (เช่นแก้ไข) ไฟล์นั้นเป็นความไม่สะดวก

แต่ก็มีข้อผิดพลาดข้อที่สอง: ทุกครั้งที่ฉันเพิ่มไอคอนที่กำหนดเองในGet Infoหน้าต่างขนาดไฟล์ของไฟล์. scpt อีกครั้งจะเพิ่มขึ้นทุกครั้ง กล่าวอีกนัยหนึ่งเมื่อ Script Debugger ลบไอคอนไฟล์ที่กำหนดเองขนาดไฟล์ของไอคอนจะยังคงรวมอยู่เป็นส่วนหนึ่งของขนาดไฟล์. scpt โดยรวม

ขนาดตัวพิมพ์: ขนาดไฟล์ของไฟล์. scpt ที่เป็นปัญหาคือ 12.6 MB ในขณะนี้ ไฟล์ไม่ควรมีขนาดใหญ่กว่า. 5 MB


คำถาม:

ฉันเข้าใจวิธีตั้งค่าไอคอนไฟล์ที่กำหนดเองเป็นไฟล์ Apple App.ดังนั้นไอคอนที่กำหนดเองนี้จะยังคงอยู่หลังจากการแก้ไขแต่ฉันอยากรู้ว่าไฟล์เดียวกันสามารถทำได้สำหรับไฟล์. scpt

มีวิธีใดที่ไอคอนสคริปต์แบบกำหนดเองของฉันจะยังคงอยู่แม้ว่าจะมีการแก้ไขไฟล์. scpt ใน Script Debugger แล้วก็ตาม

ไฟล์นี้เป็นไฟล์. scpt ที่เรียกใช้ผ่านเมนูดร็อปดาวน์แถบเมนู FastScripts.app (ไฟล์. scpt อยู่/Users/Me/Library/Scripts) เมนูดร็อปดาวน์ FastScripts แสดงไอคอนไฟล์ของสคริปต์ซึ่งเป็นคุณสมบัติที่ดี นี่คือเหตุผลที่ฉันต้องการตั้งค่าไอคอนที่กำหนดเองเป็นไฟล์. scpt (เช่นเพื่อให้ฉันสามารถสังเกตเห็นไอคอนแอพพลิเคชั่นในเมนูทางลัด FastScripts)

ไม่มันไม่ใช่เรื่องใหญ่อะไรที่จะแปลงไฟล์. scpt ของ AppleScript ที่ฉันต้องการให้มีไอคอนไฟล์ที่กำหนดเองเป็นไฟล์แอป AppleScript ฉันถามคำถามนี้เพื่อดูว่ามีบางสิ่งที่ฉันขาดหายไปหรือมองข้ามที่นี่


แล้วScript Editorล่ะ

ปรากฏว่าปัญหานี้จะไม่ซ้ำกันดีบักสคริปต์

เมื่อฉันทำตามขั้นตอนเดียวกันในโปรแกรมการแก้ไข AppleScript ดั้งเดิมของ OS X, Script Editor.appไอคอนไฟล์. scpt จะยังคงอยู่ในชั้นเชิงเมื่อทำการบันทึก อย่างไรก็ตามฉันได้สาบานที่จริงแล้วฉันเคยประสบปัญหานี้ใน Script Editor ในอดีต

ตัวอย่างเช่นฉันจำได้ว่าครั้งหนึ่งตัวแก้ไขสคริปต์ปฏิเสธที่จะบันทึกไฟล์. scpt ที่ฉันแก้ไข กล่องโต้ตอบข้อผิดพลาดคลุมเครือถูกนำเสนอในบันทึก ในการบันทึกไฟล์สำเร็จฉันต้องลบไอคอนที่กำหนดเองออกจากGet Infoหน้าต่างFinder's หรือคัดลอกข้อความรหัสและวางลงในไฟล์. scpt ใหม่ (ซึ่งแน่นอนว่าจะต้องมีไอคอนไฟล์. scpt เริ่มต้น)

แต่ในเวลานี้ฉันไม่สามารถทำซ้ำข้อผิดพลาดใน Script Editor ได้อีกต่อไป

ฉันพยายามที่จะไม่ใช้ตัวแก้ไขสคริปต์เพื่อแก้ไข AppleScript ของฉันอีกต่อไป นี่เป็นเพราะ Script Editor ทำงานช้าอาจล้มเหลวเมื่อใช้ไลบรารีสคริปต์ของ บริษัท อื่นและสามารถสร้างอารมณ์ได้เมื่อเปิดและบันทึกไฟล์

จากประสบการณ์ของผมจนถึงตอนนี้ Script Debugger ไม่มีปัญหาเหล่านี้

แน่นอน Script Debugger มีปัญหาอย่างน้อยหนึ่งประเด็น (เช่นปัญหาที่มีรายละเอียดในโพสต์นี้)


OS X El Capitan เวอร์ชัน 10.11.6



"แน่นอนว่าต้องผ่านขั้นตอนการตั้งค่าไอคอนที่กำหนดเองทุกครั้งที่ฉันบันทึก (เช่นแก้ไข) ไฟล์นั้นเป็นความไม่สะดวก" คุณสามารถเขียนสคริปต์เพื่อทำเพื่อคุณ ตามที่คุณพูดตัวแก้ไขสคริปต์จะเก็บไอคอนที่กำหนดเองระหว่างการบันทึกไฟล์. scpt
เดินทางคนแปลกหน้า

คุณเขียนว่า"อย่างที่คุณพูดตัวแก้ไขสคริปต์จะเก็บไอคอนที่กำหนดเองระหว่างการบันทึกไฟล์. scpt" แต่ฉันไม่เห็นว่าสิ่งนี้ดีหรือมีประโยชน์อย่างไร ฉันหมายถึงฉันจะเข้าถึงไอคอนที่กำหนดเองหลังจากบันทึกได้อย่างไร ฉันเห็นพฤติกรรมนี้เป็นสิ่งที่ไม่ดีเพราะมันยังคงเพิ่มขนาดไฟล์ของไฟล์. scpt อย่างไม่มีกำหนดไม่มีผลประโยชน์หรือวัตถุประสงค์ หากฉันทำสิ่งที่คุณแนะนำและสร้าง AppleScript เฉพาะที่กำหนดไอคอนไฟล์ของไฟล์. scpt เป็นไอคอนที่กำหนดเองขนาดไฟล์ของไฟล์. scpt จะยังคงขยายใหญ่ขึ้นเรื่อย ๆ ทุกครั้งที่ไอคอนที่กำหนดเอง ชุด
ทรงกลมของรูบิค

หากมันยังคงเป็นไอคอนแบบกำหนดเองเก่าคุณสามารถตัดไปยังคลิปบอร์ดได้
Way Straring Stranger

ฉันยังไม่เข้าใจคำแนะนำของคุณ เมื่อบันทึกไฟล์. scpt ไอคอนที่กำหนดเองจะหายไปทันที คุณจะตัดไอคอนที่กำหนดเองไปยังคลิปบอร์ดได้อย่างไรหลังจากที่มันถูกแทนที่ด้วยไอคอนไฟล์เริ่มต้นแล้ว?
ทรงกลมของรูบิก

คำตอบ:


3

โดยทั่วไปเมื่อผู้ใช้กำหนดไอคอนที่กำหนดเองให้กับไฟล์โดยการคัดลอกและวางไฟล์ภาพลงในไอคอนที่มุมบนซ้ายบนแผ่น Get Info ของไฟล์ไฟล์รูปภาพจะถูกเก็บไว้เป็นไฟล์com.apple.ResourceFork เสริมของไฟล์ นำไปใช้และสามารถเห็นได้ในเทอร์มิใช้ls -l@ filename.extเพื่อแสดงไฟล์คุณลักษณะเพิ่มเติม เพื่อจัดการคุณสมบัติเพิ่มเติมให้ใช้xattrยูทิลิตี้ใน Terminal โปรดทราบว่าการใช้ไฟล์ภาพคำศัพท์ในรายชื่อนี้เป็นแหล่งที่ถูกต้องใด ๆ ที่คัดลอกบนคลิปบอร์ดเพื่อที่จะวางในแผ่นรับข้อมูล

การใช้ไฟล์ไอคอนซ้ำอีกครั้งหลังจากบันทึกไฟล์. scpt ใน Script Debugger จะทำให้แอcom.apple.ResourceFork ททริบิวต์ที่ขยายเพิ่มขึ้นเรื่อย ๆ ในขณะที่อาจทำให้การเข้าถึงไฟล์ไอคอนสะสมไม่สามารถพูดได้อย่างแน่นอนเพราะฉันไม่ได้ทำพอ การทดสอบ น่าเสียดายที่ในขณะที่ Script Editor เก็บไฟล์ไอคอนที่กำหนดเองไว้ แต่ดูเหมือนว่ามันจะขยายขนาดของcom.apple.ResourceFork แอตทริบิวต์ที่ขยายเพิ่มเช่นกัน

หากต้องการลดขนาดไฟล์โดยการลบcom.apple.ResourceFork แอ็ตทริบิวต์ส่วนขยายออกให้ใช้ไวยากรณ์คำสั่งต่อไปนี้ในเทอร์มินัล:

xattr -d com.apple.ResourceFork filename.ext

จากนั้นนำไอคอนที่กำหนดเองไปใช้กับไฟล์อีกครั้ง

ดูที่หน้า man page สำหรับxattrใน Terminal โดยพิมพ์xattrจากนั้นคลิกขวาที่หน้านั้นเลือกOpen man Pageจากเมนูบริบท

ปัญหาเกี่ยวกับ Script Debugger การรีเซ็ตเป็นไอคอนเริ่มต้นอาจจะต้องใช้กับ Developer หรือใช้วิธีแก้ปัญหาที่แนะนำในคำตอบของ wch1zpink

เนื่องจากแอcom.apple.ResourceFork ททริบิวต์ที่ขยายเพิ่มขึ้นไม่ว่าแอพใดที่คุณใช้ตัวแก้ไขสคริปต์หรือดีบักเกอร์สคริปต์นี่เป็นปัญหาที่ Apple ต้องจัดการ

ฉันรู้ว่าคุณกำลังใช้ OS X El Capitan 10.11.6 แต่ฉันทดสอบสิ่งนี้ภายใต้ macOS Sierra 10.12.5 และพฤติกรรมที่เห็นได้ชัดเหมือนกัน ฉันใช้ Script Debugger 6.0.4

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


ปรับปรุง:

ต้องไปลงถนนที่คล้ายกันภายใต้ OS X 10.8.5 กับโปรแกรมการตั้งค่าไอคอนของไฟล์และมีการทดสอบการแก้ปัญหาเกือบทุกที่นำเสนอภายใต้ฉันสามารถเปลี่ยนไฟล์หรือโฟลเดอร์ไอคอนโดยใช้เทอร์มิผมเลือกที่จะใช้setfileicon จากคำตอบนี้ , เพราะมันใช้คำพูดที่ดีที่สุดสำหรับความต้องการของฉันในเวลา

รหัส AppleScript ต่อไปนี้เป็นรหัสตัวอย่างที่สามารถลบcom.apple.ResourceFork แอ็ตทริบิวต์ส่วนขยายของไฟล์เป้าหมายแบบเป็นโปรแกรมโดยทางโปรแกรมเพื่อลดขนาดสะสมและรีเซ็ตไอคอนของไฟล์เป้าหมาย มันถูกเขียนขึ้นเกี่ยวกับการใช้วิธีแก้ปัญหาที่แนะนำในคำตอบของ wch1zpink โดยอ้างอิงการล็อกไฟล์เพื่อให้ไอคอนยังคงสภาพเดิมในระหว่างการบันทึกภายใต้ Script Debugger

วัตถุประสงค์หลักของโค้ดตัวอย่างนี้คือการแสดงวิธีการลบcom.apple.ResourceFork แอ็ตทริบิวต์ส่วนขยายของไฟล์เป้าหมายและรีเซ็ตไอคอนแบบกำหนดเองโดยทางโปรแกรม ฉันโยนรหัสเพื่อปลดล็อก / ล็อคไฟล์เป้าหมายหากคุณเลือกที่จะใช้วิธีการรักษาไอคอนให้เหมือนเดิมระหว่างการบันทึกหากไม่สามารถลบได้ ผมคิดว่ามันก็ขึ้นอยู่กับวิธีการที่มักจะต้องการที่จะตั้งค่าขนาดของไฟล์เป้าหมายที่แอตทริบิวต์ขยายcom.apple.ResourceFork

tell current application

    set theTargetFilename to "filename.scpt" as string
    set theHomeFolderPath to (path to home folder) as string
    set theScriptsFolder to (path to scripts folder) as string
    set theTargetFilePathname to theScriptsFolder & theTargetFilename as alias
    set theTargetIcon to quoted form of (POSIX path of (theHomeFolderPath & "bin:icon.icns") as string)
    set theTargetExecutable to quoted form of (POSIX path of (theHomeFolderPath & "bin:setfileicon") as string)

    tell application "Finder" to set locked of theTargetFilePathname to false
    do shell script "xattr -d com.apple.ResourceFork " & quoted form of (POSIX path of theTargetFilePathname) & "; exit 0"
    do shell script theTargetExecutable & " " & theTargetIcon & " " & quoted form of (POSIX path of theTargetFilePathname)
    tell application "Finder" to set locked of theTargetFilePathname to true

end tell

หมายเหตุ:

สำหรับวัตถุประสงค์ของโค้ดตัวอย่างนี้ฉันได้วางsetfileiconยูทิลิตีบรรทัดคำสั่งและicon.icnsไฟล์เป้าหมายไว้ในโฟลเดอร์binภายในรูทของโฟลเดอร์Homeของฉัน icon.icnsไฟล์เป็น.icnsไฟล์หนึ่งที่เชื่อมโยงในคำถามของคุณ คุณสามารถใช้ไฟล์PNG ได้แต่ฉันเชื่อว่าไฟล์. icnsให้ภาพที่ดีกว่า

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

สิ่งนี้ได้ทำการทดสอบภายใต้ macOS Sierra 10.12.5 อย่างไรก็ตามมันควรจะทำงานภายใต้ OS X El Capitan 10.11.6


สุกใส โดยเฉพาะอย่างยิ่ง "ตั้งค่าการล็อก" ;-)
wch1zpink

1
@ wch1zpink เครดิตสำหรับการล็อคไฟล์เพื่อให้ไอคอนที่กำหนดเองไม่เปลี่ยนแปลงเมื่อบันทึกด้วย Script Debugger เป็นวิธีแก้ปัญหาทั้งหมดของคุณ (และฉันต้อง +1 คำตอบของคุณ)! แต่สิ่งที่น่ารังเกียจสำหรับ com.apple.ResourceFork ที่ขยายคุณลักษณะเพิ่มขึ้นอย่างต่อเนื่อง อย่างน้อยระหว่างคำตอบของเราทั้งสองมีวิธีแก้ไขปัญหาเพื่อจัดการกับปัญหาทั้งสองอย่าง
user3439894

1
ฉันแค่อยู่ใน man page ของ xattr และทำการเรียนรู้และอ่านหนังสือ ฉันเพิ่งเขียนสคริปต์มาประมาณแปดเดือนแล้วโดยไม่มีทักษะการเขียนโปรแกรมภายใต้เข็มขัดของฉันก่อนหน้านี้ เรียนรู้มากมาย สุจริตคำตอบและคำตอบของคุณสอนฉันมาก ขอบคุณเพื่อน
wch1zpink

ยังอ่านหน้าชุดไอคอนตรวจสอบเพื่อดูว่ามีคำสั่งใดที่เราสามารถใช้ได้หรือไม่ สิ่งที่น่าสนใจ
wch1zpink

1
นายทำ รหัสของคุณดูแลข้อบกพร่องทั้งสองอย่างไม่มีที่ติ ขอบคุณสำหรับความฉลาดของคุณ! ขอบคุณเช่นกัน @ wch1zpink! คำตอบนี้เป็นงานศิลปะ
ทรงกลม rubik ของ

3

จริงๆแล้วมันมีทางออก ฉันดาวน์โหลดไฟล์. icns จากลิงก์ที่คุณให้ไว้ จากนั้นฉันก็ลากไฟล์. icns ทั้งหมดจากหน้าต่าง Finder ไปที่รูปไอคอนในหน้าต่างรับข้อมูลของสคริปต์ที่ฉันสร้างในแอพ Script Debugger หลังจากตั้งไอคอนใหม่แล้วฉันเลือกตัวเลือกเพื่อ "ล็อกไฟล์" ในหน้าต่างรับข้อมูล

ป้อนคำอธิบายรูปภาพที่นี่

หลังจากนี้ฉันเปิดสคริปต์นั้นอีกครั้งในแอพ Script Debugger และทำการเปลี่ยนแปลงเล็กน้อยกับสคริปต์คอมไพล์สคริปต์ใหม่และบันทึกอีกครั้ง เมื่อฉันพยายามบันทึกอีกครั้งฉันได้รับหน้าต่างข้อความนี้

ป้อนคำอธิบายรูปภาพที่นี่

ฉันเลือกตัวเลือกเพื่อ "บันทึก Ayway" และ BINGO !! การแก้ไขถูกบันทึก แต่ไอคอนที่กำหนดเองยังคงไม่เปลี่ยนแปลง


นี่คือคำแนะนำที่อาจมีใครบางคนสามารถคว้าลูกบอลและวิ่งไปกับมันได้ แทนที่จะบันทึกเป็นไฟล์สคริปต์ในดีบักเกอร์สคริปต์ให้บันทึกเป็นบันเดิลสคริปต์ (.scptd) หลังจากทำเช่นนี้ ctrl + คลิกที่ไฟล์นั้นในตัวค้นหาและเลือก“ แสดงเนื้อหาของแพ็คเกจ” เพิ่มไฟล์. ics แบบกำหนดเองของคุณไปยังโฟลเดอร์ Resources คุณจะสังเกตเห็นไฟล์ info.plist เปิดไฟล์ info.plist ใน Xcode หากคุณกดปุ่ม + บนแถวรายการคุณสมบัติข้อมูลจะมีตัวเลือกให้เพิ่มไฟล์ไอคอน

ป้อนคำอธิบายรูปภาพที่นี่

นี่คือขอบเขตของความรู้ของฉัน แต่อย่างใดบางทีไฟล์ไอคอนที่กำหนดเองสามารถตั้งค่าได้ที่นี่


นี่เป็นวิธีแก้ปัญหาที่น่าสนใจสำหรับ Script Debugger ที่ไม่ได้รีเซ็ตไอคอนที่กำหนดเอง แต่น่าเสียดายที่com.apple.ResourceFork แอตทริบิวต์เพิ่มเติมของไฟล์ยังคงเพิ่มขึ้นทุกครั้งที่บันทึก ดังนั้นจะต้องลบcom.apple.ResourceFork แอตทริบิวต์เพิ่มเติมเป็นระยะและไอคอนจะถูกรีเซ็ต ไฟล์จะต้องได้รับการปลดล็อคเพื่อทำเช่นนี้แม้กระทั่งการใช้sudoจะไม่ผ่านการล็อค
user3439894

ฉันไม่เชื่อว่าบันเดิลเอกสารสนับสนุนคุณสมบัติไฟล์ไอคอนใน Info.plist แต่ชุดแอปพลิเคชันทำ
user3439894

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