500개 정도 되는 파일을 A -> B로 복사

A 폴더 안에는 여러개의 하위 폴더가 있고, 폴더를 제외한 파일만 B로 복사하려면..

 

robocopy, xcopy 다 해봤지만.. 옵션을 잘못 줘서인지 잘 되지 않았다.. (디렉토리만 복사, 복사는 돼도 파일 구조도 그대로 복사.. 등등)

 

조건: PowerShell 이 아닌 windows 기본 명령 프롬프트

 

Windows+R -> cmd

 

명령창에서 아래 명령어 실행 (이동은 do copy 대신 do move )

 

for /R "대상 폴더 경로" %f in (*) do copy "%f" "복사할 폴더 경로"


ex)
for /R "C:\Users\user\Documents\mysql" %f in (*) do copy "%f" "C:\Users\user\Documents\mapper"

 

 

강제 업데이트..

또 찾아온 강제 업데이트..

 

앱 스토어에 업데이트 하기 위해 target API Level을 34이상으로 조정

 

build.gradle(Module:app)에서 compileSdkVersion, targetSdkVersion을 기존 33에서 34로 변경 후 빌드

 

오류 발생.. 

Execution failed for task ':app:processDebugResources'.
> A failure occurred while executing com.android.build.gradle.internal.res.LinkApplicationAndroidResourcesTask$TaskAction
   > AAPT2 aapt2-4.2.2-7147631-osx Daemon #0: Unexpected error during link, attempting to stop daemon.
     This should not happen under normal circumstances, please file an issue if it does.

 

검색 , gpt 등에서 확인해보니 gradle 버전을 최선으로 변경하고, 여러 설정 변경 후 "File > Invalidate Caches / Restart." 하라는데 모두 실패

 

성공한 my case 올려봄. (IDE: Android Studio Koala | 2024.1.1)

 

1. Settings > Build,Execution,Deployment > Build Tools > Gradle 메뉴

- Gradle user home 에 gradle 7.6.4 버전 설정해줌.(로컬 특정 위치에 저장해야함 )

- Gradle JDK 에 Java 11 경로 설정해줌.

gradle 버전 다운로드 : https://gradle.org/releases/

 

Gradle | Releases

Find binaries and reference documentation for current and past versions of Gradle.

gradle.org

 

 

2.gradle-wrapper.properties 에 distributionUrl 에 gradle 7.5 설정

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

 

3. Tools > AGP(Android Gradle Plugin) Upgrade Assistant.. 를 통해 업데이트

- build.gradle(project)에서 gradle 관련 classpath 잡아주면 업데이트가 되는지 알았으나, 완벽하게 되지 않는 모양이다.

