From 6fcb49ba9c9d789c8b95352e195623556d352c84 Mon Sep 17 00:00:00 2001
From: Sam Lantinga <[EMAIL REDACTED]>
Date: Thu, 23 Jan 2025 11:01:26 -0800
Subject: [PATCH] Updated package documentation
---
INSTALL.md | 49 ++
README.md | 21 +
README.txt | 15 -
Xcode/SDL_ttf.xcodeproj/project.pbxproj | 28 +-
Xcode/pkg-support/resources/INSTALL.md | 37 +
Xcode/pkg-support/resources/ReadMe.txt | 28 -
Xcode/pkg-support/resources/SDL_DS_Store | Bin 0 -> 10244 bytes
.../resources/framework/INSTALL.md | 35 +
Xcode/pkg-support/sdl_logo.pdf | Bin 0 -> 163800 bytes
.../showfont.xcodeproj/project.pbxproj | 20 +-
.../pkg-support/android/INSTALL.md.in | 146 ++--
.../pkg-support/android/README.md.in | 77 --
build-scripts/pkg-support/mingw/INSTALL.md.in | 48 ++
build-scripts/pkg-support/msvc/INSTALL.md.in | 39 +
.../pkg-support/msvc/arm64/INSTALL.md.in | 13 +
.../pkg-support/msvc/x64/INSTALL.md.in | 13 +
.../pkg-support/msvc/x86/INSTALL.md.in | 13 +
docs/INTRO-androidstudio.md | 7 +
docs/INTRO-cmake.md | 52 ++
docs/INTRO-emscripten.md | 52 ++
docs/INTRO-visualstudio.md | 15 +
docs/INTRO-xcode.md | 17 +
README-versions.md => docs/README-versions.md | 0
docs/hello.c | 710 ++++++++++++++++++
24 files changed, 1239 insertions(+), 196 deletions(-)
create mode 100644 INSTALL.md
create mode 100644 README.md
delete mode 100644 README.txt
create mode 100644 Xcode/pkg-support/resources/INSTALL.md
delete mode 100644 Xcode/pkg-support/resources/ReadMe.txt
create mode 100644 Xcode/pkg-support/resources/SDL_DS_Store
create mode 100644 Xcode/pkg-support/resources/framework/INSTALL.md
create mode 100644 Xcode/pkg-support/sdl_logo.pdf
delete mode 100644 build-scripts/pkg-support/android/README.md.in
create mode 100644 build-scripts/pkg-support/mingw/INSTALL.md.in
create mode 100644 build-scripts/pkg-support/msvc/INSTALL.md.in
create mode 100644 build-scripts/pkg-support/msvc/arm64/INSTALL.md.in
create mode 100644 build-scripts/pkg-support/msvc/x64/INSTALL.md.in
create mode 100644 build-scripts/pkg-support/msvc/x86/INSTALL.md.in
create mode 100644 docs/INTRO-androidstudio.md
create mode 100644 docs/INTRO-cmake.md
create mode 100644 docs/INTRO-emscripten.md
create mode 100644 docs/INTRO-visualstudio.md
create mode 100644 docs/INTRO-xcode.md
rename README-versions.md => docs/README-versions.md (100%)
create mode 100644 docs/hello.c
diff --git a/INSTALL.md b/INSTALL.md
new file mode 100644
index 00000000..ea4d03b6
--- /dev/null
+++ b/INSTALL.md
@@ -0,0 +1,49 @@
+# To build and use SDL_ttf:
+
+SDL_ttf supports a number of development environments:
+- [CMake](docs/INTRO-cmake.md)
+- [Visual Studio on Windows](docs/INTRO-visualstudio.md)
+- [Xcode on Apple platforms](docs/INTRO-xcode.md)
+- [Android Studio](docs/INTRO-androidstudio.md)
+- [Emscripten for web](docs/INTRO-emscripten.md)
+
+SDL_ttf is also usable in other environments. The basic steps are to use CMake to build the library and then use the headers and library that you built in your project. You can search online to see if anyone has specific steps for your setup.
+
+# Documentation
+
+An API reference and additional documentation is available at:
+
+https://wiki.libsdl.org/SDL3_ttf
+
+# Example code
+
+There are simple example programs in the examples directory.
+
+If you're using CMake, you can build them adding `-DSDLTTF_SAMPLES=ON` to the CMake command line when building SDL_ttf.
+
+If you're using Visual Studio there are separate projects in the VisualC directory.
+
+If you're using Xcode there are separate projects in the Xcode directory.
+
+# Discussions
+
+## Discord
+
+You can join the official Discord server at:
+
+https://discord.com/invite/BwpFGBWsv8
+
+## Forums/mailing lists
+
+You can join SDL development discussions at:
+
+https://discourse.libsdl.org/
+
+Once you sign up, you can use the forum through the website or as a mailing list from your email client.
+
+## Announcement list
+
+You can sign up for the low traffic announcement list at:
+
+https://www.libsdl.org/mailing-list.php
+
diff --git a/README.md b/README.md
new file mode 100644
index 00000000..bf12a376
--- /dev/null
+++ b/README.md
@@ -0,0 +1,21 @@
+
+SDL_ttf 3.0
+
+This library is a wrapper around the FreeType and Harfbuzz libraries, allowing you to use TrueType fonts to render text in SDL applications.
+
+The latest version of this library is available from GitHub:
+https://github.com/libsdl-org/SDL_ttf/releases
+
+Installation instructions and a quick introduction is available in
+[INSTALL.md](INSTALL.md)
+
+This library is distributed under the terms of the zlib license,
+available in [LICENSE.txt](LICENSE.txt). This library uses and
+may include the FreeType library, licensed under the
+[FTL](https://gitlab.freedesktop.org/freetype/freetype/-/blob/master/docs/FTL.TXT),
+and may use or include the HarfBuzz library, licensed under the
+[MIT license](https://github.com/harfbuzz/harfbuzz/blob/main/COPYING).
+
+Enjoy!
+
+Sam Lantinga (slouken@libsdl.org)
diff --git a/README.txt b/README.txt
deleted file mode 100644
index 9dc4f02a..00000000
--- a/README.txt
+++ /dev/null
@@ -1,15 +0,0 @@
-
-SDL_ttf 3.0
-
-The latest version of this library is available from GitHub:
-https://github.com/libsdl-org/SDL_ttf/releases
-
-This library is a wrapper around the FreeType and Harfbuzz libraries, allowing you to use TrueType fonts to render text in SDL applications.
-
-See the header file SDL_ttf.h and the example showfont.c for documentation on this library. This documentation is also available online at https://wiki.libsdl.org/SDL3_ttf
-
-Be careful when including fonts with your application, as many of them are copyrighted. The Microsoft fonts, for example, are not freely redistributable and even the free "web" fonts they provide are only redistributable in their special executable installer form (May 1998). There are plenty of freeware and shareware fonts available on the Internet though, and may suit your purposes.
-
-This library is under the zlib license, see the file "LICENSE.txt" for details.
-
-Portions of this software are copyright © 2013 The FreeType Project (www.freetype.org). All rights reserved.
diff --git a/Xcode/SDL_ttf.xcodeproj/project.pbxproj b/Xcode/SDL_ttf.xcodeproj/project.pbxproj
index 6a01fbeb..aab4c94c 100644
--- a/Xcode/SDL_ttf.xcodeproj/project.pbxproj
+++ b/Xcode/SDL_ttf.xcodeproj/project.pbxproj
@@ -62,10 +62,12 @@
BE48FD6207AFA17000BB41DA /* SDL_ttf.c in Sources */ = {isa = PBXBuildFile; fileRef = F567D67A01CD962A01F3E8B9 /* SDL_ttf.c */; };
F307EE29282738F8003915D7 /* svg.c in Sources */ = {isa = PBXBuildFile; fileRef = F307EE28282738F8003915D7 /* svg.c */; };
F33F083D2CC41C810062C26D /* SDL_textengine.h in Headers */ = {isa = PBXBuildFile; fileRef = F33F083C2CC41C810062C26D /* SDL_textengine.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ F341242A2D42C44700D6C2B7 /* INSTALL.md in Resources */ = {isa = PBXBuildFile; fileRef = F34124292D42C44700D6C2B7 /* INSTALL.md */; };
+ F341242D2D42C47A00D6C2B7 /* LICENSE.txt in Resources */ = {isa = PBXBuildFile; fileRef = F341242B2D42C47A00D6C2B7 /* LICENSE.txt */; };
+ F341242E2D42C47A00D6C2B7 /* README.md in Resources */ = {isa = PBXBuildFile; fileRef = F341242C2D42C47A00D6C2B7 /* README.md */; };
F34400402D4033CE003F26D7 /* SDL3.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F344003F2D4033CE003F26D7 /* SDL3.framework */; };
F344FFBF2D3EB53C003F26D7 /* SDL_gpu_textengine.c in Sources */ = {isa = PBXBuildFile; fileRef = F344FFBE2D3EB53C003F26D7 /* SDL_gpu_textengine.c */; };
F364A5B82620E1A200325ECE /* FTL.TXT in Resources */ = {isa = PBXBuildFile; fileRef = F364A5B72620E1A200325ECE /* FTL.TXT */; };
- F364A5C42620E22400325ECE /* ReadMe.txt in Resources */ = {isa = PBXBuildFile; fileRef = F364A5C32620E22400325ECE /* ReadMe.txt */; };
F3696FE4278F7107003A7F94 /* sdf.c in Sources */ = {isa = PBXBuildFile; fileRef = F3696FE3278F7107003A7F94 /* sdf.c */; };
F384BB6C261EC0760028A248 /* autofit.c in Sources */ = {isa = PBXBuildFile; fileRef = F384BB6B261EC0760028A248 /* autofit.c */; };
F384BB8B261EC0DE0028A248 /* ftbdf.c in Sources */ = {isa = PBXBuildFile; fileRef = F384BB76261EC0DD0028A248 /* ftbdf.c */; };
@@ -189,10 +191,13 @@
BE48FD6707AFA17000BB41DA /* SDL3_ttf.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SDL3_ttf.framework; sourceTree = BUILT_PRODUCTS_DIR; };
F307EE28282738F8003915D7 /* svg.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = svg.c; path = ../external/freetype/src/svg/svg.c; sourceTree = "<group>"; };
F33F083C2CC41C810062C26D /* SDL_textengine.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDL_textengine.h; sourceTree = "<group>"; };
+ F34124292D42C44700D6C2B7 /* INSTALL.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = INSTALL.md; sourceTree = "<group>"; };
+ F341242B2D42C47A00D6C2B7 /* LICENSE.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = LICENSE.txt; path = ../LICENSE.txt; sourceTree = SOURCE_ROOT; };
+ F341242C2D42C47A00D6C2B7 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; name = README.md; path = ../README.md; sourceTree = SOURCE_ROOT; };
+ F341242F2D42C49B00D6C2B7 /* INSTALL.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = INSTALL.md; sourceTree = "<group>"; };
F344003F2D4033CE003F26D7 /* SDL3.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = SDL3.framework; sourceTree = "<group>"; };
F344FFBE2D3EB53C003F26D7 /* SDL_gpu_textengine.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = SDL_gpu_textengine.c; sourceTree = "<group>"; };
F364A5B72620E1A200325ECE /* FTL.TXT */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = FTL.TXT; path = ../../../external/freetype/docs/FTL.TXT; sourceTree = "<group>"; };
- F364A5C32620E22400325ECE /* ReadMe.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ReadMe.txt; sourceTree = "<group>"; };
F3696FE3278F7107003A7F94 /* sdf.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = sdf.c; path = ../external/freetype/src/sdf/sdf.c; sourceTree = "<group>"; };
F384BB6B261EC0760028A248 /* autofit.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = autofit.c; path = ../external/freetype/src/autofit/autofit.c; sourceTree = "<group>"; };
F384BB76261EC0DD0028A248 /* ftbdf.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ftbdf.c; path = ../external/freetype/src/base/ftbdf.c; sourceTree = "<group>"; };
@@ -354,6 +359,14 @@
name = Frameworks;
sourceTree = "<group>";
};
+ F341241E2D42C41200D6C2B7 /* framework */ = {
+ isa = PBXGroup;
+ children = (
+ F34124292D42C44700D6C2B7 /* INSTALL.md */,
+ );
+ path = framework;
+ sourceTree = "<group>";
+ };
F384BB6A261EC02C0028A248 /* FreeType */ = {
isa = PBXGroup;
children = (
@@ -477,11 +490,14 @@
F59C710100D5CB5801000001 /* resources */ = {
isa = PBXGroup;
children = (
+ F341241E2D42C41200D6C2B7 /* framework */,
7FC2F5DB285AC0D600836845 /* CMake */,
- F364A5C32620E22400325ECE /* ReadMe.txt */,
F384BE61261ECD9F0028A248 /* FreeType-LICENSE.txt */,
F364A5B72620E1A200325ECE /* FTL.TXT */,
F384BE60261ECD9F0028A248 /* HarfBuzz-LICENSE.txt */,
+ F341242B2D42C47A00D6C2B7 /* LICENSE.txt */,
+ F341242C2D42C47A00D6C2B7 /* README.md */,
+ F341242F2D42C49B00D6C2B7 /* INSTALL.md */,
);
path = resources;
sourceTree = "<group>";
@@ -565,11 +581,13 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
- F364A5C42620E22400325ECE /* ReadMe.txt in Resources */,
F384BE65261ECD9F0028A248 /* FreeType-LICENSE.txt in Resources */,
F3E1F8762A79462A00AC76D3 /* config.xcconfig in Resources */,
+ F341242D2D42C47A00D6C2B7 /* LICENSE.txt in Resources */,
+ F341242E2D42C47A00D6C2B7 /* README.md in Resources */,
F364A5B82620E1A200325ECE /* FTL.TXT in Resources */,
7FC2F5DC285AC0D600836845 /* CMake in Resources */,
+ F341242A2D42C44700D6C2B7 /* INSTALL.md in Resources */,
F384BE62261ECD9F0028A248 /* HarfBuzz-LICENSE.txt in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
@@ -621,7 +639,7 @@
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "set -ex\n\nPRODUCT_NAME=SDL3_ttf\n\nmkdir -p build/dmg-tmp/share/cmake/$PRODUCT_NAME\ncp -a build/$PRODUCT_NAME.xcframework build/dmg-tmp/\ncp pkg-support/resources/ReadMe.txt build/dmg-tmp\ncp pkg-support/share/cmake/${PRODUCT_NAME}/${PRODUCT_NAME}Config.cmake build/dmg-tmp/share/cmake/${PRODUCT_NAME}\ncp pkg-support/share/cmake/${PRODUCT_NAME}/${PRODUCT_NAME}ConfigVersion.cmake build/dmg-tmp/share/cmake/${PRODUCT_NAME}\n\n# remove the .DS_Store files if any (we may want to provide one in the future for fancy .dmgs)\nrm -rf build/dmg-tmp/.DS_Store\n\n# create the dmg\nhdiutil create -ov -fs HFS+ -volname $PRODUCT_NAME -srcfolder build/dmg-tmp build/$PRODUCT_NAME.dmg\n\n# clean up\nrm -rf build/dmg-tmp\n";
+ shellScript = "set -ex\n\nPRODUCT_NAME=SDL3_ttf\n\nmkdir -p build/dmg-tmp/share/cmake/$PRODUCT_NAME\ncp -a build/$PRODUCT_NAME.xcframework build/dmg-tmp/\n\ncp ../LICENSE.txt build/dmg-tmp\ncp ../README.md build/dmg-tmp\ncp pkg-support/resources/INSTALL.md build/dmg-tmp\ncp pkg-support/share/cmake/${PRODUCT_NAME}/${PRODUCT_NAME}Config.cmake build/dmg-tmp/share/cmake/${PRODUCT_NAME}\ncp pkg-support/share/cmake/${PRODUCT_NAME}/${PRODUCT_NAME}ConfigVersion.cmake build/dmg-tmp/share/cmake/${PRODUCT_NAME}\n\n# remove the .DS_Store files if any (we may want to provide one in the future for fancy .dmgs)\nrm -rf build/dmg-tmp/.DS_Store\n\n# for fancy .dmg\nmkdir -p build/dmg-tmp/.logo\ncp pkg-support/resources/SDL_DS_Store build/dmg-tmp/.DS_Store\ncp pkg-support/sdl_logo.pdf build/dmg-tmp/.logo\n\n# create the dmg\nhdiutil create -ov -fs HFS+ -volname $PRODUCT_NAME -srcfolder build/dmg-tmp build/$PRODUCT_NAME.dmg\n\n# clean up\nrm -rf build/dmg-tmp\n";
};
/* End PBXShellScriptBuildPhase section */
diff --git a/Xcode/pkg-support/resources/INSTALL.md b/Xcode/pkg-support/resources/INSTALL.md
new file mode 100644
index 00000000..2dbd9d8e
--- /dev/null
+++ b/Xcode/pkg-support/resources/INSTALL.md
@@ -0,0 +1,37 @@
+
+# Using this package
+
+This package contains SDL_ttf built for Xcode, and includes support for macOS, iOS and tvOS.
+
+To use this package in Xcode, drag `SDL3_ttf.xcframework` into your project.
+
+To use this package in a CMake project, copy both `SDL3_ttf.xcframework` and `share` to `~/Library/Frameworks`.
+
+# Documentation
+
+An API reference and additional documentation is available at:
+
+https://wiki.libsdl.org/SDL3_ttf
+
+# Discussions
+
+## Discord
+
+You can join the official Discord server at:
+
+https://discord.com/invite/BwpFGBWsv8
+
+## Forums/mailing lists
+
+You can join SDL development discussions at:
+
+https://discourse.libsdl.org/
+
+Once you sign up, you can use the forum through the website or as a mailing list from your email client.
+
+## Announcement list
+
+You can sign up for the low traffic announcement list at:
+
+https://www.libsdl.org/mailing-list.php
+
diff --git a/Xcode/pkg-support/resources/ReadMe.txt b/Xcode/pkg-support/resources/ReadMe.txt
deleted file mode 100644
index 0c5f523b..00000000
--- a/Xcode/pkg-support/resources/ReadMe.txt
+++ /dev/null
@@ -1,28 +0,0 @@
-SDL_ttf is an example portable font rendering library for use with SDL.
-
-The source code is available from: http://www.libsdl.org/projects/SDL_ttf
-
-This library is distributed under the terms of the zlib license: http://www.zlib.net/zlib_license.html
-
-Portions of this software are copyright © 2013 The FreeType Project (www.freetype.org). All rights reserved.
-
-This packages contains the SDL3_ttf.framework for OS X. Conforming with Apple guidelines, this framework contains both the SDL runtime component and development header files.
-
-Requirements:
-You must have the SDL3.framework installed.
-
-To Install:
-Copy the SDL3_ttf.framework to /Library/Frameworks
-
-You may alternatively install it in <your home directory>/Library/Frameworks if your access privileges are not high enough. (Be aware that the Xcode templates we provide in the SDL Developer Extras package may require some adjustment for your system if you do this.)
-
-
-(Partial) History of PB/Xcode projects:
-2009-09-21 - Updated for 64-bit (Snow Leopard) Universal Binaries.
- Switched to 10.4 minimum requirement.
- Now dynamic linking Mac OS X bundled freetype directly in /usr/X11R6. (We used to just copy this one into our package since older versions of Mac OS X didn't ship with the library.)
- Reason: We no longer statically link libfreetype.a into the binary because Apple stopped supplying a libfreetype.a in the 10.5 and 10.6 SDKs.
- For static library target, you will need to link against libfreetype.dylib for your final app.
-
-2006-01-31 - First entry in history. Updated for Universal Binaries. Static library of libfreetype has been updated by copying the version Apple provides from the 10.4u SDK.
-
diff --git a/Xcode/pkg-support/resources/SDL_DS_Store b/Xcode/pkg-support/resources/SDL_DS_Store
new file mode 100644
index 0000000000000000000000000000000000000000..038a7ef8b437a17bce0b3aadb22a47aeed24675f
GIT binary patch
literal 10244
zcmeHMO>7%g5T11tYWFXjpNdk7SP_tlT04$y5~oPiah)`g3WYk9R4oMmtX-4MuI1e%
zZKFy7Re;KY9#F*riB{^Z7Y<0}0*V9zB!1Kr0;v*6Jrr@F7o;8#@XfyWVkc=iAgUs?
z6V1-Nc{6Y3&Aff@twTgwcDCG4WDrpp$W-5i$8CW78P`BaN;*I_*ppKP_ffHK)m(3l
zb|45c5M&_8K#+kT13?D<3mL$f%@E!wXz&a&5M&_8z;Xt7e=vYdGm<U}>Tex*_@4lv
zZ4mnaUS|f>kTfIdqM+yjXu=d!m}>G9LlfqZ8&WSL>7t;*oHY6Ip-Io0{6f)u?-<|k
z)k(_;8a#sx1Q}SH0rBk~E6%(1qSgBS9*=*gh1RvT-?u)zKD;sfV*a=@pZ5yhteY(~
zj&f_lajc@^3&q1VbAC$i+2`0^p=O&6-=J1Dp>phnnq7A0v(Bttc75Bt=m<x`ktu!K
z!a}k?vD-+*Q>S+u3q$erZX=Z(IDI-2-rC#u<e{l)YsPlYir_W50np}ElX(kmjbgRZ
zoSaGMruZcy9{*AAP;-fF*tlu)mJYqMt6T5Uw{Gpcf7=7wADq&=i-pp3wZReYb1bKk
zwPwvJy~D*k$4id=Y{Q(x{EieFje=b@vnMA#^MseLoq|%=D$_$|`K6|4;$$5<Jxzf>
z{Qib%+DEI6TKQn5;+o!M3xDL8@6|JB#_fuO@!9jix>s{-_psS;L0_~AMbkQHXC2RT
zW>yS8K2xZg!&a@}PSy}Ohv<);uNO)+yV|?=rpQ}(!gg%4H?vbT^-!<MXIQ7m!A@<A
z+jwH54d-(Ql2e{nQ7SF;`jv0@kL{v%h)!*C%hr_TRGnD8d^_D1vpca17;jW{{s|z8
z$gN&UsXfL%_@Ke2fBmDUzCcf><Ua>5&XiM#e1{5rk8iSvRs^_(w$mnZsZ1740UfFW
zV^oKvLLJnFG4qt81C&I+hrbGB-F^O8eJh5dZpaTi*6fVw_9>@EKXLrM89$ZG9FcPf
z)8n+4o};7ibduhr_vtcSq0i_Cx<P+v>$PrehxU;6h_*|MY6IG!Hl*zdy&ig7SclXb
zutSa}N$6cLcmwL$Y+Sy}6P*Upq}1;MpO$<#_%X>F;Lk`t1OAfawW~z8NPrH0`HWXy
zriGXGYemPIj^D?cZF*c<{2fVSweV=`*5MH%V?7AJ*D`^$LAF~G=`S$Wk+nzRgiUK1
zbe16wrUozt%mJ}Xs13f7B`^ThRtrnDPl@j3{sq}q<JQq$1fBz40J0rVWcc%o#p__V
z0r_Gg6Nn|W7BtNLA=Zl!Rce;Gr>}3#!g(wa@9%>SkI!>fc~EiEg>Alz75*2A9+mnd
z1MyTMosCDI$R^U!WGXip9U4sbM-zj?{li0vk-?!vzlyaW<NdX}88?PmuFnNbf?sZq
z<9Qd`4|vs{D_C<T+A7X^!+FIld9JD_;`Vn9r9WA6%B-*2#o3xwMqBAu94A(usS+=2
zuHy&rxdgll{0Vpy$or8FRJph~2^m1O+s^Z%YPPR^#o2DQ-}~hgSU1~|Z_fHFSJ`Jy
z{*KBt`>(tq+A5|TtS5kFpa(nyd<S?5$YaR$P+B_j>1H)1&zAv9#b5KkVIJJqx(3vG
zeww#w&vB0%V>x9{=UzL11NzPJ-Pa3?&3dPXlF5<LbSj!19Zg14snkF;y)QW!O(dQe
z=^xDvC)2sOs`snx7r46KEaMvUy89aV2ligBJp-@*HarZ>k)a*@hmzO9e=o$8VP48Z
z2J#|GLG9rA{bSG#q8`b2f*+GS?@l`<&%0Av@&<TM@^SFDNPxCP^t1HU37*#pL)Q{?
zRBTs8&RLG-E#`NdUHWD8@qFnf-fQ^c^%ye#{rFY=+0QZ$UyA1`^Z<G7--56W3r7bs
zWn4lZ$H{u<(9h-Jy2w|+ugeFJF|4l3mqLsp679fP3_M4VodenpJY){JMmr_%OJj5S
zhHW`^RqEiBnR7kM!`-G<vgaV(fOE5gv(%(HppCN<=jyoSl;lZ-DCs5OV+bDrj<<oB
zI(1iS^8D|ldCzaE1A}}!P5U?1MEsxLR9oi0Dz_VGoSwnGV}gcp^EiMU&8*4f$0${6
zCO1NFoc7U(Z#e=Rk4})cDyt8}D%q0%2pxjOFpkKlL2u`WD<%v?#d_A<hhp$kLggD&
zK%6Gc;|A5B=~bRD!*frI=XR`)<FIIuxl%K<1s;EB(L^(VAOk@L?m`CSscP`=|06gt
z?(qNryWlw(GRQ!Xf&WSdw6<J6mqj$qE8oh{_&RL>Uj{O;-lCws2_F898`Qr|qQRdk
xJAtelXUYIRBk7``kO1z*KLhxC#19(&IaqE7-~U_<0bEG_eJ1$+|9^h}{{@*UrjY;u
literal 0
HcmV?d00001
diff --git a/Xcode/pkg-support/resources/framework/INSTALL.md b/Xcode/pkg-support/resources/framework/INSTALL.md
new file mode 100644
index 00000000..e11b6713
--- /dev/null
+++ b/Xcode/pkg-support/resources/framework/INSTALL.md
@@ -0,0 +1,35 @@
+
+# Using this package
+
+This package contains SDL_ttf built for Xcode.
+
+To use this package in Xcode, drag `SDL3_ttf.framework` into your project.
+
+# Documentation
+
+An API reference and additional documentation is available at:
+
+https://wiki.libsdl.org/SDL3_ttf
+
+# Discussions
+
+## Discord
+
+You can join the official Discord server at:
+
+https://discord.com/invite/BwpFGBWsv8
+
+## Forums/mailing lists
+
+You can join SDL development discussions at:
+
+https://discourse.libsdl.org/
+
+Once you sign up, you can use the forum through the website or as a mailing list from your email client.
+
+## Announcement list
+
+You can sign up for the low traffic announcement list at:
+
+https://www.libsdl.org/mailing-list.php
+
diff --git a/Xcode/pkg-support/sdl_logo.pdf b/Xcode/pkg-support/sdl_logo.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..a172f971bf9b8b9b6d9e2299c7257261544c25d0
GIT binary patch
literal 163800
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
(Patch may be truncated, please check the link at the top of this post.)