now can package ipa, still problems with signing

This commit is contained in:
2026-01-02 01:56:22 +02:00
parent 5759e401af
commit e3faa6f53b
21 changed files with 312 additions and 21 deletions

View File

@@ -0,0 +1,92 @@
#include "appletool.h"
#include "helper.h"
#include "runner.h"
void AppleManifest_t::SetPackageID( CUtlString szPackageID )
{
m_szPackageID = szPackageID;
}
void AppleManifest_t::SetPackageName( CUtlString szPackageName )
{
m_szPackageName = szPackageName;
}
void AppleManifest_t::SetPackageExecutable( CUtlString szPackageExecutable )
{
m_szPackageExecutable = szPackageExecutable;
}
CUtlString AppleManifest_t::BuildManifest()
{
CPUProject_t project = {};
project.m_szName = m_szPackageName;
unsigned int hash = project.GenerateProjectHash();
CUtlString szOutputDir = CUtlString("%s/apple/%u_%s/app/",FPC_TEMPORAL_DIRNAME, hash, m_szPackageID.GetString());
filesystem2->MakeDirectory(szOutputDir);
filesystem2->CopyFile(szOutputDir, m_szPackageExecutable);
CUtlString szInfoPlist = CUtlString("%s/Info.plist", szOutputDir.GetString());
FILE *pInfoPlistFile = V_fopen(szInfoPlist, "wb");
V_fprintf(pInfoPlistFile, "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n");
V_fprintf(pInfoPlistFile, "<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n");
V_fprintf(pInfoPlistFile, "<plist version=\"1.0\">\n");
V_fprintf(pInfoPlistFile, "<dict>\n");
V_fprintf(pInfoPlistFile, "<key>CFBundleIdentifier</key>\n");
V_fprintf(pInfoPlistFile, "<string>%s</string>\n", m_szPackageID.GetString());
V_fprintf(pInfoPlistFile, "<key>CFBundleName</key>\n");
V_fprintf(pInfoPlistFile, "<string>%s</string>\n", m_szPackageName.GetString());
V_fprintf(pInfoPlistFile, "<key>CFBundleDisplayName</key>\n");
V_fprintf(pInfoPlistFile, "<string>%s</string>\n", m_szPackageName.GetString());
V_fprintf(pInfoPlistFile, "<key>CFBundleExecutable</key>\n");
V_fprintf(pInfoPlistFile, "<string>%s</string>\n", m_szPackageExecutable.GetFileName().GetString());
V_fprintf(pInfoPlistFile, "<key>CFBundlePackageType</key>\n");
V_fprintf(pInfoPlistFile, "<string>APPL</string>\n");
V_fprintf(pInfoPlistFile, "<key>CFBundleVersion</key>\n");
V_fprintf(pInfoPlistFile, "<string>1.0</string>\n");
V_fprintf(pInfoPlistFile, "<key>CFBundleShortVersionString</key>\n");
V_fprintf(pInfoPlistFile, "<string>1.0</string>\n");
V_fprintf(pInfoPlistFile, "<key>LSRequiresIPhoneOS</key>\n");
V_fprintf(pInfoPlistFile, "<true/>\n");
V_fprintf(pInfoPlistFile, "<key>UIDeviceFamily</key>\n");
V_fprintf(pInfoPlistFile, "<array>\n");
V_fprintf(pInfoPlistFile, "<integer>1</integer>\n");
V_fprintf(pInfoPlistFile, "<integer>2</integer>\n");
V_fprintf(pInfoPlistFile, "</array>\n");
V_fprintf(pInfoPlistFile, "</dict>\n");
V_fclose(pInfoPlistFile);
return szOutputDir;
}
class CAppleTool: public IAppleTool
{
public:
virtual CUtlString BuildPackage( AppleManifest_t manifest, CUtlString szManifestDir ) override;
virtual CUtlString SignPackage( const char *szIpa, const char *szPassword ) override;
};
CUtlString CAppleTool::BuildPackage( AppleManifest_t manifest, CUtlString szManifestDir )
{
CUtlVector<CUtlString> args = {};
args = {
"-r",
CUtlString("../%s.ipa", manifest.m_szPackageName.GetString()),
CUtlString("."),
};
runner->Run("zip",szManifestDir, args);
runner->Wait();
return CUtlString("../%s.ipa", manifest.m_szPackageName.GetString());
}
CUtlString CAppleTool::SignPackage( const char *szIpa, const char *szPassword )
{
}
IAppleTool *AppleTool()
{
static CAppleTool s_tool;
return &s_tool;
}

View File