buildscript {
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:7.4.2'
        
        ...

 

Run selected steps 를 클릭하여 실행

 

정상적으로 빌드 성공..

 

build tool에 대한 이해 부족으로 매번 삽질하네.. 공부 좀 해야겠다!

xcode 빌드 시 Build Failed 발생

 

확인 결과 , Pods 폴더에 설치된 외부 라이브러리에서 오류 발생

 

pod 재설치 GoGo

 

1.XCODE 프로그램 종료

2. ~/Library/Developer/Xcode/DerivedData 에서 프로젝트 임시 파일들 삭제

 

숨김 파일 보이기 단축키는 command+shift+. (dot)

3. ProjectName.xcworkspace 파일 삭제

- 프로젝트 경로에서 projectName.xcworkspace 파일 삭제

4.Podfile.lock 파일 과 Pods 폴더 삭제

5. 해당 경로에서 터미널 창 열고 pod install 실행

 

-참고-

특정 라이브러리 설치 시 오류

[!] FirebaseAnalytics requires CocoaPods version >= 1.12.0, which is not satisfied by your current version, 1.10.1.

 

CocoaPods 업데이트 실시

sudo gem install cocoapods

<!-- 업데이트 후 버전 확인 -->
pod --version

 

cocoapods 업데이트 시 아래와 같은 오류 발생되면..

xcodeproj's executable "xcodeproj" conflicts with /usr/local/bin/xcodeproj
Overwrite the executable? [yN]  ERROR:  Error installing cocoapods:
	"xcodeproj" from xcodeproj conflicts with /usr/local/bin/xcodeproj

 

 

Gem 설치 경로를 강제로 덮어쓰기

xcodeproj가 설치될 때 충돌하는 파일을 덮어쓰도록 허용할 수 있습니다. Overwrite the executable? [yN] 메시지가 나타날 때 y를 입력하여 덮어쓰기를 허용하면 됩니다.

만약 여전히 오류가 발생한다면, 설치할 때 --force 플래그를 추가해 강제로 설치할 수 있습니다:

sudo gem install cocoapods --force
 

Gem 업데이트 시 --user-install 사용

시스템 전체에 설치하지 않고 사용자 디렉터리에 설치할 수 있습니다:

gem install cocoapods --user-install
 

 

 

'iOS' 카테고리의 다른 글

Command PhaseScriptExecution failed with a nonzero exit code  (0) 2024.04.01

https://developers.google.com/oauthplayground/

 

STEP1. Select & authorize APIs

> 1. Firebase Cloud Messaging API v1  - https://www.googleapis.com/auth/cloud-platform

       선택

   2. 하단 'Authorize APIs' 버튼 클릭 후 계정 선택 

      (단 , firebase console에 해당 프로젝트 등록한 계정을 선택해야함)

 

STEP2. Exchange authorization code fo tokens

> 1. "Exchange authorization code for tokens" 버튼 눌러 접속 계정으로 인증 

   2. Auto-refresh the token before it expires 체크

STEP3. Configure request to API

 

1. 발송 테스트일 경우

 

HTTP Method : POST 설정, 

Request URI : https://fcm.googleapis.com/v1/projects/{프로젝트 이름}/messages:send

입력

2. Enter request body 클릭 하여 아래 내용 입력

{
   "message":{
      "token":"coIUgZJYdESHigmL4qWahT:APA91bHI5Z1FoK6ZjtnN9aipO.....",
      "notification":{
        "body":"This is an FCM notification message!",
        "title":"FCM Message"
      }
   }
}

 

3. Send the request 버튼 클릭하여 실제 기기에서 푸시 알림 수신되는지 확인

 

 

 

- 현재 root 계정에서 실행 중인 tomcat 프로세스를 일반 계정에서 실행되도록 변경

- 환경: CentOS Linux 7 (Core)

더보기

-- 리눅스 환경 확인

 [UNIDB:root:/etc]#cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"

1. /etc/init.d 에 등록한 서비스에서 수정 유저 변경 

=> su - test 추가

#!/bin/bash
### BEGIN INIT INFO
# Provides:    tomcat
# Required-Start:  $remote_fs $syslog
# Required-Stop:   $remote_fs $syslog
# Default-Start:   2 3 4 5
# Default-Stop:    0 1 6
# Short-Description: auto start Tomcat server
# Description: start web server
### END INIT INFO
# description: tomcat start stop restart
# proccessname: tomcat
# chkconfig: 234 20 80

#export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64/jre
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64/jre
export CATALINA_HOME=/uniapp/app/tomcat8

case $1 in
start)
echo “Start tomcat “
su - test -c $CATALINA_HOME/bin/startup.sh
;;
stop)
echo “shutdown tomcat “
su - test -c $CATALINA_HOME/bin/shutdown.sh
;;
restart)
echo “restart tomcat “
su - test -c $CATALINA_HOME/bin/shutdown.sh
su - test -c $CATALINA_HOME/bin/startup.sh
;;
*)
echo “Usage: service tomcat {start|stop|restart}”
exit 1
esac
exit 0

 

2.profile 에 JAVA_HOME 관련 설정 확인

