2020년 2월 26일 수요일

Jenkins Unity plugin (Editor command line arguments)


-quit -batchmode -stackTraceLogType Full -projectPath "$WORKSPACE"/BasicShapeSprite-master -executeMethod MyEditorScript.PerformMacOSXBuild GNSS.ios.qa.ini -logFile $WORKSPACE/build_unitylog.txt


-quit
다른 커맨드 실행을 마친 후 Unity 에디터를 종료합니다. 이렇게 하면 오류 메시지가 숨겨질 수 있습니다. 하지만 Editor.log 파일에서는 여전히 확인할 수 있습니다.

-batchmode
배치 모드로 Unity를 실행합니다. 항상 다른 커맨드 라인 인자와 함께 사용해야 합니다. 그래야만 팝업 창이 나타나지 않고 사람이 직접 개입할 필요가 없어집니다. 스크립트 코드를 실행하는 도중에 예외가 발생하면 에셋 서버 업데이트 또는 기타 작업이 실패하고, Unity는 반환 코드 1 을 표시하며 즉시 종료됩니다.
배치 모드에서 Unity는 최소 버전의 로그 출력을 콘솔에 전송합니다. 하지만 로그 파일에는 여전히 전체 로그 정보가 포함됩니다. 에디터에 동일한 프로젝트가 열린 경우에는 배치 모드로 프로젝트를 열 수 없습니다. Unity의 단일 인스턴스만 한 번에 실행할 수 있습니다.
팁: 배치 모드에서 에디터 또는 스탠드얼론 플레이어를 실행하는지 확인하려면 Application.isBatchMode 연산자를 사용하십시오.
프로젝트가 -batchmode를 사용하여 아직 임포트되지 않은 경우 타겟 플랫폼이 기본 플랫폼입니다. -batchmode를 사용할 때 다른 플랫폼을 강제 설정하려면 -buildTarget 옵션을 사용하십시오.

-stackTraceLogType
자세한 디버깅 기능입니다. StackTraceLogging을 사용하면 자세한 로깅을 허용하도록 기능을 제어할 수 있습니다. 모든 설정에서 None, Script Only 및 Full 을 선택할 수 있습니다(예, -stackTraceLogType Full).

-projectPath
주어진 경로에서 프로젝트를 엽니다.

-executeMethod
Unity가 프로젝트를 열자마자, 그리고 옵션 에셋 서버 업데이트가 완료되면 정적 메서드를 실행합니다. 
이 옵션을 사용하면 연속 통합, 유닛 테스트 실행, 빌드 제작 또는 데이터 준비 등의 작업을 수행할 수 있습니다. 
커맨드 라인 프로세스에서 오류를 반환하려면 Uniy가 반환 코드 1 을 표시하고 종료되도록 하는 예외를 발생시키거나, 
0이 아닌 반환 코드를 포함한 EditorApplication.Exit를 호출해야 합니다. 
파라미터를 전달하려면 파라미터를 커맨드 라인에 추가한 후 System.Environment.GetCommandLineArgs를 사용하여 함수 내에서 검색해 가져오십시오. 
-executeMethod를 사용하려면 둘러싸인 스크립트를 Editor 폴더에 배치해야 합니다. 또한 실행하는 메서드는 반드시 static으로 정의되어야 합니다.

-logFile
에디터 또는 Windows/Linux/OSX 스탠드얼론 로그 파일이 작성되는 위치를 지정합니다. 
경로가 누락되면 OSX와 Linux는 콘솔에 출력을 작성합니다. Windows는 %LOCALAPPDATA%\Unity\Editor\Editor.log 경로를 기본으로 사용합니다.