@@ -103,7 +103,7 @@ BuildFile_t *CProjectBuilder::BuildProject( const char *szProjectName, const cha
*pfnGetProjectObject = FPC_GetProjectObject;
for (auto a: stBuildFileInfo.m_dependantFiles)
{
BuildProject("something", CUtlString("%s/%s/build.cpp",szWd.GetString(),a));
BuildProject("something", CUtlString("%s/%s",szWd.GetString(),a));
}
Plat_SetWorkingDir(szWd);

View File

@@ -33,10 +33,10 @@ protected:
virtual void UseDynamicLookup( CUtlVector<CUtlString> &cmd, bool bUse ) override;
// includes whole file
virtual void UseFullFile( CUtlVector<CUtlString> &cmd ) override;
virtual void UseFullFile( CUtlVector<CUtlString> &cmd, LinkProject_t *pProject ) override;
// includes used stuff in a file
virtual void UsePartialFile( CUtlVector<CUtlString> &cmd ) override;
virtual void UsePartialFile( CUtlVector<CUtlString> &cmd, LinkProject_t *pProject ) override;
virtual void LinkFile( CUtlVector<CUtlString> &cmd, const char *szName ) override;
virtual void LinkLibraryObject( CUtlVector<CUtlString> &cmd, const char *szName ) override;
@@ -72,6 +72,9 @@ void CClangLinker::SetTarget( CUtlVector<CUtlString> &cmd, LinkProject_t *pProje
if (pProject->linkType == ELINK_DYNAMIC_LIBRARY)
cmd.AppendTail("-shared");
if (pProject->m_target.kernel == TARGET_KERNEL_IOS)
cmd.AppendTail("-fuse-ld=lld");
cmd.AppendTail("-target");
cmd.AppendTail(pProject->m_target.GetTriplet());
}
@@ -137,15 +140,17 @@ void CClangLinker::UseDynamicLookup( CUtlVector<CUtlString> &cmd, bool bUse )
}
void CClangLinker::UseFullFile( CUtlVector<CUtlString> &cmd )
void CClangLinker::UseFullFile( CUtlVector<CUtlString> &cmd, LinkProject_t *pProject )
{
cmd.AppendTail("-Wl,--whole-archive");
if (pProject->m_target.kernel != TARGET_KERNEL_IOS)
cmd.AppendTail("-Wl,--whole-archive");
}
void CClangLinker::UsePartialFile( CUtlVector<CUtlString> &cmd )
void CClangLinker::UsePartialFile( CUtlVector<CUtlString> &cmd, LinkProject_t *pProject )
{
cmd.AppendTail("-Wl,--no-whole-archive");
if (pProject->m_target.kernel != TARGET_KERNEL_IOS)
cmd.AppendTail("-Wl,--no-whole-archive");
}

View File

@@ -102,12 +102,12 @@ CUtlVector<CUtlString> ILinker::BuildLinkCommandLine( LinkProject_t *pProject, c
SetOutputFile(cmd, szOutputFileName);
SetSysroot(cmd, pProject, NULL);
SetDefaultLibraryPaths(cmd, pProject);
UseFullFile(cmd);
UseFullFile(cmd, pProject);
for (auto &o: pProject->objects)
{
LinkFile(cmd, o.m_szObjectFile);
}
UsePartialFile(cmd);
UsePartialFile(cmd, pProject);
for (auto &o: pProject->libraryObjects)
{

View File

@@ -2,6 +2,9 @@
#include "runner.h"
#include "c.h"
#include "ld.h"
#include "tier2/ifilesystem.h"
IFileSystem *filesystem;
void *LibFpcInit()
{
@@ -9,6 +12,12 @@ void *LibFpcInit()
runner = (IRunner*)CreateInterface(RUNNER_INTERFACE_NAME, NULL);
ccompiler = (ICCompiler*)CreateInterface(CLANG_C_COMPILER_INTERFACE_NAME, NULL);
linker = (ILinker*)CreateInterface(CLANG_LINKER_INTERFACE_NAME, NULL);
void *pFilesystem = Plat_LoadLibrary("libfilesystem_std.so");
CreateInterfaceFn pFilesystemFactory = Sys_GetFactory(pFilesystem);
filesystem = (IFileSystem*)pFilesystemFactory(FILESYSTEM_INTERFACE_VERSION, NULL);
filesystem->Init();
V_printf("----- %p\n",filesystem);
return NULL;
}

View File

@@ -32,10 +32,10 @@ protected:
virtual void UseDynamicLookup( CUtlVector<CUtlString> &cmd, bool bUse ) override;
// includes whole file
virtual void UseFullFile( CUtlVector<CUtlString> &cmd ) override;
virtual void UseFullFile( CUtlVector<CUtlString> &cmd, LinkProject_t *pProject ) override;
// includes used stuff in a file
virtual void UsePartialFile( CUtlVector<CUtlString> &cmd ) override;
virtual void UsePartialFile( CUtlVector<CUtlString> &cmd, LinkProject_t *pProject ) override;
virtual void LinkFile( CUtlVector<CUtlString> &cmd, const char *szName ) override;
virtual void LinkLibraryObject( CUtlVector<CUtlString> &cmd, const char *szName ) override;
@@ -81,13 +81,13 @@ void CMSVCLinker::UseDynamicLookup( CUtlVector<CUtlString> &cmd, bool bUse )
}
void CMSVCLinker::UseFullFile( CUtlVector<CUtlString> &cmd )
void CMSVCLinker::UseFullFile( CUtlVector<CUtlString> &cmd, LinkProject_t *pProject )
{
}
void CMSVCLinker::UsePartialFile( CUtlVector<CUtlString> &cmd )
void CMSVCLinker::UsePartialFile( CUtlVector<CUtlString> &cmd, LinkProject_t *pProject )
{
}