=> 동적 라이브러리를 찾는 경로를 지정하는 환경 변수인 LD_LIBRARY_PATH 설정 ( 보통 프로그램이 실행될 때 필요한 공유 라이브러리 (.so 파일)를 찾기 위해 시스템의 기본 경로 외에 추가적인 경로 지정)

...
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64/jre
export CATALINA_HOME=/uniapp/app/tomcat8
export PATH=/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:$JAVA_HOME/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64/jre/lib/amd64

PATH=$PATH:/data/unidb/mariadb/bin
...

 

3. 서비스 실행 시 아래 오류 발생

심각 [main] org.apache.catalina.core.StandardService.initInternal Failed to initialize connector [Connector[HTTP/1.1-80]]
 org.apache.catalina.LifecycleException: Failed to initialize component [Connector[HTTP/1.1-80]]
	at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:113)
	at org.apache.catalina.core.StandardService.initInternal(StandardService.java:549)
	at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:107)
	at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:875)
	at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:107)
	at org.apache.catalina.startup.Catalina.load(Catalina.java:621)
	at org.apache.catalina.startup.Catalina.load(Catalina.java:644)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:311)
	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:494)
Caused by: org.apache.catalina.LifecycleException: Protocol handler initialization failed
	at org.apache.catalina.connector.Connector.initInternal(Connector.java:1000)
	at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:107)
	... 12 more
Caused by: java.net.SocketException: 허가 거부
	at sun.nio.ch.Net.bind0(Native Method)
	at sun.nio.ch.Net.bind(Net.java:461)
	at sun.nio.ch.Net.bind(Net.java:453)
	at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:222)
	at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:85)
	at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:210)
	at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:982)
	at org.apache.tomcat.util.net.AbstractJsseEndpoint.init(AbstractJsseEndpoint.java:245)
	at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:620)
	at org.apache.coyote.http11.AbstractHttp11Protocol.init(AbstractHttp11Protocol.java:66)
	at org.apache.catalina.connector.Connector.initInternal(Connector.java:997)
	... 13 more

 

=>  일반 계정이 포트 80을 바인딩하려고 할 때 발생하는 문제입니다. 리눅스에서는 기본적으로 포트 번호가 1024 이하인 포트(예: 80번 포트)는 root 권한이 있는 사용자만 사용할 수 있음.

 

4. setcap 명령어로 특정 바이너리에게 낮은 포트에 바인딩할 수 있는 권한 부여

sudo setcap 'cap_net_bind_service=+ep' /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64/jre/bin/java

setcap 정상 적용 확인
[UNIDB:root:/etc]#getcap /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64/jre/bin/java
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64/jre/bin/java = cap_net_bind_service+ep

 

 


 

5. 실행 시 오류 : 

sudo service tomcat start

Using CATALINA_BASE:   /uniapp/app/tomcat8
Using CATALINA_HOME:   /uniapp/app/tomcat8
Using CATALINA_TMPDIR: /uniapp/app/tomcat8/temp
Using JRE_HOME:        /usr/lib/jvm/java-1.8.0ps -openjdk-1.8.0.412.b08-1.el7_9.x86_64/jre
Using CLASSPATH:       /uniapp/app/tomcat8/bin/bootstrap.jar:/uniapp/app/tomcat8/bin/tomcat-juli.jar
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64/jre/bin/java: error while loading shared libraries: libjli.so: cannot open shared object file: No such file or directory

 

해결 : 

libjli.so 파일을 LD_LIBRARY_PATH 로 이동

더보기

cordova 버전 : 9.0.0

gradle 버전 : 6.7.1

exit app 플러그인 추가 할 때 아래처럼 에러 발생

 

goomgoom@starnet example_copy % cordova plugin add cordova-plugin-app-exit
Installing "cordova-plugin-app-exit" for android
Failed to install 'cordova-plugin-app-exit': Error: /Users/goomgoom/AndroidStudioProjects/example_copy/platforms/android/cordova/version: Command failed with exit code 1 Error output:
node:internal/modules/cjs/loader:1215
  throw err;
  ^