[MyEditorScript.cs]

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System;
using UnityEditor;
using UnityEditor.Build.Reporting;
lass MyEditorScript {
 static string[] SCENES = FindEnabledEditorScenes();
 static string APP_NAME = "YourProject";
 static string TARGET_DIR = "target";
 [MenuItem("Custom/CI/Build Mac OS X")]
 static void PerformMacOSXBuild() {
  string target_dir = APP_NAME + ".app";
  GenericBuild(SCENES, TARGET_DIR + "/" + target_dir, BuildTarget.iOS, BuildOptions.None);
 }
 private static string[] FindEnabledEditorScenes() {
  List EditorScenes = new List();
  foreach(EditorBuildSettingsScene scene in EditorBuildSettings.scenes) {
   if (!scene.enabled) continue;
   EditorScenes.Add(scene.path);
  }
  return EditorScenes.ToArray();
 }
 static void GenericBuild(string[] scenes, string target_dir, BuildTarget build_target, BuildOptions build_options) {
  EditorUserBuildSettings.SwitchActiveBuildTarget(build_target);
  BuildReport report = BuildPipeline.BuildPlayer(scenes, target_dir, build_target, build_options);
  BuildSummary summary = report.summary;
  if (summary.result == BuildResult.Failed) {
   throw new Exception("BuildPlayer failure: " + summary.result);
  }
 }
}

2020년 2월 20일 목요일

mac 에서 linux처럼 ll command 사용하기

~/.bash_profile 을 찾아 아래 command 추가

alias ll='ls -lG'

option
 -l      List in long format.
 -G     Enable colour output.

2020년 2월 18일 화요일

Mac Jenkins에서 docker에러(Cannot run program "docker": error=2)

Jenkins 빌드중 docker에서 에러나는 경우

java.io.IOException: error=2, No such file or directory at java.lang.UNIXProcess.forkAndExec(Native Method) at java.lang.UNIXProcess.(UNIXProcess.java:248) at java.lang.ProcessImpl.start(ProcessImpl.java:134) : : :Caused: java.io.IOException: Cannot run program "docker": error=2, No such file or directory : : :Finished: FAILURE

