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"
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)
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 플래그를 추가해 강제로 설치할 수 있습니다:
심각 [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
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
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' 옵션을 사용하면 스크립트가 가리키는 파일이나 디렉토리의 실제 경로를 찾을 수 있음. 이는 특히 상대 경로를 포함하는 스크립트에서 유용하며, 심볼릭 링크를 사용하여 다른 위치에 있는 파일을 참조하는 경우에 특히 유용함.