Error: Cannot find module 'properties-parser'
Require stack:
- /Users/goomgoom/AndroidStudioProjects/example_copy/platforms/android/cordova/lib/AndroidProject.js
- /Users/goomgoom/AndroidStudioProjects/example_copy/platforms/android/cordova/Api.js
- /Users/goomgoom/AndroidStudioProjects/example_copy/platforms/android/cordova/version
    at Module._resolveFilename (node:internal/modules/cjs/loader:1212:15)
    at Module._load (node:internal/modules/cjs/loader:1038:27)
    at wrapModuleLoad (node:internal/modules/cjs/loader:212:19)
    at Module.require (node:internal/modules/cjs/loader:1297:12)
    at require (node:internal/modules/helpers:123:16)
    at Object.<anonymous> (/Users/goomgoom/AndroidStudioProjects/example_copy/platforms/android/cordova/lib/AndroidProject.js:22:25)
    at Module._compile (node:internal/modules/cjs/loader:1460:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1544:10)
    at Module.load (node:internal/modules/cjs/loader:1275:32)
    at Module._load (node:internal/modules/cjs/loader:1091:12) {
  code: 'MODULE_NOT_FOUND',
  requireStack: [
    '/Users/goomgoom/AndroidStudioProjects/example_copy/platforms/android/cordova/lib/AndroidProject.js',
    '/Users/goomgoom/AndroidStudioProjects/example_copy/platforms/android/cordova/Api.js',
    '/Users/goomgoom/AndroidStudioProjects/example_copy/platforms/android/cordova/version'
  ]
}

Node.js v22.3.0
    at ChildProcess.whenDone (/usr/local/lib/node_modules/cordova/node_modules/cordova-common/src/superspawn.js:135:23)
    at ChildProcess.emit (node:events:520:28)
    at maybeClose (node:internal/child_process:1105:16)
    at Socket.<anonymous> (node:internal/child_process:457:11)
    at Socket.emit (node:events:520:28)
    at Pipe.<anonymous> (node:net:339:12)

 

해결:  npm install properties-parser 

(properties-parser  수동으로 추가)

 

 

goomgoom@starnet android % cordova plugin add cordova-plugin-app-exit
Installing "cordova-plugin-app-exit" for android
(node:14085) [DEP0128] DeprecationWarning: Invalid 'main' field in '/Users/goomgoom/AndroidStudioProjects/example_copy/node_modules/objectorarray/package.json' of 'dist/index.js'. Please either fix that or report it to the module author
(Use `node --trace-deprecation ...` to show where the warning was created)
Adding cordova-plugin-app-exit to package.json
goomgoom@starnet android % cordova plugin ls                         
cordova-plugin-app-exit 0.0.1 "ExitApp"
cordova-plugin-whitelist 1.3.4 "Whitelist"

 

잘 설치 됨

-- 인덱스 조각화 조회

SELECT

            distinct OBJECT_NAME(S.OBJECT_ID) AS 'TableName'

          , I.NAME AS 'IndexName'

          , ROUND(AVG_FRAGMENTATION_IN_PERCENT, 2) AS 'Fragmentation %'

 FROM SYS.DM_DB_INDEX_PHYSICAL_STATS(DB_ID(),NULL,NULL,NULL,NULL) AS S

 INNER JOIN SYS.INDEXES AS I

 ON S.OBJECT_ID = I.OBJECT_ID AND S.INDEX_ID = I.INDEX_ID

 WHERE S.DATABASE_ID = DB_ID() 

 AND I.NAME IS NOT NULL -- HEAP은 무시

 AND OBJECTPROPERTY(S.OBJECT_ID, 'IsMsShipped') = 0 -- 시스템 개체 무시

 and ROUND(AVG_FRAGMENTATION_IN_PERCENT, 2) > 10

 

-- 조각화 테이블에 대한 인덱스 리빌드 및 통계 업데이트.

set quoted_identifier  OFF

