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

时间:2014-11-27 07:39:10

标签: ios objective-c xcode

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

enter image description here

p.s:我试过Xcode运行脚本& Xcode插件开发,但未能找到合适的解决方案

3 个答案:

答案 0 :(得分: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

为了完整起见,这是一个较早的尝试。它非常慢,因为它需要一次按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

答案 1 :(得分:2)

也许更容易和更好的解决方案将使用热键: 当你打开一些.m文件时,只需按 Cmd + Alt + Shirt +< - 折叠 要么 Cmd + Alt + Shirt + - >折叠

答案 2 :(得分:1)

完成并拂去灰尘。

我写了一个xCode插件,很容易完成这项工作 插件:https://github.com/ThilinaHewagama/HCTAutoFolding

相关问题