ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 런타임 시 IDEPreferLogStreaming 에러 해결하기 (with. Tuist)
    Xcode 2024. 5. 27. 19:00

    안녕하세요. 그린입니다 🍏

    이번 포스팅에서는 Xcode에서 앱 실행 시 디버깅 콘솔에 나타나는 IDEPreferLogStreaming Warning 에러에 대해 해결해보겠습니다 🙋🏻

     


    IDEPreferLogStreaming Warning Error?

    신기하게 Xcode 15.3에서부터 앱을 실행하면, 아래와 같이 IDEPreferLogStreaming 관련 워닝이 나타납니다.

     

     

    더 정확히 특정하게는 AppDelegate에서 메인 진입점에 대한 어노테이션을 @main으로 사용할 때 일어납니다.

     

    @main
    class AppDelegate: UIResponder, UIApplicationDelegate {
      ...
    }

     

    이렇게 @main을 사용하면 Xcode 15.3에서 로깅 에러 메시지가 노출됩니다.

    그런데, 예전 사용하던 방식인 @UIApplicationMain으로 사용할때는 해당 워닝 메시지가 노출되지 않아요.

     

    @UIApplicationMain
    class AppDelegate: UIResponder, UIApplicationDelegate {
      ...
    }

     

     

     

    Swift가 발전하여 @UIApplication이 Deprecated되어, 이제는 @main을 사용해야 하기에 그냥 무시할 수도 없죠.

     

     

    swift-evolution/proposals/0383-deprecate-uiapplicationmain-and-nsapplicationmain.md at main · apple/swift-evolution

    This maintains proposals for changes and user-visible enhancements to the Swift Programming Language. - apple/swift-evolution

    github.com

     

     

    해당 에러 메시지는 로깅 시스템을 초기화하지 못했기에 로그 메시지가 누락될 수 있음을 경고합니다. 해결하려면 IDEPreferLogStreaming를 YES로 활성화 하라는 경고 문구를 나타내고 있습니다.

     

    왜 명확히 현재까지 이 문제가 발생하는지 알 수 없지만, 최신 Xcode 업데이트 버전에서의 버그라고 추정됩니다.

     

    그래서, 이후 Xcode 버전에서는 해결될 수 도 있겠지만, 워닝 메시지가 거슬린다면 제거해봐도 좋겠죠?

     


    IDEPreferLogStreaming Warning Error 해결하기

    IDEPreferLogStreaming를 활성화 시키면 문제가 해결될 것으로 보입니다.

    아주 간단합니다.

     

     

    프로젝트를 열어 Edit Scheme을 클릭합니다.

     

     

    그 후, Run Action에서 Environment Variables에 해당 IDEPreferLogStreaming를 YES로 넣어주며 설정해줍니다.

     

    해당 설정을 아래와 같이 Arguments Passed On Launch에 넣어줘도 동일하게 활성화 됩니다.

     

    IDEPreferLogStreaming=YES

     

    다만 하나의 차이는 Environment Variables에서 활성화를 시키고 앱 실행 후 시뮬레이터를 강제로 종료한다면, 아래와 같이 로깅이 끊겼다는 메시지를 받는것 외에는 차이가 없어보입니다.

     

     

    사실, 어차피 시뮬레이터가 강제종료되어서 로깅 커넥션이 끊긴거라 문제될건 없고 어디에서 사용하는것이 제일 적절할지 모르겠지만, 워닝 메시지에서는 환경 변수에 넣으라고 안내하고 있어 Environment Variables를 이용해봤습니다.

     

    만약 Tuist를 통해 프로젝트와 워크스페이스 구성을 하고 있다면 해당 RunAction을 어떻게 설정해야 할까요?

     


    Tuist를 통해 RunAction 구성하기

    아주 쉽습니다.

    Tuist 공식문서에서는 RunAction 부분에서 파라미터로 Arguments 타입을 받을 수 있습니다.

     

    import ProjectDescription
    
    let workspace = Workspace(
      name: "Test",
      projects: [
        "TestApp",
        "TestCore",
        "TestUI"
      ],
      schemes: [
        .scheme(
          name: "Test",
          buildAction: .buildAction(targets: [.project(path: "./TestApp", target: "TestApp")]),
          runAction: .runAction(
            configuration: .release,
            arguments: .arguments(environmentVariables: ["IDEPreferLogStreaming": "YES"])
          ),
          archiveAction: .archiveAction(configuration: .release),
          profileAction: .profileAction(configuration: .release),
          analyzeAction: .analyzeAction(configuration: .release)
        )
      ],
      generationOptions: .options(autogeneratedWorkspaceSchemes: .disabled)
    )

     

    해당 코드처럼 최상단 워크스페이스를 구성한다면, 여기서 scheme을 구성해줄텐데요.

    이때 RunAction을 설정할때 arguments를 이용하면 됩니다.

    arguments에서 environmentVariables 환경 변수 인자를 이용해 [String: String]으로 담아주면 됩니다.

     

    그럼 이제 해당 Tuist를 통해 generate하게 되면 자동적으로 앱 스킴 RunAction 환경 변수에 IDEPreferLogStreaming가 활성화 되어 들어간것을 확인할 수 있죠!

     

    이렇게 사실 앱 실행에 영향을 미치지않긴 하지만, 해당 워닝이 나오는게 보기 싫다면 해결해볼 수 있습니다!

     


    마무리

    왜 항상 애플은 업데이트될때 기본적으로 되던것이 하나씩 안되게 해놓을까요... 🥲

     


    레퍼런스

     

    What is the definition and action of Xcode scheme environment variable IDEPreferLogStreaming?

    What is the definition and action of Xcode scheme environment variable IDEPreferLogStreaming? What does IDEPreferLogStreaming enable or disable? The warning shown below happen after changing @

    stackoverflow.com

     

    RunAction | Tuist

     

    docs.tuist.io

Designed by Tistory.