有什么办法可以折叠Xcode项目中的所有方法吗?

Thi*_*ama 9 xcode objective-c ios

Xcode为当前文件提供方法折叠选项.但有没有办法将其应用于项目中的所有.m文件?

在此输入图像描述

ps:我尝试过Xcode运行脚本和Xcode插件开发,但没有找到合适的解决方案

tsn*_*rri 5

这是一个AppleScript用于此目的.警告:

  • 系统事件是必需的.
  • 如果打开多个工作空间或工作空间包含多个项目,则脚本可能需要更改.
  • 您可能需要.m在项目导航器中选择其他文件而不是其他文件.
    -- Collect all Objective-C file references from the given group.
    on handleGroup(theGroup, codeRefs)
        tell application "Xcode"
            set fileRefs to theGroup's file references
            repeat with x in fileRefs
                if x's file kind is equal to "sourcecode.c.objc" then
                    copy x to end of codeRefs
                end if
            end repeat

            set subgroups to theGroup's groups
            repeat with x in subgroups
                my handleGroup(x, codeRefs)
            end repeat
        end tell
    end handleGroup


    on moveFocusToProjectNavigator()
        tell application "System Events"
            tell process "Xcode"
                set frontmost to true
                tell menu bar item "Navigate" of menu bar 1
                    tell menu 1
                        click menu item "Reveal in Project navigator"
                    end tell
                end tell
            end tell
        end tell
    end moveFocusToProjectNavigator


    on moveFocusToNextArea()
        tell application "System Events"
            tell process "Xcode"
                set frontmost to true
                tell menu bar item "Navigate" of menu bar 1
                    tell menu 1
                        click menu item "Move Focus to Next Area"
                    end tell
                end tell
            end tell
        end tell
    end moveFocusToNextArea


    -- Simulate pressing the up arrow.
    on selectNextItem()
        tell application "System Events"
            tell process "Xcode"
                key code 126
            end tell
        end tell
    end selectNextItem


    on fold(shouldFold)
        set theCommand to "Fold Methods & Functions"
        if shouldFold is equal to 0 then
            set theCommand to "Unfold All"
        end if

        -- Fold the code by using the menu item.
        tell application "System Events"
            tell process "Xcode"
                set frontmost to true

                tell menu bar item "Editor" of menu bar 1
                    tell menu 1
                        tell menu item "Code Folding"
                            tell menu 1
                                click menu item theCommand
                            end tell
                        end tell
                    end tell
                end tell
            end tell
        end tell
    end fold


    on run
        -- Set to one to fold, zero to unfold.
        set shouldFold to 1

        tell application "Xcode"
            set ws to every workspace document
            set theWorkspace to item 1 of ws
            tell theWorkspace
                set pr to item 1 of projects
                set codeRefs to {}
                my handleGroup(pr, codeRefs)

                -- Open each document and fold the code.
                set thePaths to {}
                repeat with x in codeRefs
                    copy x's full path to the end of thePaths
                end repeat
            end tell

            -- If we only have one path, a new workspace won't be opened.
            if 1 is equal to (count of thePaths) then
                open item 1 of thePaths
                my moveFocusToNextArea()
                my fold(shouldFold)
            else
                open thePaths

                set ws to every workspace document
                set theWorkspace to item 1 of ws
                my fold(shouldFold)
                repeat (count of theWorkspace's file references) - 1 times
                    my moveFocusToProjectNavigator()
                    my selectNextItem()
                    my moveFocusToNextArea()
                    my fold(shouldFold)
                end repeat

                -- If we don't wait before closing the window, the last document
                -- won't be folded.
                tell application "System Events" to delay 3

                tell theWorkspace to close
            end if
        end tell
    end run
Run Code Online (Sandbox Code Playgroud)

为了完整起见,这是一个较早的尝试.它很慢,因为它需要一次按URL打开一个文档.

    -- Collect all Objective-C file references from the given group.
    on handleGroup(theGroup, codeRefs)
        tell application "Xcode"
            set fileRefs to theGroup's file references
            repeat with x in fileRefs
                if x's file kind is equal to "sourcecode.c.objc" then
                    copy x to end of codeRefs
                end if
            end repeat

            set subgroups to theGroup's groups
            repeat with x in subgroups
                my handleGroup(x, codeRefs)
            end repeat
        end tell
    end handleGroup

    on run
        tell application "Xcode"
            set ws to every workspace document
            tell item 1 of ws
                set pr to item 1 of projects
                set codeRefs to {}
                my handleGroup(pr, codeRefs)

                -- Open each document and fold the code.
                repeat with x in codeRefs
                    set thePath to x's full path
                    set doc to open thePath

                    tell doc
                        activate
                    end tell

                    -- Fold the code by using the menu item.
                    tell application "System Events"
                        tell process "Xcode"
                            set frontmost to true

                            tell menu bar item "Editor" of menu bar 1
                                tell menu 1
                                    tell menu item "Code Folding"
                                        tell menu 1
                                            click menu item "Fold Methods & Functions"
                                        end tell
                                    end tell
                                end tell
                            end tell
                        end tell
                    end tell

                end repeat
            end tell
        end tell
    end run
Run Code Online (Sandbox Code Playgroud)


Thi*_*ama 1

尘埃落定。

我编写了一个 xCode 插件,可以轻松完成这项工作。
插件: https: //github.com/ThilinaHewagama/HCTAutoFolding