DECLARE @tablename varchar(255)

DECLARE @tablename_header varchar(255)

declare @sql varchar(1000)

DECLARE tnames_cursor CURSOR FOR SELECT

            distinct OBJECT_NAME(S.OBJECT_ID) AS 'TableName'

--          , I.NAME AS 'IndexName'

--          , ROUND(AVG_FRAGMENTATION_IN_PERCENT, 2) AS 'Fragmentation %'

 FROM SYS.DM_DB_INDEX_PHYSICAL_STATS(DB_ID(),NULL,NULL,NULL,NULL) AS S

 INNER JOIN SYS.INDEXES AS I

 ON S.OBJECT_ID = I.OBJECT_ID AND S.INDEX_ID = I.INDEX_ID

 WHERE S.DATABASE_ID = DB_ID() -- 현재 데이터베이스

 AND I.NAME IS NOT NULL -- HEAP은 무시

 AND OBJECTPROPERTY(S.OBJECT_ID, 'IsMsShipped') = 0 -- 시스템 개체 무시

 and ROUND(AVG_FRAGMENTATION_IN_PERCENT, 2) > 10

OPEN tnames_cursor

FETCH NEXT FROM tnames_cursor INTO @tablename

WHILE (@@fetch_status <> -1)



    BEGIN

     IF (@@fetch_status <> -2)





         BEGIN

        SELECT @tablename_header = "Updating Indexes FOR table " + RTRIM(UPPER(@tablename))

        PRINT @tablename_header

  SET @sql = 'ALTER INDEX ALL ON ' + @tablename + ' REBUILD WITH (PAD_INDEX = ON, FILLFACTOR = 90) '

    EXEC (@sql)

  PRINT (@sql)

     END

     FETCH NEXT FROM tnames_cursor INTO @tablename

END

PRINT " "

PRINT " "

SELECT @tablename_header = "************* NO MORE TABLES" +

 " *************"

PRINT @tablename_header

PRINT " "

PRINT "Indexes have been updated FOR ALL tables."

DEALLOCATE tnames_cursor

go

 -- 통계 업데이트

 EXEC sp_updatestats @resample='resample';

GO

set quoted_identifier  ON

 

결과 로그

각 테이블 인덱스 별 업데이트 여부

 

리빌드 후 인덱스 조각화 조회

 

조각화 90이상인 테이블들이 많았으나 리빌드 후 50이하로 떨어졌다.

 

Build 및 Debug 로는 정상 동작하지만,  Product > Archieve 실행하면 위 이미지처럼  "Command PhaseScriptExecution failed with a nonzero exit code"  에러 발생..

 

pod install로 추가한 library 가 잘못된 모양..

 

/Users/macos/Library/Developer/Xcode/DerivedData 의 프로젝트 임시 데이터 삭제 후

podfile.lock, Pods 폴더, .xcworkspace 파일 삭제 후 pod install 로 재설치 후 해도 같은 증상

 

확인 결과 아래 경로의 Pods-{프로젝트 이름}-frameworks 파일의 코드에서 source="$(readlink  "${source}")  중간에  "-f" 추가

 

local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"

  if [ -L "${source}" ]; then
    echo "Symlinked..."
    source="$(readlink -f "${source}")" // "-f" 추가
  fi

 

정상적으로 archieve 되는 것 확인

 

여기서 -f 옵션은 'readlink'가 심볼릭 링크를 따라가면서 실제 파일이나 디렉토리의 절대 경로를 출력하도록 하는 역할을 함

즉, '-f' 옵션을 사용하면 스크립트가 가리키는 파일이나 디렉토리의 실제 경로를 찾을 수 있음. 이는 특히 상대 경로를 포함하는 스크립트에서 유용하며, 심볼릭 링크를 사용하여 다른 위치에 있는 파일을 참조하는 경우에 특히 유용함.

'iOS' 카테고리의 다른 글

[Xcode] CocoaPods 재설치  (0) 2024.10.31

+ Recent posts