macos 버전은 Catalina
jenkins는 brew로 설치(https://jenkins.io/download/lts/macos/)
Mac용 docker Desktop 설치(https://hub.docker.com/?overlay=onboarding)

brew를 사용한 jenkins lts버전 설치후 다음 명령으로 구동하면 위와 같은 오류 발생 함 #brew service start jenkins-lts

하지만 서비스로 구동하지 않으면 해당 오류가 나타나지 않고 정상 수행됨 #jenkins-lts

권한 문제가 아닐까 짐작, 다른 해결 방법 찾는중.

2019년 10월 26일 토요일

Visual Studio Code(이하 VSCode)를 유니티 에디터 - Mac

Visual Studio Code(이하 VSCode)를 유니티 에디터로 디버깅
준비 :Mac에 Unity, VSCode, Homebrew

버전

  • MacOSX (10.13 High Sierra)
  • Unity (2017.1.2f1 Personal)
  • VSCode (1.16.0)
  • Homebrew (1.3.1)

1. 각 도구의 다운로드 및 설치

  • .NET Core
    • .Net Framework의 일부 (부분)에서 크로스 플랫폼에 대응하고있다
    • 요점 .NF 기능의 일부를 Linux와 Mac에서도 사용할 수 있도록 한 것 (같은 인식에있어있어?)
    • 링크에 설치 방법이 써 있으므로 참조
  • VSCode.cs
    • VSCode을 Unity 편집기로 사용하기위한 설정 파일
    • GitHub의 DownloadZip에서 떨어 뜨려 압축
    • Unity 프로젝트 /Assets/Plugins/Editor/VSCode.cs로 배치

2. Homebrew에서 필요한 도구를 설치

mono

$ brew install mono

openssl

$ brew install openssl
위 명령 /usr/local/opt/openssl에 설치된다. 
그러나 이대로라면 기본에 /usr/bin/openssl이용되어 버리기 때문에 
.bash_profile새로운 사람의 설치 경로를 추기한다.
$ vim ~ / .bash_profile
.bash_profile
export PATH = / usr / local / opt / openssl / bin : $ PATH

3. VSCode에 필요한 플러그인을 설치

Command + p 명령 팔레트를 표시
스크린 샷 2017-08-28 13.00.33.png
입력 폼에 ext install계속 설치하려는 플러그인 이름을 입력하고 Return한다.

C # for Visual Studio Code

ext install C #

Debugger for Unity

ext install Debugger for Unity

Mono Debug

ext install Mono Debug
이스토루이 완료 Extensions 설치 된 항목에 표시된다.
스크린 샷 2017-08-28 13.png

4. Unity를 시작 연계 설정

1. Unity> Preferences> External Tools를 열 
2. External Script Editor 항목 풀다운 메뉴에서 Other를 선택 
3. Visual Studio Code.app을 선택 (풀다운이 code로 바뀐다)
스크린 샷 2017-06-02 11.56.26.png
4. Unity> Preferences> VSCode 열기 (기본 기본으로 OK)
스크린 샷 2017-06-02 11.56.43.png

5. VSCode을 시작 IntelliSense를 사용하려면

인텔리 센스 (IntelliSense)는 Microsoft Visual Studio 통합 개발 환경에서 사용되는 Microsoft에서 자동 완성 시스템.
1. Unity 측의 Assets> Open C # Project In Code에서 VSCode을 시작
스크린 샷 2017-08-28 13.21.12.png
2. 프로젝트 아래에 .sln 파일이 있는지 확인
스크린 샷 2017-08-28 13_2.png
3. 적당히 .cs 파일을 열 
4. VSCode의 상태 표시 줄 (화면 하단의 녀석)의 오른쪽이 뿌제쿠토 이름 .sln되어 있는지 확인 
(되어 있지 않다면 클릭하여 변경)
스크린 샷 2017-08-28 13_4.png
IntelliSense가 활성화 될 때 보완과 함수 점프 등의 기능 외에 
n references같은 느낌으로 그 메소드와 변수가 다른 사람에서 얼마나 참조되고 있는지를 알 수있게된다.

6. 단계 실행

  1. 브레이크 포인트를 적당하게 붙여 VSCode 측을 디버그 모드로 전환한다. Shift + Command + d)
  2. 화면 상단의 Start Debugging 버튼 (디버그 창 녹색 삼각형)을 클릭하면 DEBUG CONSOLE에 부착 정보가 출력되고 대기 상태가된다.
  3. Unity 측에서 재생하면 브레이크 포인트에서 처리가 중지됩니다.
스크린 샷 2017-08-28 13.35.33.png

.gitignore_global

#################################################################################

*~
.DS_Store

#################################################################################
###### android studio ###########################################################
# Built application files
*.apk
*.ap_

# Files for the ART/Dalvik VM
*.dex

# Java class files
*.class

# Generated files
**/build/
**/release/
**/.idea/

**/bin/
**/gen/
**/out/

# Gradle files
**/.gradle/

# Local configuration file (sdk path, etc)
local.properties

# Proguard folder generated by Eclipse
**/proguard/

# Log Files
*.log

# Android Studio Navigation editor temp files
**/.navigation/

# Android Studio captures folder
captures/

# IntelliJ
*.iml
.idea/workspace.xml
.idea/tasks.xml
.idea/gradle.xml
.idea/dictionaries
.idea/libraries

# Keystore files
# Uncomment the following line if you do not want to check your keystore files in.
#*.jks

# External native build folder generated in Android Studio 2.2 and later
.externalNativeBuild

# Google Services (e.g. APIs or Firebase)
google-services.json

# Freeline
freeline.py
freeline/
freeline_project_description.json

# fastlane
fastlane/report.xml
fastlane/Preview.html
fastlane/screenshots
fastlane/test_output
fastlane/readme.md



#################################################################################
###### Xcode ####################################################################
# Xcode
#
# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore

## Build generated
**/build/
**/DerivedData/

## Various settings
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
**/xcuserdata/

## Other
*.moved-aside
*.xccheckout
*.xcscmblueprint

## Obj-C/Swift specific
*.hmap
*.ipa
*.dSYM.zip
*.dSYM

# CocoaPods
#
# We recommend against adding the Pods directory to your .gitignore. However
# you should judge for yourself, the pros and cons are mentioned at:
# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
#
# Pods/

# Carthage
#
# Add this line if you want to avoid checking in source code from Carthage dependencies.
# Carthage/Checkouts

Carthage/Build

# fastlane
#
# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
# screenshots whenever they are needed.
# For more information about the recommended setup visit:
# https://docs.fastlane.tools/best-practices/source-control/#source-control

fastlane/report.xml
fastlane/Preview.html
fastlane/screenshots
fastlane/test_output

# Code Injection
#
# After new code Injection tools there's a generated folder /iOSInjectionProject
# https://github.com/johnno1962/injectionforxcode

iOSInjectionProject/



#################################################################################
###### Unity3d ##################################################################
#
**/[Ll]ibrary/
**/[Tt]emp/
**/[Oo]bj/
**/[Bb]uild/
**/[Bb]uilds/
**/Assets/AssetStoreTools*

# Visual Studio 2015 cache directory
**/.vs/

# Autogenerated VS/MD/Consulo solution and project files
ExportedObj/
.consulo/
*.csproj
*.unityproj
*.sln
*.suo
*.tmp
*.user
*.userprefs
*.pidb
*.booproj
*.svd
*.pdb

# Unity3D generated meta files
*.pidb.meta
*.pdb.meta

# Unity3D Generated File On Crash Reports
sysinfo.txt

# Builds
*.apk
*.unitypackage


#################################################################################

자바,자바스크립트, C#, 파이썬 정규표현식

자바 정규표현식
import java.io.Console;
import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class MyRegex{
    public static void main(String[] args){
        String searchTarget = "Luke Skywarker 02-123-4567 luke@daum.net";

        Pattern pattern = Pattern.compile("\\d+");
        Matcher matcher = pattern.matcher(searchTarget);
        while(matcher.find()){
            System.out.println(matcher.group(0));
        }
    }
}

자바스크립트 정규표현식
var searchTarget = "Luke Skywarker 02-123-4567 luke@daum.net";
var regex = /\d+/g;
console.log(searchTarget.match(regex));

C# 정규표현식
using System;
using System.Text.RegularExpressions;

public class RegexTest {
public static void Main() {
string regex = "\\d+";
string searchTarget = "Luke Skywarker 02-123-4567 luke@daum.net";
foreach (Match m in Regex.Matches(searchTarget, regex)){
Console.WriteLine(m.Value);
}
}
}

파이썬 정규표현식
regex = r'\d+'
search_target = '''Luke Skywarker 02-123-4567 luke@daum.net
princess leia 010 2454 3457 leia@gmail.com'''

import re
result = re.findall(regex, search_target)
print("\n".join(result))

AB(Apache HTTP server benchmarking tool)를 활용해 벤치마킹 테스트

AB(Apache HTTP server benchmarking tool)를 활용해 벤치마킹 테스트

옵션 설명
-n 성능을 검사하기위해 보내는 요청수. 기본값으로 요청을 한번만 보내기때문에 일반적인 성능검사 결과를 얻을 수 없다.
-c 동시에 요청하는 요청수. 기본적으로 한번에 한 요청만을 보낸다.
-g 측정한 모든 값을 'gnuplot' 혹은 TSV (Tab separate values, 탭으로 구분한 값) 파일에 기록한다. 라벨은 output 파일의 첫번째 라인을 참고한다.
-t 성능을 검사하는 최대 초단위 시간. 내부적으로 -n 50000을 가정한다. 정해진 시간동안 서버 성능을 검사할때 사용한다. 기본적으로 시간제한 없이 검사한다.
-v 출력 수준을 지정한다.
    4 이상이면 헤더에 대한 정보를,
    3 이상이면 (404, 202, 등) 응답코드를,
    2 이상이면 경고(warning)와 정보(info)를 출력한다.
-A 프록시를 통해 BASIC Authentication 정보를 제공한다.
    :로 구분한 사용자명과 암호를 base64 인코딩하여 전송한다.
-X proxy[:port] 프록시 서버를 사용하여 요청한다.

$ ab -n 10 -c 3 http://www.google.com
3개의 프로세스(쓰레드)가 10개씩 쏴주는게 아니라 3개의 풀을 가지고 10번 요청을 진행한다.