diff options
390 files changed, 69599 insertions, 245 deletions
diff --git a/.gitignore b/.gitignore index d54503fd64f..3472432f40e 100644 --- a/.gitignore +++ b/.gitignore @@ -111,3 +111,5 @@ csharp/AppX *.runtimeconfig.json cpp/AppX cpp/test/Slice/errorDetection/tmp + +Carthage
\ No newline at end of file diff --git a/Cartfile b/Cartfile new file mode 100644 index 00000000000..e404e9ffc21 --- /dev/null +++ b/Cartfile @@ -0,0 +1 @@ +github "mxcl/PromiseKit" diff --git a/Cartfile.resolved b/Cartfile.resolved new file mode 100644 index 00000000000..4bd9563a2c8 --- /dev/null +++ b/Cartfile.resolved @@ -0,0 +1 @@ +github "mxcl/PromiseKit" "6.9.0" diff --git a/config/Make.rules b/config/Make.rules index 0ec6c838bff..d944f6d94ad 100644 --- a/config/Make.rules +++ b/config/Make.rules @@ -98,9 +98,9 @@ dotnet := $(shell command -v dotnet 2> /dev/null) supported-languages ?= cpp $(if $(filter %/dotnet,$(dotnet)),csharp) java java-compat python js ruby php $(if $(filter Darwin,$(os)),objective-c) supported-configs ?= shared -version = 3.7.2 +version = 3.7b1 mmversion = 3.7 -soversion = 37 +soversion = 37b1 # # The compatversion is the lowest patch release with the same API. diff --git a/config/PropertyNames.xml b/config/PropertyNames.xml index bfdbce3aa58..f98f28f834e 100644 --- a/config/PropertyNames.xml +++ b/config/PropertyNames.xml @@ -391,6 +391,7 @@ generated from the section label. <property name="TCP.RcvSize" /> <property name="TCP.SndSize" /> <property name="UseApplicationClassLoader" /> + <property name="UseOSLog" /> <property name="UseSyslog" /> <property name="UseSystemdJournal" /> <property name="Warn.AMICallback" /> diff --git a/config/iphoneos-SDKSettings.plist b/config/iphoneos-SDKSettings.plist index 5baffc0d905..2f81ef3ce0d 100644 --- a/config/iphoneos-SDKSettings.plist +++ b/config/iphoneos-SDKSettings.plist @@ -18,6 +18,6 @@ <key>IsBaseSDK</key> <string>NO</string> <key>Version</key> - <string>3.7.2</string> + <string>3.7b1</string> </dict> </plist> diff --git a/config/iphonesimulator-SDKSettings.plist b/config/iphonesimulator-SDKSettings.plist index e05b7cc898f..fb52053f909 100644 --- a/config/iphonesimulator-SDKSettings.plist +++ b/config/iphonesimulator-SDKSettings.plist @@ -18,6 +18,6 @@ <key>IsBaseSDK</key> <string>NO</string> <key>Version</key> - <string>3.7.2</string> + <string>3.7b1</string> </dict> </plist> diff --git a/config/macosx-SDKSettings.plist b/config/macosx-SDKSettings.plist index 6dc03463327..8509a21dc4b 100644 --- a/config/macosx-SDKSettings.plist +++ b/config/macosx-SDKSettings.plist @@ -18,6 +18,6 @@ <key>IsBaseSDK</key> <string>NO</string> <key>Version</key> - <string>3.7.2</string> + <string>3.7b1</string> </dict> </plist> diff --git a/config/makeprops.py b/config/makeprops.py index 6847f891366..164d1ee9972 100755 --- a/config/makeprops.py +++ b/config/makeprops.py @@ -17,10 +17,11 @@ progname = os.path.basename(sys.argv[0]) contentHandler = None propertyClasses = {} -// +commonPreamble = """// // Copyright (c) ZeroC, Inc. All rights reserved. // """ + commonPreamble = commonPreamble + "// Generated by " + progname + " from file %(inputfile)s, " + time.ctime() commonPreamble = commonPreamble + """ diff --git a/cpp/config/templates.xml b/cpp/config/templates.xml index aab103a9c67..a50b4f932d8 100644 --- a/cpp/config/templates.xml +++ b/cpp/config/templates.xml @@ -28,7 +28,7 @@ <parameter name="publish-endpoints" default="default"/> <parameter name="flush-timeout" default="1000"/> - <service name="${instance-name}" entry="IceStormService,37:createIceStorm"> + <service name="${instance-name}" entry="IceStormService,37b1:createIceStorm"> <adapter name="${service}.TopicManager" id="${instance-name}.TopicManager" @@ -75,7 +75,7 @@ <parameter name="publish-replica-group"/> <parameter name="topic-manager-replica-group"/> - <service name="${instance-name}${node-id}" entry="IceStormService,37:createIceStorm"> + <service name="${instance-name}${node-id}" entry="IceStormService,37b1:createIceStorm"> <adapter name="${service}.TopicManager" id="${instance-name}${node-id}.TopicManager" diff --git a/cpp/include/Ice/Config.h b/cpp/include/Ice/Config.h index 10fe77f48d0..fec3a424945 100644 --- a/cpp/include/Ice/Config.h +++ b/cpp/include/Ice/Config.h @@ -26,6 +26,10 @@ # endif #endif +#ifdef ICE_SWIFT +# include <dispatch/dispatch.h> +#endif + // // Define the Ice and IceInternal namespace, so that we can use the following // everywhere in our code: diff --git a/cpp/include/Ice/Proxy.h b/cpp/include/Ice/Proxy.h index c52ca6a59cb..4056f04a515 100644 --- a/cpp/include/Ice/Proxy.h +++ b/cpp/include/Ice/Proxy.h @@ -993,6 +993,12 @@ public: ::std::shared_ptr<::Ice::ObjectPrx> ice_fixed(const ::std::shared_ptr<::Ice::Connection>& connection) const; /** + * Determines whether this proxy is a fixed proxy. + * @return True if this proxy is a fixed proxy, false otherwise. + */ + bool ice_isFixed() const; + + /** * Obtains the Connection for this proxy. If the proxy does not yet have an established connection, * it first attempts to create a connection. * @return The connection for this proxy. @@ -2659,6 +2665,12 @@ public: ::Ice::ObjectPrx ice_fixed(const ::Ice::ConnectionPtr& connection) const; /** + * Determines whether this proxy is a fixed proxy. + * @return True if this proxy is a fixed proxy, false otherwise. + */ + bool ice_isFixed() const; + + /** * Obtains the Connection for this proxy. If the proxy does not yet have an established connection, * it first attempts to create a connection. * @return The connection for this proxy. diff --git a/cpp/include/IceUtil/Config.h b/cpp/include/IceUtil/Config.h index a9969c45e57..124d0d41080 100644 --- a/cpp/include/IceUtil/Config.h +++ b/cpp/include/IceUtil/Config.h @@ -273,9 +273,9 @@ // // The Ice version. // -#define ICE_STRING_VERSION "3.7.2" // "A.B.C", with A=major, B=minor, C=patch -#define ICE_INT_VERSION 30702 // AABBCC, with AA=major, BB=minor, CC=patch -#define ICE_SO_VERSION "37" // "ABC", with A=major, B=minor, C=patch +#define ICE_STRING_VERSION "3.7b1" // "A.B.C", with A=major, B=minor, C=patch +#define ICE_INT_VERSION 30761 // AABBCC, with AA=major, BB=minor, CC=patch +#define ICE_SO_VERSION "37b1" // "ABC", with A=major, B=minor, C=patch #if !defined(ICE_BUILDING_ICE) && defined(ICE_API_EXPORTS) # define ICE_BUILDING_ICE diff --git a/cpp/include/IceUtil/OutputUtil.h b/cpp/include/IceUtil/OutputUtil.h index 4a712643473..c9786071b8c 100644 --- a/cpp/include/IceUtil/OutputUtil.h +++ b/cpp/include/IceUtil/OutputUtil.h @@ -87,9 +87,9 @@ class ICE_API Output : public OutputBase { public: - Output(); - Output(std::ostream&); - Output(const char*); + Output(bool breakBeforeBlock = true, bool shortEmptyBlock = false); + Output(std::ostream&, bool = true, bool = false); + Output(const char*, bool = true, bool = false); virtual void print(const std::string&); // Print a string. @@ -104,6 +104,9 @@ private: std::string _blockStart; std::string _blockEnd; int _par; // If >= 0, we are writing a parameter list. + const bool _breakBeforeBlock; // If true break before starting a new block. + const bool _shortEmptyBlock; // If true, an empty block is written <sb><eb>. + bool _emptyBlock; }; template<typename T> diff --git a/cpp/include/IceUtil/ResourceConfig.h b/cpp/include/IceUtil/ResourceConfig.h index 4bf0c68d158..e446105a345 100644 --- a/cpp/include/IceUtil/ResourceConfig.h +++ b/cpp/include/IceUtil/ResourceConfig.h @@ -7,9 +7,9 @@ #include "winver.h" -#define ICE_VERSION 3,7,2,0 -#define ICE_STRING_VERSION "3.7.2\0" -#define ICE_SO_VERSION "37\0" +#define ICE_VERSION 3,7,61,0 +#define ICE_STRING_VERSION "3.7b1\0" +#define ICE_SO_VERSION "37b1\0" #define ICE_COMPANY_NAME "ZeroC, Inc.\0" #define ICE_COPYRIGHT "\251 ZeroC, Inc.\0" #define ICE_PRODUCT_NAME "Ice\0" diff --git a/cpp/include/IceUtil/StringConverter.h b/cpp/include/IceUtil/StringConverter.h index ff01f23f77a..ea233ed05f4 100644 --- a/cpp/include/IceUtil/StringConverter.h +++ b/cpp/include/IceUtil/StringConverter.h @@ -66,7 +66,7 @@ public: } }; -#ifdef __clang__ +#if defined(__clang__) && !defined(ICE_STATIC_LIBS) // // Explicit template instantiation so that dynamic_cast of derived exported // classes works well with clang, see ICE-7473. diff --git a/cpp/src/Ice/Base64.cpp b/cpp/src/Ice/Base64.cpp index 803d5b15b85..ea2427df92b 100644 --- a/cpp/src/Ice/Base64.cpp +++ b/cpp/src/Ice/Base64.cpp @@ -132,7 +132,6 @@ IceInternal::Base64::decode(const string& str) for(size_t i = 0; i < newStr.length(); i += 4) { - c1 = 'A'; c2 = 'A'; c3 = 'A'; c4 = 'A'; diff --git a/cpp/src/Ice/CommunicatorI.cpp b/cpp/src/Ice/CommunicatorI.cpp index 36198c82d75..b88bbe4b94b 100644 --- a/cpp/src/Ice/CommunicatorI.cpp +++ b/cpp/src/Ice/CommunicatorI.cpp @@ -18,6 +18,9 @@ #include <IceUtil/Mutex.h> #include <IceUtil/MutexPtrLock.h> #include <Ice/UUID.h> +#ifdef ICE_SWIFT +# include <Ice/ThreadPool.h> +#endif using namespace std; using namespace Ice; @@ -378,6 +381,22 @@ Ice::CommunicatorI::getValueFactoryManager() const ICE_NOEXCEPT return _instance->initializationData().valueFactoryManager; } +#ifdef ICE_SWIFT + +dispatch_queue_t +Ice::CommunicatorI::getClientDispatchQueue() const +{ + return _instance->clientThreadPool()->getDispatchQueue(); +} + +dispatch_queue_t +Ice::CommunicatorI::getServerDispatchQueue() const +{ + return _instance->serverThreadPool()->getDispatchQueue(); +} + +#endif + namespace { diff --git a/cpp/src/Ice/CommunicatorI.h b/cpp/src/Ice/CommunicatorI.h index f28b49a2299..3e24479691e 100644 --- a/cpp/src/Ice/CommunicatorI.h +++ b/cpp/src/Ice/CommunicatorI.h @@ -97,6 +97,11 @@ public: virtual ValueFactoryManagerPtr getValueFactoryManager() const ICE_NOEXCEPT; +#ifdef ICE_SWIFT + virtual dispatch_queue_t getClientDispatchQueue() const; + virtual dispatch_queue_t getServerDispatchQueue() const; +#endif + #ifdef ICE_CPP11_MAPPING virtual ::std::function<void()> flushBatchRequestsAsync(CompressBatch, diff --git a/cpp/src/Ice/Exception.cpp b/cpp/src/Ice/Exception.cpp index 64c1f9c3703..72473771a72 100644 --- a/cpp/src/Ice/Exception.cpp +++ b/cpp/src/Ice/Exception.cpp @@ -707,7 +707,7 @@ void Ice::NoValueFactoryException::ice_print(ostream& out) const { Exception::ice_print(out); - out << ":\nprotocol error: no suitable object factory found for `" << type << "'"; + out << ":\nprotocol error: no suitable value factory found for `" << type << "'"; if(!reason.empty()) { out << ":\n" << reason; @@ -788,28 +788,28 @@ void Ice::NotRegisteredException::ice_print(ostream& out) const { Exception::ice_print(out); - out << ":\n no " << kindOfObject << " with id `" << id << "' is registered"; + out << ":\nno " << kindOfObject << " with id `" << id << "' is registered"; } void Ice::TwowayOnlyException::ice_print(ostream& out) const { Exception::ice_print(out); - out << ":\n operation `" << operation << "' can only be invoked as a twoway request"; + out << ":\noperation `" << operation << "' can only be invoked as a twoway request"; } void Ice::CloneNotImplementedException::ice_print(ostream& out) const { Exception::ice_print(out); - out << ":\n ice_clone() must be implemented in classes derived from abstract base classes"; + out << ":\nice_clone() must be implemented in classes derived from abstract base classes"; } void Ice::FeatureNotSupportedException::ice_print(ostream& out) const { Exception::ice_print(out); - out << ":\nfeature `" << unsupportedFeature << "' is not supported."; + out << ":\nfeature `" << unsupportedFeature << "' is not supported"; } void diff --git a/cpp/src/Ice/Instance.cpp b/cpp/src/Ice/Instance.cpp index 8d448ee0ddb..240fe7c867e 100644 --- a/cpp/src/Ice/Instance.cpp +++ b/cpp/src/Ice/Instance.cpp @@ -51,6 +51,10 @@ #include <stdio.h> #include <list> +#ifdef __APPLE__ +# include <Ice/OSLogLoggerI.h> +#endif + #ifndef _WIN32 # include <Ice/SysLoggerI.h> # include <Ice/SystemdJournalI.h> @@ -1096,13 +1100,24 @@ IceInternal::Instance::Instance(const CommunicatorPtr& communicator, const Initi _initData.properties->getProperty("Ice.ProgramName"), _initData.properties->getPropertyWithDefault("Ice.SyslogFacility", "LOG_USER")); } -# ifdef ICE_USE_SYSTEMD - else if(_initData.properties->getPropertyAsInt("Ice.UseSystemdJournal") > 0) + else +#endif + +#ifdef ICE_SWIFT + if(!_initData.logger && _initData.properties->getPropertyAsInt("Ice.UseOSLog") > 0) + { + _initData.logger = ICE_MAKE_SHARED(OSLogLoggerI, + _initData.properties->getProperty("Ice.ProgramName")); + } + else +#endif + +#ifdef ICE_USE_SYSTEMD + if(_initData.properties->getPropertyAsInt("Ice.UseSystemdJournal") > 0) { _initData.logger = ICE_MAKE_SHARED(SystemdJournalI, _initData.properties->getProperty("Ice.ProgramName")); } -# endif else #endif if(!logfile.empty()) diff --git a/cpp/src/Ice/OSLogLoggerI.cpp b/cpp/src/Ice/OSLogLoggerI.cpp new file mode 100644 index 00000000000..a5c3432790a --- /dev/null +++ b/cpp/src/Ice/OSLogLoggerI.cpp @@ -0,0 +1,57 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#ifdef ICE_SWIFT + +#include <Ice/OSLogLoggerI.h> +#include <os/log.h> + +using namespace std; +using namespace Ice; + +Ice::OSLogLoggerI::OSLogLoggerI(const std::string& prefix) : _prefix(prefix) +{ + const string subsystem = prefix.empty() ? "com.zeroc.ice" : "com.zeroc.ice." + prefix; + _log.reset(os_log_create(subsystem.c_str(), "")); +} + +void +Ice::OSLogLoggerI::print(const std::string& message) +{ + os_log_with_type(_log.get(), OS_LOG_TYPE_DEFAULT, "%{public}s.", message.c_str()); +} + +void +Ice::OSLogLoggerI::trace(const std::string& category, const std::string& message) +{ + const string subsystem = _prefix.empty() ? "com.zeroc.ice" : "com.zeroc.ice." + _prefix; + IceInternal::UniqueRef<os_log_t> log(os_log_create(subsystem.c_str(), category.c_str())); + os_log_with_type(log.get(), OS_LOG_TYPE_INFO, "%{public}s.", message.c_str()); +} + +void +Ice::OSLogLoggerI::warning(const std::string& message) +{ + os_log_with_type(_log.get(), OS_LOG_TYPE_ERROR, "%{public}s.", message.c_str()); +} + +void +Ice::OSLogLoggerI::error(const std::string& message) +{ + os_log_with_type(_log.get(), OS_LOG_TYPE_FAULT, "%{public}s.", message.c_str()); +} + +std::string +Ice::OSLogLoggerI::getPrefix() +{ + return _prefix; +} + +LoggerPtr +Ice::OSLogLoggerI::cloneWithPrefix(const std::string& prefix) +{ + return ICE_MAKE_SHARED(OSLogLoggerI, prefix); +} + +#endif diff --git a/cpp/src/Ice/OSLogLoggerI.h b/cpp/src/Ice/OSLogLoggerI.h new file mode 100644 index 00000000000..16da911d5bf --- /dev/null +++ b/cpp/src/Ice/OSLogLoggerI.h @@ -0,0 +1,40 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#ifndef ICE_OSLOG_LOGGER_I_H +#define ICE_OSLOG_LOGGER_I_H + +#ifdef ICE_SWIFT + +#include <Ice/Logger.h> +#include <Ice/UniqueRef.h> +#include <os/log.h> + +namespace Ice +{ + +class OSLogLoggerI : public Logger +{ +public: + + OSLogLoggerI(const std::string&); + + virtual void print(const std::string&); + virtual void trace(const std::string&, const std::string&); + virtual void warning(const std::string&); + virtual void error(const std::string&); + virtual std::string getPrefix(); + virtual LoggerPtr cloneWithPrefix(const std::string&); + +private: + + const std::string _prefix; + IceInternal::UniqueRef<os_log_t> _log; +}; + +} + +#endif + +#endif diff --git a/cpp/src/Ice/ObjectAdapterI.cpp b/cpp/src/Ice/ObjectAdapterI.cpp index 830f9c071ca..69c25758483 100644 --- a/cpp/src/Ice/ObjectAdapterI.cpp +++ b/cpp/src/Ice/ObjectAdapterI.cpp @@ -735,6 +735,18 @@ Ice::ObjectAdapterI::setPublishedEndpoints(const EndpointSeq& newEndpoints) } } +#ifdef ICE_SWIFT +dispatch_queue_t +Ice::ObjectAdapterI::getDispatchQueue() const +{ + IceUtil::Monitor<IceUtil::RecMutex>::Lock sync(*this); + + checkForDeactivation(); + + return getThreadPool()->getDispatchQueue(); +} +#endif + bool Ice::ObjectAdapterI::isLocal(const ObjectPrxPtr& proxy) const { @@ -921,7 +933,7 @@ Ice::ObjectAdapterI::setAdapterOnConnection(const Ice::ConnectionIPtr& connectio // // COMPILERFIX: The ObjectAdapterI setup is broken out into a separate initialize // function because when it was part of the constructor C++Builder 2010 apps would -// crash if an execption was thrown from any calls within the constructor. +// crash if an exception was thrown from any calls within the constructor. // Ice::ObjectAdapterI::ObjectAdapterI(const InstancePtr& instance, const CommunicatorPtr& communicator, const ObjectAdapterFactoryPtr& objectAdapterFactory, const string& name, diff --git a/cpp/src/Ice/ObjectAdapterI.h b/cpp/src/Ice/ObjectAdapterI.h index 9c024a90b64..c4676186ce6 100644 --- a/cpp/src/Ice/ObjectAdapterI.h +++ b/cpp/src/Ice/ObjectAdapterI.h @@ -85,6 +85,10 @@ public: virtual EndpointSeq getPublishedEndpoints() const ICE_NOEXCEPT; virtual void setPublishedEndpoints(const EndpointSeq&); +#ifdef ICE_SWIFT + virtual dispatch_queue_t getDispatchQueue() const; +#endif + bool isLocal(const ObjectPrxPtr&) const; void flushAsyncBatchRequests(const IceInternal::CommunicatorFlushBatchAsyncPtr&, CompressBatch); diff --git a/cpp/src/Ice/PropertyNames.cpp b/cpp/src/Ice/PropertyNames.cpp index fc3b319e828..c33836e8ea6 100644 --- a/cpp/src/Ice/PropertyNames.cpp +++ b/cpp/src/Ice/PropertyNames.cpp @@ -1,7 +1,7 @@ // // Copyright (c) ZeroC, Inc. All rights reserved. // -// Generated by makeprops.py from file ../config/PropertyNames.xml, Thu Oct 25 22:10:11 2018 +// Generated by makeprops.py from file ../config/PropertyNames.xml, Wed May 29 21:06:31 2019 // IMPORTANT: Do not edit this file -- any edits made here will be lost! @@ -175,6 +175,7 @@ const IceInternal::Property IcePropsData[] = IceInternal::Property("Ice.TCP.RcvSize", false, 0), IceInternal::Property("Ice.TCP.SndSize", false, 0), IceInternal::Property("Ice.UseApplicationClassLoader", false, 0), + IceInternal::Property("Ice.UseOSLog", false, 0), IceInternal::Property("Ice.UseSyslog", false, 0), IceInternal::Property("Ice.UseSystemdJournal", false, 0), IceInternal::Property("Ice.Warn.AMICallback", false, 0), diff --git a/cpp/src/Ice/PropertyNames.h b/cpp/src/Ice/PropertyNames.h index a820f58a7ad..b4b83cf22f3 100644 --- a/cpp/src/Ice/PropertyNames.h +++ b/cpp/src/Ice/PropertyNames.h @@ -1,7 +1,7 @@ // // Copyright (c) ZeroC, Inc. All rights reserved. // -// Generated by makeprops.py from file ../config/PropertyNames.xml, Thu Oct 25 22:10:11 2018 +// Generated by makeprops.py from file ../config/PropertyNames.xml, Wed May 29 21:06:31 2019 // IMPORTANT: Do not edit this file -- any edits made here will be lost! diff --git a/cpp/src/Ice/Proxy.cpp b/cpp/src/Ice/Proxy.cpp index f2b6e188ceb..76b03fa86ff 100644 --- a/cpp/src/Ice/Proxy.cpp +++ b/cpp/src/Ice/Proxy.cpp @@ -1287,6 +1287,12 @@ ICE_OBJECT_PRX::ice_fixed(const ::Ice::ConnectionPtr& connection) const } } +bool +ICE_OBJECT_PRX::ice_isFixed() const +{ + return FixedReferencePtr::dynamicCast(_reference); +} + ConnectionPtr ICE_OBJECT_PRX::ice_getCachedConnection() const { diff --git a/cpp/src/Ice/RegisterPluginsInit.cpp b/cpp/src/Ice/RegisterPluginsInit.cpp index 9c78db20343..9fb81206b08 100644 --- a/cpp/src/Ice/RegisterPluginsInit.cpp +++ b/cpp/src/Ice/RegisterPluginsInit.cpp @@ -21,9 +21,10 @@ IceInternal::RegisterPluginsInit::RegisterPluginsInit() Ice::registerPluginFactory("IceTCP", createIceTCP, true); // - // Only include the UDP and WS transport plugins with non-static builds or Gem/PyPI builds. + // Only include the UDP and WS transport plugins with non-static builds or Gem/PyPI/Swift + // builds. // -#if !defined(ICE_STATIC_LIBS) || defined(ICE_GEM) || defined(ICE_PYPI) +#if !defined(ICE_STATIC_LIBS) || defined(ICE_GEM) || defined(ICE_PYPI) || defined(ICE_SWIFT) Ice::registerPluginFactory("IceUDP", createIceUDP, true); Ice::registerPluginFactory("IceWS", createIceWS, true); #endif diff --git a/cpp/src/Ice/SHA1.cpp b/cpp/src/Ice/SHA1.cpp index e94c2ce2612..a1d79afa250 100644 --- a/cpp/src/Ice/SHA1.cpp +++ b/cpp/src/Ice/SHA1.cpp @@ -108,7 +108,7 @@ IceInternal::SHA1::Hasher::update(const unsigned char* data, size_t length) throw IceUtil::SyscallException(__FILE__, __LINE__, GetLastError()); } # elif defined(__APPLE__) - CC_SHA1_Update(&_ctx, reinterpret_cast<const void*>(data), length); + CC_SHA1_Update(&_ctx, reinterpret_cast<const void*>(data), static_cast<CC_LONG>(length)); # else SHA1_Update(&_ctx, reinterpret_cast<const void*>(data), length); # endif @@ -175,7 +175,7 @@ IceInternal::sha1(const unsigned char* data, size_t length, vector<unsigned char hasher.finalize(md); #elif defined(__APPLE__) md.resize(CC_SHA1_DIGEST_LENGTH); - CC_SHA1(&data[0], length, &md[0]); + CC_SHA1(&data[0], static_cast<CC_LONG>(length), &md[0]); #else md.resize(SHA_DIGEST_LENGTH); ::SHA1(&data[0], length, &md[0]); diff --git a/cpp/src/Ice/Selector.cpp b/cpp/src/Ice/Selector.cpp index 58f38e92506..e76b8ad93f5 100644 --- a/cpp/src/Ice/Selector.cpp +++ b/cpp/src/Ice/Selector.cpp @@ -616,7 +616,7 @@ Selector::finishSelect(vector<pair<EventHandler*, SocketOperation> >& handlers) if(ev.flags & EV_ERROR) { Ice::Error out(_instance->initializationData().logger); - out << "selector returned error:\n" << IceUtilInternal::errorToString(ev.data); + out << "selector returned error:\n" << IceUtilInternal::errorToString(static_cast<int>(ev.data)); continue; } p.first = reinterpret_cast<EventHandler*>(ev.udata); @@ -729,11 +729,11 @@ Selector::select(int timeout) struct timespec ts; ts.tv_sec = timeout; ts.tv_nsec = 0; - _count = kevent(_queueFd, 0, 0, &_events[0], _events.size(), &ts); + _count = kevent(_queueFd, 0, 0, &_events[0], static_cast<int>(_events.size()), &ts); } else { - _count = kevent(_queueFd, 0, 0, &_events[0], _events.size(), 0); + _count = kevent(_queueFd, 0, 0, &_events[0], static_cast<int>(_events.size()), 0); } #elif defined(ICE_USE_SELECT) fd_set* rFdSet = fdSetCopy(_selectedReadFdSet, _readFdSet); @@ -807,7 +807,8 @@ void Selector::updateSelector() { #if defined(ICE_USE_KQUEUE) - int rs = kevent(_queueFd, &_changes[0], _changes.size(), &_changes[0], _changes.size(), &zeroTimeout); + int rs = kevent(_queueFd, &_changes[0], static_cast<int>(_changes.size()), + &_changes[0], static_cast<int>(_changes.size()), &zeroTimeout); if(rs < 0) { Ice::Error out(_instance->initializationData().logger); @@ -824,7 +825,8 @@ Selector::updateSelector() if(_changes[i].flags & EV_ERROR && _changes[i].data != EINPROGRESS) { Ice::Error out(_instance->initializationData().logger); - out << "error while updating selector:\n" << IceUtilInternal::errorToString(_changes[i].data); + out << "error while updating selector:\n" + << IceUtilInternal::errorToString(static_cast<int>(_changes[i].data)); } } } diff --git a/cpp/src/Ice/ThreadPool.cpp b/cpp/src/Ice/ThreadPool.cpp index b836137170a..f1be4dcb8dc 100644 --- a/cpp/src/Ice/ThreadPool.cpp +++ b/cpp/src/Ice/ThreadPool.cpp @@ -110,6 +110,29 @@ class ThreadPoolDestroyedException { }; +#ifdef ICE_SWIFT +string +prefixToDispatchQueueLabel(const std::string& prefix) +{ + if(prefix == "Ice.ThreadPool.Client") + { + return "com.zeroc.ice.client"; + } + + if(prefix == "Ice.ThreadPool.Server") + { + return "com.zeroc.ice.server"; + } + + string::size_type end = prefix.find_last_of(".ThreadPool"); + if(end == string::npos) + { + end = prefix.size(); + } + + return "com.zeroc.ice.oa." + prefix.substr(0, end); +} +#endif } Ice::DispatcherCall::~DispatcherCall() @@ -245,7 +268,11 @@ IceInternal::ThreadPoolWorkQueue::getNativeInfo() IceInternal::ThreadPool::ThreadPool(const InstancePtr& instance, const string& prefix, int timeout) : _instance(instance), +#ifdef ICE_SWIFT + _dispatchQueue(dispatch_queue_create(prefixToDispatchQueueLabel(prefix).c_str(), DISPATCH_QUEUE_CONCURRENT)), +#else _dispatcher(_instance->initializationData().dispatcher), +#endif _destroyed(false), _prefix(prefix), _selector(instance), @@ -417,6 +444,9 @@ IceInternal::ThreadPool::ThreadPool(const InstancePtr& instance, const string& p IceInternal::ThreadPool::~ThreadPool() { assert(_destroyed); +#ifdef ICE_SWIFT + dispatch_release(_dispatchQueue); +#endif } void @@ -531,6 +561,12 @@ IceInternal::ThreadPool::ready(const EventHandlerPtr& handler, SocketOperation o void IceInternal::ThreadPool::dispatchFromThisThread(const DispatchWorkItemPtr& workItem) { +#ifdef ICE_SWIFT + dispatch_sync(_dispatchQueue, ^ + { + workItem->run(); + }); +#else if(_dispatcher) { try @@ -566,6 +602,7 @@ IceInternal::ThreadPool::dispatchFromThisThread(const DispatchWorkItemPtr& workI { workItem->run(); } +#endif } void @@ -603,6 +640,16 @@ IceInternal::ThreadPool::prefix() const return _prefix; } +#ifdef ICE_SWIFT + +dispatch_queue_t +IceInternal::ThreadPool::getDispatchQueue() const ICE_NOEXCEPT +{ + return _dispatchQueue; +} + +#endif + void IceInternal::ThreadPool::run(const EventHandlerThreadPtr& thread) { diff --git a/cpp/src/Ice/ThreadPool.h b/cpp/src/Ice/ThreadPool.h index f9641296a14..1b6bf254467 100644 --- a/cpp/src/Ice/ThreadPool.h +++ b/cpp/src/Ice/ThreadPool.h @@ -110,6 +110,10 @@ public: std::string prefix() const; +#ifdef ICE_SWIFT + dispatch_queue_t getDispatchQueue() const ICE_NOEXCEPT; +#endif + private: void run(const EventHandlerThreadPtr&); @@ -127,10 +131,14 @@ private: std::string nextThreadId(); const InstancePtr _instance; -#ifdef ICE_CPP11_MAPPING +#ifdef ICE_SWIFT + const dispatch_queue_t _dispatchQueue; +#else // Ice for Swift does not support a dispatcher +# ifdef ICE_CPP11_MAPPING std::function<void(std::function<void()>, const std::shared_ptr<Ice::Connection>&)> _dispatcher; -#else +# else const Ice::DispatcherPtr _dispatcher; +# endif #endif ThreadPoolWorkQueuePtr _workQueue; bool _destroyed; diff --git a/cpp/src/Ice/ios/StreamEndpointI.cpp b/cpp/src/Ice/ios/StreamEndpointI.cpp index f70f47d5c3b..68ab85aea54 100644 --- a/cpp/src/Ice/ios/StreamEndpointI.cpp +++ b/cpp/src/Ice/ios/StreamEndpointI.cpp @@ -38,6 +38,7 @@ createIceTCP(const CommunicatorPtr& com, const string&, const StringSeq&) } +#if TARGET_IPHONE_SIMULATOR == 0 namespace { @@ -48,10 +49,13 @@ toCFString(const string& s) } } +#endif IceObjC::Instance::Instance(const Ice::CommunicatorPtr& com, Short type, const string& protocol, bool secure) : ProtocolInstance(com, type, protocol, secure), +#ifndef ICE_SWIFT _voip(com->getProperties()->getPropertyAsIntWithDefault("Ice.Voip", 0) > 0), +#endif _communicator(com), _proxySettings(0) { @@ -65,7 +69,7 @@ IceObjC::Instance::Instance(const Ice::CommunicatorPtr& com, Short type, const s { #if TARGET_IPHONE_SIMULATOR != 0 throw Ice::FeatureNotSupportedException(__FILE__, __LINE__, "SOCKS proxy not supported"); -#endif +#else _proxySettings.reset(CFDictionaryCreateMutable(0, 3, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks)); @@ -78,6 +82,7 @@ IceObjC::Instance::Instance(const Ice::CommunicatorPtr& com, Short type, const s CFDictionarySetValue(_proxySettings.get(), kCFStreamPropertySOCKSProxyPort, port.get()); CFDictionarySetValue(_proxySettings.get(), kCFStreamPropertySOCKSVersion, kCFStreamSocketSOCKSVersion4); +#endif } } @@ -91,16 +96,18 @@ IceObjC::Instance::setupStreams(CFReadStreamRef readStream, bool server, const string& /*host*/) const { +#ifndef ICE_SWIFT if(_voip) { -#if TARGET_IPHONE_SIMULATOR == 0 +# if TARGET_IPHONE_SIMULATOR == 0 if(!CFReadStreamSetProperty(readStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP) || !CFWriteStreamSetProperty(writeStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP)) { throw Ice::SyscallException(__FILE__, __LINE__); } -#endif +# endif } +#endif if(!server && _proxySettings) { diff --git a/cpp/src/Ice/ios/StreamEndpointI.h b/cpp/src/Ice/ios/StreamEndpointI.h index 3ae922c56e4..d8e70732129 100644 --- a/cpp/src/Ice/ios/StreamEndpointI.h +++ b/cpp/src/Ice/ios/StreamEndpointI.h @@ -49,7 +49,9 @@ public: private: +#ifndef ICE_SWIFT const bool _voip; +#endif const Ice::CommunicatorPtr _communicator; IceInternal::UniqueRef<CFMutableDictionaryRef> _proxySettings; std::string _proxyHost; diff --git a/cpp/src/Ice/ios/StreamTransceiver.cpp b/cpp/src/Ice/ios/StreamTransceiver.cpp index 6a0815625b5..fc42cb948ea 100644 --- a/cpp/src/Ice/ios/StreamTransceiver.cpp +++ b/cpp/src/Ice/ios/StreamTransceiver.cpp @@ -507,7 +507,7 @@ IceObjC::StreamTransceiver::checkErrorStatus(CFWriteStreamRef writeStream, CFRea CFStringRef domain = CFErrorGetDomain(err.get()); if(CFStringCompare(domain, kCFErrorDomainPOSIX, 0) == kCFCompareEqualTo) { - errno = CFErrorGetCode(err.get()); + errno = static_cast<int>(CFErrorGetCode(err.get())); if(interrupted() || noBuffers()) { return; @@ -530,7 +530,7 @@ IceObjC::StreamTransceiver::checkErrorStatus(CFWriteStreamRef writeStream, CFRea } } - int error = CFErrorGetCode(err.get()); + CFIndex error = CFErrorGetCode(err.get()); if(error == kCFHostErrorHostNotFound || error == kCFHostErrorUnknown) { int rs = 0; @@ -545,5 +545,5 @@ IceObjC::StreamTransceiver::checkErrorStatus(CFWriteStreamRef writeStream, CFRea } throw DNSException(file, line, rs, _host); } - throw CFNetworkException(file, line, CFErrorGetCode(err.get()), fromCFString(domain)); + throw CFNetworkException(file, line, static_cast<int>(CFErrorGetCode(err.get())), fromCFString(domain)); } diff --git a/cpp/src/IceIAP/Transceiver.mm b/cpp/src/IceIAP/Transceiver.mm index 405c8bf1387..3f2a0d3f4ae 100644 --- a/cpp/src/IceIAP/Transceiver.mm +++ b/cpp/src/IceIAP/Transceiver.mm @@ -417,7 +417,7 @@ IceObjC::iAPTransceiver::checkErrorStatus(NSStream* stream, const char* file, in NSString* domain = [err domain]; if([domain compare:NSPOSIXErrorDomain] == NSOrderedSame) { - errno = [err code]; + errno = static_cast<int>([err code]); if(interrupted() || noBuffers()) { return; @@ -445,6 +445,6 @@ IceObjC::iAPTransceiver::checkErrorStatus(NSStream* stream, const char* file, in // Otherwise throw a generic exception. CFNetworkException ex(file, line); ex.domain = [domain UTF8String]; - ex.error = [err code]; + ex.error = static_cast<int>([err code]); throw ex; } diff --git a/cpp/src/IceSSL/SecureTransportCertificateI.cpp b/cpp/src/IceSSL/SecureTransportCertificateI.cpp index 8ea6fb89f47..9f5a971757f 100644 --- a/cpp/src/IceSSL/SecureTransportCertificateI.cpp +++ b/cpp/src/IceSSL/SecureTransportCertificateI.cpp @@ -2,6 +2,12 @@ // Copyright (c) ZeroC, Inc. All rights reserved. // +// +// Disable deprecation warnings for SecCertificateCopyNormalizedIssuerContent and +// SecCertificateCopyNormalizedSubjectContent +// +#include <IceUtil/DisableWarnings.h> + #include <IceSSL/Plugin.h> #include <IceSSL/SecureTransport.h> #include <IceSSL/CertificateI.h> @@ -293,8 +299,8 @@ getX509Name(SecCertificateRef cert, CFTypeRef key) if(property) { CFArrayRef dn = static_cast<CFArrayRef>(CFDictionaryGetValue(property.get(), kSecPropertyKeyValue)); - int size = CFArrayGetCount(dn); - for(int i = 0; i < size; ++i) + CFIndex size = CFArrayGetCount(dn); + for(CFIndex i = 0; i < size; ++i) { CFDictionaryRef dict = static_cast<CFDictionaryRef>(CFArrayGetValueAtIndex(dn, i)); rdnPairs.push_front(make_pair( @@ -317,9 +323,9 @@ getX509AltName(SecCertificateRef cert, CFTypeRef key) if(property) { CFArrayRef names = static_cast<CFArrayRef>(CFDictionaryGetValue(property.get(), kSecPropertyKeyValue)); - int size = CFArrayGetCount(names); + CFIndex size = CFArrayGetCount(names); - for(int i = 0; i < size; ++i) + for(CFIndex i = 0; i < size; ++i) { CFDictionaryRef dict = static_cast<CFDictionaryRef>(CFArrayGetValueAtIndex(names, i)); @@ -341,7 +347,7 @@ getX509AltName(SecCertificateRef cert, CFTypeRef key) { CFArrayRef section = (CFArrayRef)v; ostringstream os; - for(int j = 0, count = CFArrayGetCount(section); j < count;) + for(CFIndex j = 0, count = CFArrayGetCount(section); j < count;) { CFDictionaryRef d = (CFDictionaryRef)CFArrayGetValueAtIndex(section, j); @@ -434,7 +440,7 @@ SecureTransportCertificateI::getAuthorityKeyIdentifier() const if(property) { CFTypeRef type = 0; - CFTypeRef value; + CFTypeRef value = 0; if(CFDictionaryGetValueIfPresent(property.get(), kSecPropertyKeyType, &type)) { if(CFEqual(type, kSecPropertyTypeSection)) @@ -473,7 +479,7 @@ SecureTransportCertificateI::getSubjectKeyIdentifier() const if(property) { CFTypeRef type = 0; - CFTypeRef value; + CFTypeRef value = 0; if(CFDictionaryGetValueIfPresent(property.get(), kSecPropertyKeyType, &type)) { if(CFEqual(type, kSecPropertyTypeSection)) @@ -574,7 +580,7 @@ SecureTransportCertificateI::encode() const ostringstream os; os << "-----BEGIN CERTIFICATE-----\n"; os << IceInternal::Base64::encode(data); - os << "-----END CERTIFICATE-----\n"; + os << "\n-----END CERTIFICATE-----\n"; return os.str(); #else // macOS UniqueRef<CFDataRef> exported; @@ -805,18 +811,18 @@ IceSSL::SecureTransport::CertificatePtr IceSSL::SecureTransport::Certificate::decode(const std::string& encoding) { #ifdef ICE_USE_SECURE_TRANSPORT_IOS - string::size_type size, startpos, endpos = 0; + string::size_type size = 0; + string::size_type startpos = 0; startpos = encoding.find("-----BEGIN CERTIFICATE-----", endpos); if(startpos != string::npos) { startpos += sizeof("-----BEGIN CERTIFICATE-----"); - endpos = encoding.find("-----END CERTIFICATE-----", startpos); + string::size_type endpos = encoding.find("-----END CERTIFICATE-----", startpos); size = endpos - startpos; } else { startpos = 0; - endpos = string::npos; size = encoding.size(); } diff --git a/cpp/src/IceSSL/SecureTransportTransceiverI.cpp b/cpp/src/IceSSL/SecureTransportTransceiverI.cpp index 7d33252b749..00d0ad0fce5 100644 --- a/cpp/src/IceSSL/SecureTransportTransceiverI.cpp +++ b/cpp/src/IceSSL/SecureTransportTransceiverI.cpp @@ -120,7 +120,8 @@ checkTrustResult(SecTrustRef trust, // if(engine->getCheckCertName() && !host.empty()) { - UniqueRef<SecPolicyRef> policy(SecPolicyCreateSSL(false, toCFString(host))); + UniqueRef<CFStringRef> hostref(toCFString(host)); + UniqueRef<SecPolicyRef> policy(SecPolicyCreateSSL(false, hostref.get())); UniqueRef<CFArrayRef> policies; if((err = SecTrustCopyPolicies(trust, &policies.get()))) { @@ -289,7 +290,7 @@ IceSSL::SecureTransport::TransceiverI::initialize(IceInternal::Buffer& readBuffe throw ProtocolException(__FILE__, __LINE__, os.str()); } - for(int i = 0, count = SecTrustGetCertificateCount(_trust.get()); i < count; ++i) + for(CFIndex i = 0, count = SecTrustGetCertificateCount(_trust.get()); i < count; ++i) { SecCertificateRef cert = SecTrustGetCertificateAtIndex(_trust.get(), i); CFRetain(cert); diff --git a/cpp/src/IceSSL/SecureTransportUtil.cpp b/cpp/src/IceSSL/SecureTransportUtil.cpp index a3ae427d516..5d20a56ee05 100644 --- a/cpp/src/IceSSL/SecureTransportUtil.cpp +++ b/cpp/src/IceSSL/SecureTransportUtil.cpp @@ -112,7 +112,7 @@ isCA(SecCertificateRef cert) if(property) { CFArrayRef propertyValues = static_cast<CFArrayRef>(CFDictionaryGetValue(property.get(), kSecPropertyKeyValue)); - for(int i = 0, size = CFArrayGetCount(propertyValues); i < size; ++i) + for(CFIndex i = 0, size = CFArrayGetCount(propertyValues); i < size; ++i) { CFDictionaryRef dict = static_cast<CFDictionaryRef>(CFArrayGetValueAtIndex(propertyValues, i)); CFStringRef label = static_cast<CFStringRef>(CFDictionaryGetValue(dict, kSecPropertyKeyLabel)); @@ -243,7 +243,7 @@ openKeychain(const std::string& path, const std::string& keychainPassword) if(err == noErr) { const char* pass = keychainPassword.empty() ? 0 : keychainPassword.c_str(); - if((err = SecKeychainUnlock(keychain.get(), keychainPassword.size(), pass, pass != 0))) + if((err = SecKeychainUnlock(keychain.get(), static_cast<int>(keychainPassword.size()), pass, pass != 0))) { throw PluginInitializationException(__FILE__, __LINE__, "IceSSL: unable to unlock keychain:\n" + sslErrorToString(err)); @@ -253,7 +253,7 @@ openKeychain(const std::string& path, const std::string& keychainPassword) { const char* pass = keychainPassword.empty() ? 0 : keychainPassword.c_str(); keychain.reset(0); - if((err = SecKeychainCreate(keychainPath.c_str(), keychainPassword.size(), pass, pass == 0, 0, &keychain.get()))) + if((err = SecKeychainCreate(keychainPath.c_str(), static_cast<int>(keychainPassword.size()), pass, pass == 0, 0, &keychain.get()))) { throw PluginInitializationException(__FILE__, __LINE__, "IceSSL: unable to create keychain:\n" + sslErrorToString(err)); @@ -354,9 +354,9 @@ loadPrivateKey(const string& file, SecCertificateRef cert, SecKeychainRef keycha // private key into the keychain and add the certificate. // UniqueRef<CFArrayRef> items(loadKeychainItems(file, kSecItemTypePrivateKey, keychain, password, prompt, retryMax)); - int count = CFArrayGetCount(items.get()); + CFIndex count = CFArrayGetCount(items.get()); UniqueRef<SecKeyRef> key; - for(int i = 0; i < count; ++i) + for(CFIndex i = 0; i < count; ++i) { SecKeychainItemRef itemRef = static_cast<SecKeychainItemRef>(const_cast<void*>(CFArrayGetValueAtIndex(items.get(), 0))); @@ -405,7 +405,7 @@ loadPrivateKey(const string& file, SecCertificateRef cert, SecKeychainRef keycha SecKeychainAttribute attr; attr.tag = kSecKeyLabel; attr.data = const_cast<UInt8*>(CFDataGetBytePtr(hash.get())); - attr.length = CFDataGetLength(hash.get()); + attr.length = static_cast<int>(CFDataGetLength(hash.get())); attributes.push_back(attr); } @@ -421,13 +421,13 @@ loadPrivateKey(const string& file, SecCertificateRef cert, SecKeychainRef keycha SecKeychainAttribute attr; attr.tag = kSecKeyPrintName; attr.data = const_cast<char*>(label.c_str()); - attr.length = label.size(); + attr.length = static_cast<int>(label.size()); attributes.push_back(attr); } SecKeychainAttributeList attrs; attrs.attr = &attributes[0]; - attrs.count = attributes.size(); + attrs.count = static_cast<int>(attributes.size()); SecKeychainItemModifyAttributesAndData(reinterpret_cast<SecKeychainItemRef>(key.get()), &attrs, 0, 0); UniqueRef<SecIdentityRef> identity; @@ -637,7 +637,7 @@ IceSSL::SecureTransport::loadCACertificates(const string& file) #else UniqueRef<CFArrayRef> items(loadKeychainItems(file, kSecItemTypeCertificate, 0, "", 0, 0)); UniqueRef<CFArrayRef> certificateAuthorities(CFArrayCreateMutable(kCFAllocatorDefault, 0, &kCFTypeArrayCallBacks)); - int count = CFArrayGetCount(items.get()); + CFIndex count = CFArrayGetCount(items.get()); for(CFIndex i = 0; i < count; ++i) { SecCertificateRef cert = @@ -800,7 +800,7 @@ IceSSL::SecureTransport::findCertificateChain(const std::string& keychainPath, "IceSSL: error evaluating trust:\n" + sslErrorToString(err)); } - int chainLength = SecTrustGetCertificateCount(trust.get()); + CFIndex chainLength = SecTrustGetCertificateCount(trust.get()); UniqueRef<CFArrayRef> items(CFArrayCreateMutable(kCFAllocatorDefault, chainLength, &kCFTypeArrayCallBacks)); for(int i = 0; i < chainLength; ++i) { diff --git a/cpp/src/IceSSL/Util.cpp b/cpp/src/IceSSL/Util.cpp index 0d04ab423cd..29a265814fa 100755 --- a/cpp/src/IceSSL/Util.cpp +++ b/cpp/src/IceSSL/Util.cpp @@ -134,7 +134,7 @@ IceSSL::readFile(const string& file, vector<char>& buffer) bool IceSSL::checkPath(const string& path, const string& defaultDir, bool dir, string& resolved) { -#if defined(ICE_USE_SECURE_TRANSPORT_IOS) +#if defined(ICE_USE_SECURE_TRANSPORT_IOS) || defined(ICE_SWIFT) CFBundleRef bundle = CFBundleGetMainBundle(); if(bundle) { diff --git a/cpp/src/IceUtil/OutputUtil.cpp b/cpp/src/IceUtil/OutputUtil.cpp index a917d3ae24a..05e39729f63 100644 --- a/cpp/src/IceUtil/OutputUtil.cpp +++ b/cpp/src/IceUtil/OutputUtil.cpp @@ -235,33 +235,43 @@ IceUtilInternal::OutputBase::operator!() const // Output // ---------------------------------------------------------------------- -IceUtilInternal::Output::Output() : +IceUtilInternal::Output::Output(bool breakBeforeBlock, bool shortEmptyBlock) : OutputBase(), _blockStart("{"), _blockEnd("}"), - _par(-1) + _par(-1), + _breakBeforeBlock(breakBeforeBlock), + _shortEmptyBlock(shortEmptyBlock), + _emptyBlock(false) { } -IceUtilInternal::Output::Output(ostream& os) : +IceUtilInternal::Output::Output(ostream& os, bool breakBeforeBlock, bool shortEmptyBlock) : OutputBase(os), _blockStart("{"), _blockEnd("}"), - _par(-1) + _par(-1), + _breakBeforeBlock(breakBeforeBlock), + _shortEmptyBlock(shortEmptyBlock), + _emptyBlock(false) { } -IceUtilInternal::Output::Output(const char* s) : +IceUtilInternal::Output::Output(const char* s, bool breakBeforeBlock, bool shortEmptyBlock) : OutputBase(s), _blockStart("{"), _blockEnd("}"), - _par(-1) + _par(-1), + _breakBeforeBlock(breakBeforeBlock), + _shortEmptyBlock(shortEmptyBlock), + _emptyBlock(false) { } void IceUtilInternal::Output::print(const string& s) { + _emptyBlock = false; if(_par >= 0) { if(++_par > 1) // No comma for the first parameter. @@ -277,22 +287,41 @@ IceUtilInternal::Output::sb() { if(_blockStart.length()) { - newline(); + if(_breakBeforeBlock) + { + newline(); + } + else + { + _out << ' '; + } _out << _blockStart; } ++_pos; inc(); _separator = false; + _emptyBlock = true; } void IceUtilInternal::Output::eb() { dec(); - if(_blockEnd.length()) + if(_emptyBlock && _shortEmptyBlock) + { + if(_blockEnd.length()) + { + _separator = true; + _out << _blockEnd; + } + } + else { - newline(); - _out << _blockEnd; + if(_blockEnd.length()) + { + newline(); + _out << _blockEnd; + } } --_pos; } @@ -300,6 +329,7 @@ IceUtilInternal::Output::eb() void IceUtilInternal::Output::spar(char c) { + _emptyBlock = false; _out << c; _par = 0; } diff --git a/cpp/src/IceUtil/Time.cpp b/cpp/src/IceUtil/Time.cpp index 4c4dc4b68a4..d68fff4a02e 100644 --- a/cpp/src/IceUtil/Time.cpp +++ b/cpp/src/IceUtil/Time.cpp @@ -197,8 +197,8 @@ IceUtil::Time::microSecondsDouble(double t) IceUtil::Time::operator timeval() const { timeval tv; - tv.tv_sec = static_cast<long>(_usec / 1000000); - tv.tv_usec = static_cast<long>(_usec % 1000000); + tv.tv_sec = static_cast<time_t>(_usec / 1000000); + tv.tv_usec = static_cast<suseconds_t>(_usec % 1000000); return tv; } #endif diff --git a/cpp/src/Slice/CPlusPlusUtil.cpp b/cpp/src/Slice/CPlusPlusUtil.cpp index cfcdda425e7..5120a15877a 100644 --- a/cpp/src/Slice/CPlusPlusUtil.cpp +++ b/cpp/src/Slice/CPlusPlusUtil.cpp @@ -527,7 +527,7 @@ Slice::printVersionCheck(Output& out) out << "\n"; out << "\n#ifndef ICE_IGNORE_VERSION"; int iceVersion = ICE_INT_VERSION; // Use this to prevent warning with C++Builder - if(iceVersion % 100 > 50) + if(iceVersion % 100 >= 50) { // // Beta version: exact match required @@ -545,7 +545,7 @@ Slice::printVersionCheck(Output& out) // // Generated code is release; reject beta header // - out << "\n# if ICE_INT_VERSION % 100 > 50"; + out << "\n# if ICE_INT_VERSION % 100 >= 50"; out << "\n# error Beta header file detected"; out << "\n# endif"; diff --git a/cpp/src/Slice/Parser.cpp b/cpp/src/Slice/Parser.cpp index e49c20f1c50..e0ed44f449e 100644 --- a/cpp/src/Slice/Parser.cpp +++ b/cpp/src/Slice/Parser.cpp @@ -19,6 +19,52 @@ using namespace std; using namespace Slice; + +Slice::CompilerException::CompilerException(const char* file, int line, const string& r) : + IceUtil::Exception(file, line), + _reason(r) +{ +} + +#ifndef ICE_CPP11_COMPILER +Slice::CompilerException::~CompilerException() throw() +{ +} +#endif + +string +Slice::CompilerException::ice_id() const +{ + return "::Slice::CompilerException"; +} + +void +Slice::CompilerException::ice_print(ostream& out) const +{ + IceUtil::Exception::ice_print(out); + out << ": " << _reason; +} + +#ifndef ICE_CPP11_MAPPING +Slice::CompilerException* +Slice::CompilerException::ice_clone() const +{ + return new CompilerException(*this); +} +#endif + +void +Slice::CompilerException::ice_throw() const +{ + throw *this; +} + +string +Slice::CompilerException::reason() const +{ + return _reason; +} + extern FILE* slice_in; extern int slice_debug; @@ -227,6 +273,20 @@ Slice::DefinitionContext::warning(WarningCategory category, const string& file, } } +void +Slice::DefinitionContext::error(const string& file, int line, const string& msg) const +{ + emitError(file, line, msg); + throw CompilerException(__FILE__, __LINE__, msg); +} + +void +Slice::DefinitionContext::error(const string& file, const string& line, const string& msg) const +{ + emitError(file, line, msg); + throw CompilerException(__FILE__, __LINE__, msg); +} + bool Slice::DefinitionContext::suppressWarning(WarningCategory category) const { @@ -4298,6 +4358,7 @@ Slice::ClassDef::isDelegate() const { return isLocal() && isInterface() && hasMetaData("delegate") && allOperations().size() == 1; } + Slice::ClassDef::ClassDef(const ContainerPtr& container, const string& name, int id, bool intf, const ClassList& bases, bool local) : SyntaxTreeBase(container->unit()), diff --git a/cpp/src/Slice/Parser.h b/cpp/src/Slice/Parser.h index 77bbce0c6e1..a4bfccd6a2d 100644 --- a/cpp/src/Slice/Parser.h +++ b/cpp/src/Slice/Parser.h @@ -7,6 +7,7 @@ #include <IceUtil/Shared.h> #include <IceUtil/Handle.h> +#include <IceUtil/Exception.h> #include <string> #include <vector> #include <list> @@ -18,6 +19,29 @@ namespace Slice { +class CompilerException : public ::IceUtil::Exception +{ +public: + + CompilerException(const char*, int, const std::string&); +#ifndef ICE_CPP11_COMPILER + ~CompilerException() throw(); +#endif + virtual std::string ice_id() const; + virtual void ice_print(std::ostream&) const; +#ifndef ICE_CPP11_MAPPING + virtual CompilerException* ice_clone() const; +#endif + virtual void ice_throw() const; + + std::string reason() const; + +private: + + static const char* _name; + const std::string _reason; +}; + #if defined(_WIN32) && !defined(__MINGW32__) const IceUtil::Int64 Int32Max = 0x7fffffffi64; @@ -241,6 +265,9 @@ public: void warning(WarningCategory, const std::string&, int, const std::string&) const; void warning(WarningCategory, const std::string&, const std::string&, const std::string&) const; + void error(const std::string&, int, const std::string&) const; + void error(const std::string&, const std::string&, const std::string&) const; + private: bool suppressWarning(WarningCategory) const; diff --git a/cpp/src/Slice/StringLiteralUtil.cpp b/cpp/src/Slice/StringLiteralUtil.cpp index 00c4af6efd6..db6885a8f0c 100644 --- a/cpp/src/Slice/StringLiteralUtil.cpp +++ b/cpp/src/Slice/StringLiteralUtil.cpp @@ -197,6 +197,11 @@ StringLiteralGenerator::escapeASCIIChar(char c) os << "\\" << oct << setfill('0') << setw(3) << static_cast<unsigned int>(c & 0xFF); _format = OctalFormat; } + else if(_escapeMode == EC6UCN) + { + os << "\\u{" << hex << setfill('0') << setw(4) << static_cast<unsigned int>(c & 0xFF) << "}"; + _format = HexFormat; + } else { os << _shortUCNPrefix << hex << setfill('0') << setw(4) << static_cast<unsigned int>(c & 0xFF); @@ -231,7 +236,11 @@ StringLiteralGenerator::escapeCodePoint(unsigned int codePoint) else { ostringstream os; - if(codePoint < _cutOff) + if(_escapeMode == EC6UCN) + { + os << "\\u{" << hex << codePoint << "}"; + } + else if(codePoint < _cutOff) { // // Output octal escape @@ -255,10 +264,6 @@ StringLiteralGenerator::escapeCodePoint(unsigned int codePoint) os << _shortUCNPrefix << setfill('0') << setw(4) << hex << lowSurrogate; _format = HexFormat; } - else if(_escapeMode == EC6UCN) - { - os << "\\u{" << hex << codePoint << "}"; - } else { os << "\\U" << setfill('0') << setw(8) << hex << codePoint; @@ -360,7 +365,7 @@ Slice::toStringLiteral(const string& value, // keep this escape as is os << "\\" << c << codePointStr; } - else if(c == 'u') + else if(c == 'u' && escapeMode != EC6UCN) { os << (escapeMode == Matlab ? "\\x" : "\\u") << codePointStr; generator.format(StringLiteralGenerator::HexFormat); diff --git a/cpp/src/slice2cpp/Gen.cpp b/cpp/src/slice2cpp/Gen.cpp index 2b65602d59b..0b3347f936e 100644 --- a/cpp/src/slice2cpp/Gen.cpp +++ b/cpp/src/slice2cpp/Gen.cpp @@ -5686,6 +5686,13 @@ Slice::Gen::MetaDataVisitor::validate(const SyntaxTreeBasePtr& cont, const Strin } } + if(BuiltinPtr::dynamicCast(cont) && + BuiltinPtr::dynamicCast(cont)->kind() == Builtin::KindLocalObject && + ss.find("type:") == 0) + { + continue; + } + dc->warning(InvalidMetaData, file, line, "ignoring invalid metadata `" + s + "'"); newMetaData.remove(s); continue; diff --git a/cpp/src/slice2swift/Gen.cpp b/cpp/src/slice2swift/Gen.cpp new file mode 100644 index 00000000000..4ced089cfe6 --- /dev/null +++ b/cpp/src/slice2swift/Gen.cpp @@ -0,0 +1,2044 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// +// + +#include <IceUtil/OutputUtil.h> +#include <IceUtil/StringUtil.h> +#include <IceUtil/Functional.h> +#include <Slice/Parser.h> +#include <Slice/FileTracker.h> +#include <Slice/Util.h> + +#include "Gen.h" + +using namespace std; +using namespace Slice; +using namespace IceUtilInternal; + +namespace +{ + +string +getClassResolverPrefix(const UnitPtr& p) +{ + DefinitionContextPtr dc = p->findDefinitionContext(p->topLevelFile()); + assert(dc); + + static const string classResolverPrefix = "swift:class-resolver-prefix:"; + string result = dc->findMetaData(classResolverPrefix); + if(!result.empty()) + { + result = result.substr(classResolverPrefix.size()); + } + return result; +} + +} + +Gen::Gen(const string& base, const vector<string>& includePaths, const string& dir) : + _out(false, true), // No break before opening block in Swift + short empty blocks + _includePaths(includePaths) +{ + _fileBase = base; + string::size_type pos = base.find_last_of("/\\"); + if(pos != string::npos) + { + _fileBase = base.substr(pos + 1); + } + + string file = _fileBase + ".swift"; + + if(!dir.empty()) + { + file = dir + '/' + file; + } + + _out.open(file.c_str()); + if(!_out) + { + ostringstream os; + os << "cannot open `" << file << "': " << IceUtilInternal::errorToString(errno); + throw FileException(__FILE__, __LINE__, os.str()); + } + FileTracker::instance()->addFile(file); + + printHeader(); + printGeneratedHeader(_out, _fileBase + ".ice"); + + _out << nl << "import Foundation"; +} + +Gen::~Gen() +{ + if(_out.isOpen()) + { + _out << nl; + } +} + +void +Gen::generate(const UnitPtr& p) +{ + SwiftGenerator::validateMetaData(p); + + ImportVisitor importVisitor(_out); + p->visit(&importVisitor, false); + importVisitor.writeImports(); + + TypesVisitor typesVisitor(_out); + p->visit(&typesVisitor, false); + + ProxyVisitor proxyVisitor(_out); + p->visit(&proxyVisitor, false); + + ValueVisitor valueVisitor(_out); + p->visit(&valueVisitor, false); + + ObjectVisitor objectVisitor(_out); + p->visit(&objectVisitor, false); + + ObjectExtVisitor objectExtVisitor(_out); + p->visit(&objectExtVisitor, false); + + LocalObjectVisitor localObjectVisitor(_out); + p->visit(&localObjectVisitor, false); +} + +void +Gen::closeOutput() +{ + _out.close(); +} + +void +Gen::printHeader() +{ + static const char* header = + "//\n" + "// Copyright (c) ZeroC, Inc. All rights reserved.\n" + "//\n"; + + _out << header; + _out << "//\n"; + _out << "// Ice version " << ICE_STRING_VERSION << "\n"; + _out << "//\n"; +} + +Gen::ImportVisitor::ImportVisitor(IceUtilInternal::Output& o) : out(o) +{ +} + +bool +Gen::ImportVisitor::visitModuleStart(const ModulePtr& p) +{ + // + // Always import Ice module first if not building Ice + // + if(UnitPtr::dynamicCast(p->container()) && _imports.empty()) + { + string swiftModule = getSwiftModule(p); + if(swiftModule != "Ice") + { + addImport("Ice"); + } + } + + // + // Add PromiseKit import for interfaces and local interfaces which contain "async-oneway" metadata + // + if(p->hasNonLocalInterfaceDefs() || p->hasLocalClassDefsWithAsync()) + { + addImport("PromiseKit"); + } + + return true; +} + +bool +Gen::ImportVisitor::visitClassDefStart(const ClassDefPtr& p) +{ + // + // Add imports required for base classes + // + ClassList bases = p->bases(); + for(ClassList::const_iterator i = bases.begin(); i != bases.end(); ++i) + { + addImport(ContainedPtr::dynamicCast(*i), p); + } + + // + // Add imports required for data members + // + const DataMemberList allDataMembers = p->allDataMembers(); + for(DataMemberList::const_iterator i = allDataMembers.begin(); i != allDataMembers.end(); ++i) + { + addImport((*i)->type(), p); + } + + // + // Add imports required for operation parameters and return type + // + const OperationList operationList = p->allOperations(); + for(OperationList::const_iterator i = operationList.begin(); i != operationList.end(); ++i) + { + const TypePtr ret = (*i)->returnType(); + if(ret && ret->definitionContext()) + { + addImport(ret, p); + } + + const ParamDeclList paramList = (*i)->parameters(); + for(ParamDeclList::const_iterator j = paramList.begin(); j != paramList.end(); ++j) + { + addImport((*j)->type(), p); + } + } + + return false; +} + +bool +Gen::ImportVisitor::visitStructStart(const StructPtr& p) +{ + // + // Add imports required for data members + // + const DataMemberList dataMembers = p->dataMembers(); + for(DataMemberList::const_iterator i = dataMembers.begin(); i != dataMembers.end(); ++i) + { + addImport((*i)->type(), p); + } + + return true; +} + +bool +Gen::ImportVisitor::visitExceptionStart(const ExceptionPtr& p) +{ + // + // Add imports required for base exceptions + // + ExceptionPtr base = p->base(); + if(base) + { + addImport(ContainedPtr::dynamicCast(base), p); + } + + // + // Add imports required for data members + // + const DataMemberList allDataMembers = p->allDataMembers(); + for(DataMemberList::const_iterator i = allDataMembers.begin(); i != allDataMembers.end(); ++i) + { + addImport((*i)->type(), p); + } + return true; +} + +void +Gen::ImportVisitor::visitSequence(const SequencePtr& seq) +{ + // + // Add import required for the sequence element type + // + addImport(seq->type(), seq); +} + +void +Gen::ImportVisitor::visitDictionary(const DictionaryPtr& dict) +{ + // + // Add imports required for the dictionary key and value types + // + addImport(dict->keyType(), dict); + addImport(dict->valueType(), dict); +} + +void +Gen::ImportVisitor::writeImports() +{ + for(vector<string>::const_iterator i = _imports.begin(); i != _imports.end(); ++i) + { + out << nl << "import " << *i; + } +} + +void +Gen::ImportVisitor::addImport(const TypePtr& definition, const ContainedPtr& toplevel) +{ + if(!BuiltinPtr::dynamicCast(definition)) + { + ModulePtr m1 = getTopLevelModule(definition); + ModulePtr m2 = getTopLevelModule(toplevel); + + string swiftM1 = getSwiftModule(m1); + string swiftM2 = getSwiftModule(m2); + if(swiftM1 != swiftM2 && find(_imports.begin(), _imports.end(), swiftM1) == _imports.end()) + { + _imports.push_back(swiftM1); + } + } +} + +void +Gen::ImportVisitor::addImport(const ContainedPtr& definition, const ContainedPtr& toplevel) +{ + ModulePtr m1 = getTopLevelModule(definition); + ModulePtr m2 = getTopLevelModule(toplevel); + + string swiftM1 = getSwiftModule(m1); + string swiftM2 = getSwiftModule(m2); + if(swiftM1 != swiftM2 && find(_imports.begin(), _imports.end(), swiftM1) == _imports.end()) + { + _imports.push_back(swiftM1); + } +} + +void +Gen::ImportVisitor::addImport(const string& module) +{ + if(find(_imports.begin(), _imports.end(), module) == _imports.end()) + { + _imports.push_back(module); + } +} + +Gen::TypesVisitor::TypesVisitor(IceUtilInternal::Output& o) : out(o) +{ +} + +bool +Gen::TypesVisitor::visitClassDefStart(const ClassDefPtr& p) +{ + if(p->isLocal()) + { + return false; + } + + const string swiftModule = getSwiftModule(getTopLevelModule(ContainedPtr::dynamicCast(p))); + const string name = fixIdent(getUnqualified(getAbsolute(p), swiftModule)); + const string traits = fixIdent(getUnqualified(getAbsolute(p), swiftModule) + "Traits"); + + ClassList allBases = p->allBases(); + StringList allIds; + transform(allBases.begin(), allBases.end(), back_inserter(allIds), ::IceUtil::constMemFun(&Contained::scoped)); + allIds.push_back(p->scoped()); + allIds.push_back("::Ice::Object"); + allIds.sort(); + allIds.unique(); + + ostringstream ids; + + ids << "["; + for(StringList::const_iterator r = allIds.begin(); r != allIds.end(); ++r) + { + if(r != allIds.begin()) + { + ids << ", "; + } + ids << "\"" << (*r) << "\""; + + } + ids << "]"; + + out << sp; + out << nl << "/// Traits for Slice "; + if(p->isInterface()) + { + out << "interface "; + } + else + { + out << "class "; + } + out << '`' << name << "`."; + out << nl << "public struct " << traits << ": " << getUnqualified("Ice.SliceTraits", swiftModule); + out << sb; + out << nl << "public static let staticIds = " << ids.str(); + out << nl << "public static let staticId = \"" << p->scoped() << '"'; + out << eb; + + return false; +} + +bool +Gen::TypesVisitor::visitExceptionStart(const ExceptionPtr& p) +{ + const string swiftModule = getSwiftModule(getTopLevelModule(ContainedPtr::dynamicCast(p))); + const string name = getUnqualified(getAbsolute(p), swiftModule); + + ExceptionPtr base = p->base(); + + if(!p->isLocal()) + { + const string prefix = getClassResolverPrefix(p->unit()); + + // + // For each UserException class we generate an extension in ClassResolver + // + ostringstream factory; + factory << prefix; + StringList parts = splitScopedName(p->scoped()); + for(StringList::const_iterator it = parts.begin(); it != parts.end();) + { + factory << (*it); + if(++it != parts.end()) + { + factory << "_"; + } + } + + out << sp; + out << nl << "/// :nodoc:"; + out << nl << "public class " << name << "_TypeResolver: " + << getUnqualified("Ice.UserExceptionTypeResolver", swiftModule); + out << sb; + out << nl << "public override func type() -> " << getUnqualified("Ice.UserException.Type", swiftModule); + out << sb; + out << nl << "return " << fixIdent(name) << ".self"; + out << eb; + out << eb; + + out << sp; + out << nl << "public extension " << getUnqualified("Ice.ClassResolver", swiftModule); + out << sb; + out << nl << "@objc static func " << factory.str() << "() -> " + << getUnqualified("Ice.UserExceptionTypeResolver", swiftModule); + out << sb; + out << nl << "return " << name << "_TypeResolver()"; + out << eb; + out << eb; + } + + out << sp; + writeDocSummary(out, p); + writeSwiftAttributes(out, p->getMetaData()); + out << nl << "open class " << fixIdent(name) << ": "; + if(base) + { + out << fixIdent(getUnqualified(getAbsolute(base), swiftModule)); + } + else if(p->isLocal()) + { + out << getUnqualified("Ice.LocalException", swiftModule); + } + else + { + out << getUnqualified("Ice.UserException", swiftModule); + } + out << sb; + + const DataMemberList members = p->dataMembers(); + const DataMemberList allMembers = p->allDataMembers(); + const DataMemberList baseMembers = base ? base->allDataMembers() : DataMemberList(); + + StringPairList extraParams; + if(p->isLocal()) + { + extraParams.push_back(make_pair("file", "Swift.String = #file")); + extraParams.push_back(make_pair("line", "Swift.Int = #line")); + } + + writeMembers(out, members, p); + + const bool basePreserved = p->inheritsMetaData("preserve-slice"); + const bool preserved = p->hasMetaData("preserve-slice"); + + if(!p->isLocal() && preserved && !basePreserved) + { + out << nl << "var _slicedData: Ice.SlicedData?"; + } + + bool rootClass = !base && !p->isLocal(); + if(rootClass || !members.empty()) + { + writeDefaultInitializer(out, true, rootClass); + } + writeMemberwiseInitializer(out, members, baseMembers, allMembers, p, p->isLocal(), rootClass, extraParams); + + out << sp; + out << nl << "/// Returns the Slice type ID of this exception."; + out << nl << "///"; + out << nl << "/// - returns: `Swift.String` - the Slice type ID of this exception."; + out << nl << "open override class func ice_staticId() -> Swift.String"; + out << sb; + out << nl << "return \"" << p->scoped() << "\""; + out << eb; + + if(p->isLocal()) + { + out << sp; + out << nl << "/// Returns a string representation of this exception"; + out << nl << "///"; + out << nl << "/// - returns: `Swift.String` - The string representaton of this exception."; + out << nl << "open override func ice_print() -> Swift.String"; + out << sb; + out << nl << "return _" << name << "Description"; + out << eb; + } + else + { + out << sp; + out << nl << "open override func _iceWriteImpl(to ostr: " + << getUnqualified("Ice.OutputStream", swiftModule) << ")"; + out << sb; + out << nl << "ostr.startSlice(typeId: " << fixIdent(name) << ".ice_staticId(), compactId: -1, last: " + << (!base ? "true" : "false") << ")"; + for(DataMemberList::const_iterator i = members.begin(); i != members.end(); ++i) + { + writeMarshalUnmarshalCode(out, (*i)->type(), p, "self." + fixIdent((*i)->name()), true, (*i)->tag()); + } + out << nl << "ostr.endSlice()"; + if(base) + { + out << nl << "super._iceWriteImpl(to: ostr);"; + } + out << eb; + + out << sp; + out << nl << "open override func _iceReadImpl(from istr: " + << getUnqualified("Ice.InputStream", swiftModule) << ") throws"; + out << sb; + out << nl << "_ = try istr.startSlice()"; + for(DataMemberList::const_iterator i = members.begin(); i != members.end(); ++i) + { + writeMarshalUnmarshalCode(out, (*i)->type(), p, "self." + fixIdent((*i)->name()), false, (*i)->tag()); + } + out << nl << "try istr.endSlice()"; + if(base) + { + out << nl << "try super._iceReadImpl(from: istr);"; + } + out << eb; + + if(p->usesClasses(false) && (!base || (base && !base->usesClasses(false)))) + { + out << sp; + out << nl << "open override func _usesClasses() -> Swift.Bool" << sb; + out << nl << "return true"; + out << eb; + } + + if(preserved && !basePreserved) + { + out << sp; + out << nl << "/// Returns the sliced data if the exception has a preserved-slice base class and has been"; + out << nl << "/// sliced during un-marshaling, nil is returned otherwise."; + out << nl << "///"; + out << nl << "/// - returns: `Ice.SlicedData` - The sliced data."; + out << nl << "open override func ice_getSlicedData() -> " << getUnqualified("Ice.SlicedData", swiftModule) + << "?" << sb; + out << nl << "return _slicedData"; + out << eb; + + out << sp; + out << nl << "open override func _iceRead(from istr: " << getUnqualified("Ice.InputStream", swiftModule) + << ") throws" << sb; + out << nl << "istr.startException()"; + out << nl << "try _iceReadImpl(from: istr)"; + out << nl << "_slicedData = try istr.endException(preserve: true)"; + out << eb; + + out << sp; + out << nl << "open override func _iceWrite(to ostr: " << getUnqualified("Ice.OutputStream", swiftModule) + << ")" << sb; + out << nl << "ostr.startException(data: _slicedData)"; + out << nl << "_iceWriteImpl(to: ostr)"; + out << nl << "ostr.endException()"; + out << eb; + } + } + + out << eb; + return false; +} + +bool +Gen::TypesVisitor::visitStructStart(const StructPtr& p) +{ + const string swiftModule = getSwiftModule(getTopLevelModule(ContainedPtr::dynamicCast(p))); + const string name = fixIdent(getUnqualified(getAbsolute(p), swiftModule)); + bool containsSequence; + bool legalKeyType = Dictionary::legalKeyType(p, containsSequence); + const DataMemberList members = p->dataMembers(); + const string optionalFormat = getOptionalFormat(p); + + bool isClass = containsClassMembers(p); + out << sp; + writeDocSummary(out, p); + writeSwiftAttributes(out, p->getMetaData()); + out << nl << "public " << (isClass ? "class " : "struct ") << name; + if(legalKeyType) + { + out << ": Swift.Hashable"; + } + out << sb; + + writeMembers(out, members, p); + writeDefaultInitializer(out, false, true); + writeMemberwiseInitializer(out, members, p); + + out << eb; + + if(!p->isLocal()) + { + out << sp; + out << nl << "/// An `Ice.InputStream` extension to read `" << name << "` structured values from the stream."; + out << nl << "public extension " << getUnqualified("Ice.InputStream", swiftModule); + out << sb; + + out << sp; + out << nl << "/// Read a `" << name << "` structured value from the stream."; + out << nl << "///"; + out << nl << "/// - returns: `" << name << "` - The structured value read from the stream."; + out << nl << "func read() throws -> " << name; + out << sb; + out << nl << (isClass ? "let" : "var") << " v = " << name << "()"; + for(DataMemberList::const_iterator q = members.begin(); q != members.end(); ++q) + { + writeMarshalUnmarshalCode(out, (*q)->type(), p, "v." + fixIdent((*q)->name()), false); + } + out << nl << "return v"; + out << eb; + + out << sp; + out << nl << "/// Read an optional `" << name << "?` structured value from the stream."; + out << nl << "///"; + out << nl << "/// - parameter tag: `Swift.Int32` - The numeric tag associated with the value."; + out << nl << "///"; + out << nl << "/// - returns: `" << name << "?` - The structured value read from the stream."; + out << nl << "func read(tag: Swift.Int32) throws -> " << name << "?"; + out << sb; + out << nl << "guard try readOptional(tag: tag, expectedFormat: " << optionalFormat << ") else"; + out << sb; + out << nl << "return nil"; + out << eb; + if(p->isVariableLength()) + { + out << nl << "try skip(4)"; + } + else + { + out << nl << "try skipSize()"; + } + out << nl << "return try read() as " << name; + out << eb; + + out << eb; + + out << sp; + out << nl << "/// An `Ice.OutputStream` extension to write `" << name << "` structured values from the stream."; + out << nl << "public extension " << getUnqualified("Ice.OutputStream", swiftModule); + out << sb; + + out << nl << "/// Write a `" << name << "` structured value to the stream."; + out << nl << "///"; + out << nl << "/// - parameter _: `" << name << "` - The value to write to the stream."; + out << nl << "func write(_ v: " << name << ")" << sb; + for(DataMemberList::const_iterator q = members.begin(); q != members.end(); ++q) + { + writeMarshalUnmarshalCode(out, (*q)->type(), p, "v." + fixIdent((*q)->name()), true); + } + out << eb; + + out << sp; + out << nl << "/// Write an optional `" << name << "?` structured value to the stream."; + out << nl << "///"; + out << nl << "/// - parameter tag: `Swift.Int32` - The numeric tag associated with the value."; + out << nl << "///"; + out << nl << "/// - parameter value: `" << name << "?` - The value to write to the stream."; + out << nl << "func write(tag: Swift.Int32, value: " << name << "?)" << sb; + out << nl << "if let v = value" << sb; + out << nl << "if writeOptional(tag: tag, format: " << optionalFormat << ")" << sb; + + if(p->isVariableLength()) + { + out << nl << "let pos = startSize()"; + out << nl << "write(v)"; + out << nl << "endSize(position: pos)"; + } + else + { + out << nl << "write(size: " << p->minWireSize() << ")"; + out << nl << "write(v)"; + } + out << eb; + out << eb; + out << eb; + + out << eb; + } + + return false; +} + +void +Gen::TypesVisitor::visitSequence(const SequencePtr& p) +{ + const string swiftModule = getSwiftModule(getTopLevelModule(ContainedPtr::dynamicCast(p))); + const string name = getUnqualified(getAbsolute(p), swiftModule); + int typeCtx = p->isLocal() ? TypeContextLocal : 0; + + const TypePtr type = p->type(); + BuiltinPtr builtin = BuiltinPtr::dynamicCast(p->type()); + + out << sp; + writeDocSummary(out, p); + out << nl << "public typealias " << fixIdent(name) << " = "; + + if(builtin && builtin->kind() == Builtin::KindByte) + { + out << "Foundation.Data"; + } + else + { + out << "[" << typeToString(p->type(), p, p->getMetaData(), false, typeCtx) << "]"; + } + + if(p->isLocal()) + { + return; + } + + if(builtin && builtin->kind() <= Builtin::KindString) + { + return; // No helpers for sequence of primitive types + } + + const string ostr = getUnqualified("Ice.OutputStream", swiftModule); + const string istr = getUnqualified("Ice.InputStream", swiftModule); + + const string optionalFormat = getUnqualified(getOptionalFormat(p), swiftModule); + + out << sp; + out << nl << "/// Helper class to read and write `" << fixIdent(name) << "` sequence values from"; + out << nl << "/// `Ice.InputStream` and `Ice.OutputStream`."; + out << nl << "public struct " << name << "Helper"; + out << sb; + + out << nl << "/// Read a `" << fixIdent(name) << "` sequence from the stream."; + out << nl << "///"; + out << nl << "/// - parameter istr: `Ice.InputStream` - The stream to read from."; + out << nl << "///"; + out << nl << "/// - returns: `" << fixIdent(name) << "` - The sequence read from the stream."; + out << nl << "public static func read(from istr: " << istr << ") throws -> " + << fixIdent(name); + out << sb; + out << nl << "let sz = try istr.readAndCheckSeqSize(minSize: " << p->type()->minWireSize() << ")"; + + if(isClassType(type)) + { + out << nl << "var v = " << fixIdent(name) << "(repeating: nil, count: sz)"; + out << nl << "for i in 0 ..< sz"; + out << sb; + out << nl << "let p = UnsafeMutablePointer<" << typeToString(p->type(), p) << ">(&v[i])"; + writeMarshalUnmarshalCode(out, type, p, "p.pointee", false); + out << eb; + } + else + { + out << nl << "var v = " << fixIdent(name) << "()"; + out << nl << "v.reserveCapacity(sz)"; + out << nl << "for _ in 0 ..< sz"; + out << sb; + string param = "let j: " + typeToString(p->type(), p); + writeMarshalUnmarshalCode(out, type, p, param, false); + out << nl << "v.append(j)"; + out << eb; + } + out << nl << "return v"; + out << eb; + + out << nl << "/// Read an optional `" << fixIdent(name) << "?` sequence from the stream."; + out << nl << "///"; + out << nl << "/// - parameter istr: `Ice.InputStream` - The stream to read from."; + out << nl << "///"; + out << nl << "/// - parameter tag: `Swift.Int32` - The numeric tag associated with the value."; + out << nl << "///"; + out << nl << "/// - returns: `" << fixIdent(name) << "` - The sequence read from the stream."; + out << nl << "public static func read(from istr: " << istr << ", tag: Swift.Int32) throws -> " + << fixIdent(name) << "?"; + out << sb; + out << nl << "guard try istr.readOptional(tag: tag, expectedFormat: " << optionalFormat << ") else"; + out << sb; + out << nl << "return nil"; + out << eb; + if(p->type()->isVariableLength()) + { + out << nl << "try istr.skip(4)"; + } + else if(p->type()->minWireSize() > 1) + { + out << nl << "try istr.skipSize()"; + } + out << nl << "return try read(from: istr)"; + out << eb; + + out << sp; + out << nl << "/// Wite a `" << fixIdent(name) << "` sequence to the stream."; + out << nl << "///"; + out << nl << "/// - parameter ostr: `Ice.OuputStream` - The stream to write to."; + out << nl << "///"; + out << nl << "/// - parameter value: `" << fixIdent(name) << "` - The sequence value to write to the stream."; + out << nl << "public static func write(to ostr: " << ostr << ", value v: " << fixIdent(name) << ")"; + out << sb; + out << nl << "ostr.write(size: v.count)"; + out << nl << "for item in v"; + out << sb; + writeMarshalUnmarshalCode(out, type, p, "item", true); + out << eb; + out << eb; + + out << sp; + out << nl << "/// Wite an optional `" << fixIdent(name) << "?` sequence to the stream."; + out << nl << "///"; + out << nl << "/// - parameter ostr: `Ice.OuputStream` - The stream to write to."; + out << nl << "///"; + out << nl << "/// - parameter tag: `Int32` - The numeric tag associated with the value."; + out << nl << "///"; + out << nl << "/// - parameter value: `" << fixIdent(name) << "` The sequence value to write to the stream."; + out << nl << "public static func write(to ostr: " << ostr << ", tag: Swift.Int32, value v: " + << fixIdent(name) << "?)"; + out << sb; + out << nl << "guard let val = v else"; + out << sb; + out << nl << "return"; + out << eb; + if(p->type()->isVariableLength()) + { + out << nl << "if ostr.writeOptional(tag: tag, format: " << optionalFormat << ")"; + out << sb; + out << nl << "let pos = ostr.startSize()"; + out << nl << "write(to: ostr, value: val)"; + out << nl << "ostr.endSize(position: pos)"; + out << eb; + } + else + { + if(p->type()->minWireSize() == 1) + { + out << nl << "if ostr.writeOptional(tag: tag, format: .VSize)"; + } + else + { + out << nl << "if ostr.writeOptionalVSize(tag: tag, len: val.count, elemSize: " + << p->type()->minWireSize() << ")"; + } + out << sb; + out << nl << "write(to: ostr, value: val)"; + out << eb; + } + out << eb; + + out << eb; +} + +void +Gen::TypesVisitor::visitDictionary(const DictionaryPtr& p) +{ + const string swiftModule = getSwiftModule(getTopLevelModule(ContainedPtr::dynamicCast(p))); + const string name = getUnqualified(getAbsolute(p), swiftModule); + int typeCtx = p->isLocal() ? TypeContextLocal : 0; + + const string keyType = typeToString(p->keyType(), p, p->keyMetaData(), false, typeCtx); + const string valueType = typeToString(p->valueType(), p, p->valueMetaData(), false, typeCtx); + out << sp; + writeDocSummary(out, p); + out << nl << "public typealias " << fixIdent(name) << " = [" << keyType << ": " << valueType << "]"; + + if(p->isLocal()) + { + return; + } + + const string ostr = getUnqualified("Ice.OutputStream", swiftModule); + const string istr = getUnqualified("Ice.InputStream", swiftModule); + + const string optionalFormat = getUnqualified(getOptionalFormat(p), swiftModule); + const bool isVariableLength = p->keyType()->isVariableLength() || p->valueType()->isVariableLength(); + const int minWireSize = p->keyType()->minWireSize() + p->valueType()->minWireSize(); + + out << sp; + out << nl << "/// Helper class to read and write `" << fixIdent(name) << "` dictionary values from"; + out << nl << "/// `Ice.InputStream` and `Ice.OutputStream`."; + out << nl << "public struct " << name << "Helper"; + out << sb; + + out << nl << "/// Read a `" << fixIdent(name) << "` dictionary from the stream."; + out << nl << "///"; + out << nl << "/// - parameter istr: `Ice.InputStream` - The stream to read from."; + out << nl << "///"; + out << nl << "/// - returns: `" << fixIdent(name) << "` - The dictionary read from the stream."; + out << nl << "public static func read(from istr: " << istr << ") throws -> " << fixIdent(name); + out << sb; + out << nl << "let sz = try Swift.Int(istr.readSize())"; + out << nl << "var v = " << fixIdent(name) << "()"; + if(isClassType(p->valueType())) + { + out << nl << "let e = " << getUnqualified("Ice.DictEntryArray", swiftModule) << "<" << keyType << ", " + << valueType << ">(size: sz)"; + out << nl << "for i in 0 ..< sz"; + out << sb; + string keyParam = "let key: " + keyType; + writeMarshalUnmarshalCode(out, p->keyType(), p, keyParam, false); + out << nl << "v[key] = nil as " << valueType; + out << nl << "e.values[i] = Ice.DictEntry<" << keyType << ", " << valueType << ">(" + << "key: key, " + << "value: UnsafeMutablePointer<" << valueType << ">(&v[key, default:nil]))"; + writeMarshalUnmarshalCode(out, p->valueType(), p, "e.values[i].value.pointee", false); + out << eb; + + out << nl << "for i in 0..<sz" << sb; + out << nl << "e.values[i].value = Swift.UnsafeMutablePointer<" << valueType + << ">(&v[e.values[i].key, default:nil])"; + out << eb; + } + else + { + out << nl << "for _ in 0 ..< sz"; + out << sb; + string keyParam = "let key: " + keyType; + writeMarshalUnmarshalCode(out, p->keyType(), p, keyParam, false); + string valueParam = "let value: " + typeToString(p->valueType(), p); + writeMarshalUnmarshalCode(out, p->valueType(), p, valueParam, false); + out << nl << "v[key] = value"; + out << eb; + } + + out << nl << "return v"; + out << eb; + + out << nl << "/// Read an optional `" << fixIdent(name) << "?` dictionary from the stream."; + out << nl << "///"; + out << nl << "/// - parameter istr: `Ice.InputStream` - The stream to read from."; + out << nl << "///"; + out << nl << "/// - parameter tag: `Int32` - The numeric tag associated with the value."; + out << nl << "///"; + out << nl << "/// - returns: `" << fixIdent(name) << "` - The dictionary read from the stream."; + out << nl << "public static func read(from istr: " << istr << ", tag: Swift.Int32) throws -> " + << fixIdent(name) << "?"; + out << sb; + out << nl << "guard try istr.readOptional(tag: tag, expectedFormat: " << optionalFormat << ") else"; + out << sb; + out << nl << "return nil"; + out << eb; + if(p->keyType()->isVariableLength() || p->valueType()->isVariableLength()) + { + out << nl << "try istr.skip(4)"; + } + else + { + out << nl << "try istr.skipSize()"; + } + out << nl << "return try read(from: istr)"; + out << eb; + + out << sp; + out << nl << "/// Wite a `" << fixIdent(name) << "` dictionary to the stream."; + out << nl << "///"; + out << nl << "/// - parameter ostr: `Ice.OuputStream` - The stream to write to."; + out << nl << "///"; + out << nl << "/// - parameter value: `" << fixIdent(name) << "` - The dictionary value to write to the stream."; + out << nl << "public static func write(to ostr: " << ostr << ", value v: " << fixIdent(name) << ")"; + out << sb; + out << nl << "ostr.write(size: v.count)"; + out << nl << "for (key, value) in v"; + out << sb; + writeMarshalUnmarshalCode(out, p->keyType(), p, "key", true); + writeMarshalUnmarshalCode(out, p->valueType(), p, "value", true); + out << eb; + out << eb; + + out << sp; + out << nl << "/// Wite an optional `" << fixIdent(name) << "?` dictionary to the stream."; + out << nl << "///"; + out << nl << "/// - parameter ostr: `Ice.OuputStream` - The stream to write to."; + out << nl << "///"; + out << nl << "/// - parameter tag: `Int32` - The numeric tag associated with the value."; + out << nl << "///"; + out << nl << "/// - parameter value: `" << fixIdent(name) << "` - The dictionary value to write to the stream."; + out << nl << "public static func write(to ostr: " << ostr << ", tag: Swift.Int32, value v: " + << fixIdent(name) << "?)"; + out << sb; + out << nl << "guard let val = v else"; + out << sb; + out << nl << "return"; + out << eb; + if(isVariableLength) + { + out << nl << "if ostr.writeOptional(tag: tag, format: " << optionalFormat << ")"; + out << sb; + out << nl << "let pos = ostr.startSize()"; + out << nl << "write(to: ostr, value: val)"; + out << nl << "ostr.endSize(position: pos)"; + out << eb; + } + else + { + out << nl << "if ostr.writeOptionalVSize(tag: tag, len: val.count, elemSize: " << minWireSize << ")"; + out << sb; + out << nl << "write(to: ostr, value: val)"; + out << eb; + } + out << eb; + + out << eb; +} + +void +Gen::TypesVisitor::visitEnum(const EnumPtr& p) +{ + const string swiftModule = getSwiftModule(getTopLevelModule(ContainedPtr::dynamicCast(p))); + const string name = fixIdent(getUnqualified(getAbsolute(p), swiftModule)); + const EnumeratorList enumerators = p->enumerators(); + const string enumType = p->maxValue() <= 0xFF ? "Swift.UInt8" : "Swift.Int32"; + const string optionalFormat = getOptionalFormat(p); + + out << sp; + writeDocSummary(out, p); + writeSwiftAttributes(out, p->getMetaData()); + out << nl << "public enum " << name << ": " << enumType; + out << sb; + + for(EnumeratorList::const_iterator en = enumerators.begin(); en != enumerators.end(); ++en) + { + StringList sl = splitComment((*en)->comment()); + out << nl << "/// " << fixIdent((*en)->name()); + if(!sl.empty()) + { + out << " "; + writeDocLines(out, sl, false); + } + out << nl << "case " << fixIdent((*en)->name()) << " = " << (*en)->value(); + } + + out << nl << "public init()"; + out << sb; + out << nl << "self = ." << fixIdent((*enumerators.begin())->name()); + out << eb; + + out << eb; + + out << sp; + out << nl << "/// An `Ice.InputStream` extension to read `" << name << "` enumerated values from the stream."; + out << nl << "public extension " << getUnqualified("Ice.InputStream", swiftModule); + out << sb; + + out << sp; + out << nl << "/// Read an enumerated value."; + out << nl << "///"; + out << nl << "/// - returns: `" << name << "` - The enumarated value."; + out << nl << "func read() throws -> " << name; + out << sb; + out << nl << "let rawValue: " << enumType << " = try read(enumMaxValue: " << p->maxValue() << ")"; + out << nl << "guard let val = " << name << "(rawValue: rawValue) else"; + out << sb; + out << nl << "throw " << getUnqualified("Ice.MarshalException", swiftModule) << "(reason: \"invalid enum value\")"; + out << eb; + out << nl << "return val"; + out << eb; + + out << sp; + out << nl << "/// Read an optional enumerated value from the stream."; + out << nl << "///"; + out << nl << "/// - parameter tag: `Int32` - The numeric tag associated with the value."; + out << nl << "///"; + out << nl << "/// - returns: `" << name << "` - The enumerated value."; + out << nl << "func read(tag: Swift.Int32) throws -> " << name << "?"; + out << sb; + out << nl << "guard try readOptional(tag: tag, expectedFormat: " << optionalFormat << ") else"; + out << sb; + out << nl << "return nil"; + out << eb; + out << nl << "return try read() as " << name; + out << eb; + + out << eb; + + out << sp; + out << nl << "/// An `Ice.OutputStream` extension to write `" << name << "` enumerated values to the stream."; + out << nl << "public extension " << getUnqualified("Ice.OutputStream", swiftModule); + out << sb; + + out << sp; + out << nl << "/// Writes an enumerated value to the stream."; + out << nl << "///"; + out << nl << "/// parameter _: `" << name << "` - The enumerator to write."; + out << nl << "func write(_ v: " << name << ")"; + out << sb; + out << nl << "write(enum: v.rawValue, maxValue: " << p->maxValue() << ")"; + out << eb; + + out << sp; + out << nl << "/// Writes an optional enumerated value to the stream."; + out << nl << "///"; + out << nl << "/// parameter tag: `Int32` - The numeric tag associated with the value."; + out << nl << "///"; + out << nl << "/// parameter _: `" << name << "` - The enumerator to write."; + out << nl << "func write(tag: Swift.Int32, value: " << name << "?)"; + out << sb; + out << nl << "guard let v = value else"; + out << sb; + out << nl << "return"; + out << eb; + out << nl << "write(tag: tag, val: v.rawValue, maxValue: " << p->maxValue() << ")"; + out << eb; + + out << eb; +} + +void +Gen::TypesVisitor::visitConst(const ConstPtr& p) +{ + const string name = fixIdent(p->name()); + const TypePtr type = p->type(); + const string swiftModule = getSwiftModule(getTopLevelModule(ContainedPtr::dynamicCast(p))); + + writeDocSummary(out, p); + out << nl << "public let " << name << ": " << typeToString(type, p) << " = "; + writeConstantValue(out, type, p->valueType(), p->value(), p->getMetaData(), swiftModule); + out << nl; +} + +Gen::ProxyVisitor::ProxyVisitor(::IceUtilInternal::Output& o) : out(o) +{ +} + +bool +Gen::ProxyVisitor::visitModuleStart(const ModulePtr& p) +{ + return p->hasNonLocalClassDefs(); +} + +void +Gen::ProxyVisitor::visitModuleEnd(const ModulePtr&) +{ +} + +bool +Gen::ProxyVisitor::visitClassDefStart(const ClassDefPtr& p) +{ + if(p->isLocal() || (!p->isInterface() && p->allOperations().empty())) + { + return false; + } + + ClassList bases = p->bases(); + bool hasBase = false; + while(!bases.empty() && !hasBase) + { + ClassDefPtr baseClass = bases.front(); + if(!baseClass->isInterface() && baseClass->allOperations().empty()) + { + // does not count + bases.pop_front(); + } + else + { + hasBase = true; + } + } + + const string swiftModule = getSwiftModule(getTopLevelModule(ContainedPtr::dynamicCast(p))); + const string name = getUnqualified(getAbsolute(p), swiftModule); + const string traits = name + "Traits"; + const string prx = name + "Prx"; + const string prxI = name + "PrxI"; + + out << sp; + writeProxyDocSummary(out, p, swiftModule); + out << nl << "public protocol " << prx << ":"; + if(!hasBase) + { + out << " " << getUnqualified("Ice.ObjectPrx", swiftModule); + } + else + { + for(ClassList::const_iterator i = bases.begin(); i != bases.end();) + { + out << " " << getUnqualified(getAbsolute(*i), swiftModule) << "Prx"; + if(++i != bases.end()) + { + out << ","; + } + } + } + out << sb; + out << eb; + + out << sp; + out << nl; + if(swiftModule == "Ice") + { + out << "internal "; + } + else + { + out << "private "; + } + out << "final class " << prxI << ": " << getUnqualified("Ice.ObjectPrxI", swiftModule) << ", " << prx; + out << sb; + + out << nl << "public override class func ice_staticId() -> Swift.String"; + out << sb; + out << nl << "return " << traits << ".staticId"; + out << eb; + + out << eb; + + // + // checkedCast + // + out << sp; + out << nl << "/// Casts a proxy to the requested type. This call contacts the server and verifies that the object"; + out << nl << "/// implements this type."; + out << nl << "///"; + out << nl << "/// It will throw a local exception if a communication error occurs. You can optionally supply a"; + out << nl << "/// facet name and a context map."; + out << nl << "///"; + out << nl << "/// - parameter prx: `Ice.ObjectPrx` - The proxy to be cast."; + out << nl << "///"; + out << nl << "/// - parameter type: `" << prx << ".Protocol` - The proxy type to cast to."; + out << nl << "///"; + out << nl << "/// - parameter facet: `String` - The optional name of the desired facet."; + out << nl << "///"; + out << nl << "/// - parameter context: `Ice.Context` The optional context dictionary for the remote invocation."; + out << nl << "///"; + out << nl << "/// - returns: `" << prx << "` - A proxy with the requested type or nil if the objet does not"; + out << nl << "/// support this type."; + out << nl << "///"; + out << nl << "/// - throws: `Ice.LocalException` if a communication error occurs."; + out << nl << "public func checkedCast" << spar + << ("prx: " + getUnqualified("Ice.ObjectPrx", swiftModule)) + << ("type: " + prx + ".Protocol") + << ("facet: Swift.String? = nil") + << ("context: " + getUnqualified("Ice.Context", swiftModule) + "? = nil") + << epar << " throws -> " << prx << "?"; + out << sb; + out << nl << "return try " << prxI << ".checkedCast(prx: prx, facet: facet, context: context) as " << prxI << "?"; + out << eb; + + // + // uncheckedCast + // + out << sp; + out << nl << "/// Downcasts the given proxy to this type without contacting the remote server."; + out << nl << "///"; + out << nl << "/// - parameter prx: `Ice.ObjectPrx` The proxy to be cast."; + out << nl << "///"; + out << nl << "/// - parameter type: `" << prx << ".Protocol` - The proxy type to cast to."; + out << nl << "///"; + out << nl << "/// - parameter facet: `String` - The optional name of the desired facet"; + out << nl << "///"; + out << nl << "/// - returns: `" << prx << "` - A proxy with the requested type"; + out << nl << "public func uncheckedCast" << spar + << ("prx: " + getUnqualified("Ice.ObjectPrx", swiftModule)) + << ("type: " + prx + ".Protocol") + << ("facet: Swift.String? = nil") << epar << " -> " << prx; + out << sb; + out << nl << "return " << prxI << ".uncheckedCast(prx: prx, facet: facet) as " << prxI; + out << eb; + + // + // ice_staticId + // + out << sp; + out << nl << "/// Returns the Slice type id of the interface or class associated with this proxy type."; + out << nl << "///"; + out << nl << "/// parameter type: `" << prx << ".Protocol` - The proxy type to retrieve the type id."; + out << nl << "///"; + out << nl << "/// returns: `String` - The type id of the interface or class associated with this proxy type."; + out << nl << "public func ice_staticId" << spar << ("_ type: " + prx + ".Protocol") << epar << " -> Swift.String"; + out << sb; + out << nl << "return " << traits << ".staticId"; + out << eb; + + // + // InputStream extension + // + out << sp; + out << nl << "/// Extension to `Ice.InputStream` class to support reading proxy of type"; + out << nl << "/// `" << prx << "`."; + out << nl << "public extension " << getUnqualified("Ice.InputStream", swiftModule); + out << sb; + + out << nl << "/// Extracts a proxy from the stream. The stream must have been initialized with a communicator."; + out << nl << "///"; + out << nl << "/// - parameter type: `" << prx << ".Protocol` - The type of the proxy to be extracted."; + out << nl << "///"; + out << nl << "/// - returns: `" << prx << "?` - The extracted proxy"; + out << nl << "func read(_ type: " << prx << ".Protocol) throws -> " << prx << "?"; + out << sb; + out << nl << "return try read() as " << prxI << "?"; + out << eb; + + out << nl << "/// Extracts a proxy from the stream. The stream must have been initialized with a communicator."; + out << nl << "///"; + out << nl << "/// - parameter tag: `Int32` - The numeric tag associated with the value."; + out << nl << "///"; + out << nl << "/// - parameter type: `" << prx << ".Protocol` - The type of the proxy to be extracted."; + out << nl << "///"; + out << nl << "/// - returns: `" << prx << "` - The extracted proxy."; + out << nl << "func read(tag: Swift.Int32, type: " << prx << ".Protocol) throws -> " << prx << "?"; + out << sb; + out << nl << "return try read(tag: tag) as " << prxI << "?"; + out << eb; + + out << eb; + + out << sp; + writeProxyDocSummary(out, p, swiftModule); + out << nl << "public extension " << prx; + out << sb; + + return true; +} + +void +Gen::ProxyVisitor::visitClassDefEnd(const ClassDefPtr&) +{ + out << eb; +} + +void +Gen::ProxyVisitor::visitOperation(const OperationPtr& op) +{ + writeProxyOperation(out, op); + writeProxyAsyncOperation(out, op); +} + +Gen::ValueVisitor::ValueVisitor(::IceUtilInternal::Output& o) : out(o) +{ +} + +bool +Gen::ValueVisitor::visitClassDefStart(const ClassDefPtr& p) +{ + if(p->isLocal() || p->isInterface()) + { + return false; + } + + const string prefix = getClassResolverPrefix(p->unit()); + const string swiftModule = getSwiftModule(getTopLevelModule(ContainedPtr::dynamicCast(p))); + const string name = getUnqualified(getAbsolute(p), swiftModule); + const string traits = name + "Traits"; + + ClassList bases = p->bases(); + ClassDefPtr base; + if(!bases.empty() && !bases.front()->isInterface()) + { + base = bases.front(); + } + + out << sp; + out << nl << "/// :nodoc:"; + out << nl << "public class " << name << "_TypeResolver: " << getUnqualified("Ice.ValueTypeResolver", swiftModule); + out << sb; + out << nl << "public override func type() -> " << getUnqualified("Ice.Value.Type", swiftModule); + out << sb; + out << nl << "return " << fixIdent(name) << ".self"; + out << eb; + out << eb; + + if(p->compactId() >= 0) + { + // + // For each Value class using a compact id we generate an extension + // method in TypeIdResolver. + // + out << sp; + out << nl << "public extension " << getUnqualified("Ice.TypeIdResolver", swiftModule); + out << sb; + out << nl << "@objc static func TypeId_" << p->compactId() << "() -> Swift.String"; + out << sb; + out << nl << "return \"" << p->scoped() << "\""; + out << eb; + out << eb; + } + + // + // For each Value class we generate an extension method in ClassResolver + // + ostringstream factory; + factory << prefix; + StringList parts = splitScopedName(p->scoped()); + for(StringList::const_iterator it = parts.begin(); it != parts.end();) + { + factory << (*it); + if(++it != parts.end()) + { + factory << "_"; + } + } + + out << sp; + out << nl << "public extension " << getUnqualified("Ice.ClassResolver", swiftModule); + out << sb; + out << nl << "@objc static func " << factory.str() << "() -> " + << getUnqualified("Ice.ValueTypeResolver", swiftModule); + out << sb; + out << nl << "return " << name << "_TypeResolver()"; + out << eb; + out << eb; + + out << sp; + writeDocSummary(out, p); + writeSwiftAttributes(out, p->getMetaData()); + out << nl << "open class " << fixIdent(name) << ": "; + if(base) + { + out << fixIdent(getUnqualified(getAbsolute(base), swiftModule)); + } + else + { + out << getUnqualified("Ice.Value", swiftModule); + } + out << sb; + + const DataMemberList members = p->dataMembers(); + const DataMemberList baseMembers = base ? base->allDataMembers() : DataMemberList(); + const DataMemberList allMembers = p->allDataMembers(); + const DataMemberList optionalMembers = p->orderedOptionalDataMembers(); + + const bool basePreserved = p->inheritsMetaData("preserve-slice"); + const bool preserved = p->hasMetaData("preserve-slice"); + + writeMembers(out, members, p); + if(!p->isLocal() && preserved && !basePreserved) + { + out << nl << "var _slicedData: " << getUnqualified("Ice.SlicedData?", swiftModule); + } + + if(!base || !members.empty()) + { + writeDefaultInitializer(out, true, !base); + } + writeMemberwiseInitializer(out, members, baseMembers, allMembers, p, p->isLocal(), !base); + + out << sp; + out << nl << "/// Returns the Slice type ID of the most-derived interface supported by this object."; + out << nl << "///"; + out << nl << "/// - returns: `String` - The Slice type ID of the most-derived interface supported by this object"; + out << nl << "open override func ice_id() -> Swift.String" << sb; + out << nl << "return " << traits << ".staticId"; + out << eb; + + out << sp; + out << nl << "/// Returns the Slice type ID of the interface supported by this object."; + out << nl << "///"; + out << nl << "/// - returns: `String` - The Slice type ID of the interface supported by this object."; + out << nl << "open override class func ice_staticId() -> Swift.String" << sb; + out << nl << "return " << traits << ".staticId"; + out << eb; + + out << sp; + out << nl << "open override func _iceReadImpl(from istr: " + << getUnqualified("Ice.InputStream", swiftModule) << ") throws"; + out << sb; + out << nl << "_ = try istr.startSlice()"; + for(DataMemberList::const_iterator i = members.begin(); i != members.end(); ++i) + { + DataMemberPtr member = *i; + if(!member->optional()) + { + writeMarshalUnmarshalCode(out, member->type(), p, "self." + fixIdent(member->name()), false); + } + } + for(DataMemberList::const_iterator d = optionalMembers.begin(); d != optionalMembers.end(); ++d) + { + writeMarshalUnmarshalCode(out, (*d)->type(), p, "self." + fixIdent((*d)->name()), false, (*d)->tag()); + } + out << nl << "try istr.endSlice()"; + if(base) + { + out << nl << "try super._iceReadImpl(from: istr);"; + } + out << eb; + + out << sp; + out << nl << "open override func _iceWriteImpl(to ostr: " + << getUnqualified("Ice.OutputStream", swiftModule) << ")"; + out << sb; + out << nl << "ostr.startSlice(typeId: " << name << "Traits.staticId, compactId: " << p->compactId() + << ", last: " << (!base ? "true" : "false") << ")"; + for(DataMemberList::const_iterator i = members.begin(); i != members.end(); ++i) + { + DataMemberPtr member = *i; + TypePtr type = member->type(); + if(!member->optional()) + { + writeMarshalUnmarshalCode(out, member->type(), p, "self." + fixIdent(member->name()), true); + } + } + for(DataMemberList::const_iterator d = optionalMembers.begin(); d != optionalMembers.end(); ++d) + { + writeMarshalUnmarshalCode(out, (*d)->type(), p, "self." + fixIdent((*d)->name()), true, (*d)->tag()); + } + out << nl << "ostr.endSlice()"; + if(base) + { + out << nl << "super._iceWriteImpl(to: ostr);"; + } + out << eb; + + if(preserved && !basePreserved) + { + out << sp; + out << nl << "/// Returns the sliced data if the value has a preserved-slice base class and has been sliced"; + out << nl << "/// during un-marshaling of the value, nil is returned otherwise."; + out << nl << "///"; + out << nl << "/// returns: `Ice.SlicedData?` - The sliced data or nil"; + out << nl << "open override func ice_getSlicedData() -> " << getUnqualified("Ice.SlicedData?", swiftModule) + << sb; + out << nl << "return _slicedData"; + out << eb; + + out << sp; + out << nl << "open override func _iceRead(from istr: " << getUnqualified("Ice.InputStream", swiftModule) + << ") throws" << sb; + out << nl << "istr.startValue()"; + out << nl << "try _iceReadImpl(from: istr)"; + out << nl << "_slicedData = try istr.endValue(preserve: true)"; + out << eb; + + out << sp; + out << nl << "open override func _iceWrite(to ostr: " << getUnqualified("Ice.OutputStream", swiftModule) + << ")" << sb; + out << nl << "ostr.startValue(data: _slicedData)"; + out << nl << "_iceWriteImpl(to: ostr)"; + out << nl << "ostr.endValue()"; + out << eb; + } + + return true; +} + +void +Gen::ValueVisitor::visitClassDefEnd(const ClassDefPtr&) +{ + out << eb; +} + +void +Gen::ValueVisitor::visitOperation(const OperationPtr&) +{ +} + +Gen::ObjectVisitor::ObjectVisitor(::IceUtilInternal::Output& o) : out(o) +{ +} + +bool +Gen::ObjectVisitor::visitModuleStart(const ModulePtr&) +{ + return true; +} + +void +Gen::ObjectVisitor::visitModuleEnd(const ModulePtr&) +{ +} + +bool +Gen::ObjectVisitor::visitClassDefStart(const ClassDefPtr& p) +{ + if(p->isLocal() || (!p->isInterface() && p->allOperations().empty())) + { + return false; + } + + const string swiftModule = getSwiftModule(getTopLevelModule(ContainedPtr::dynamicCast(p))); + const string disp = fixIdent(getUnqualified(getAbsolute(p), swiftModule) + "Disp"); + const string traits = fixIdent(getUnqualified(getAbsolute(p), swiftModule) + "Traits"); + const string servant = fixIdent(getUnqualified(getAbsolute(p), swiftModule) + + (p->isInterface() ? "" : "Operations")); + + // + // Disp struct + // + out << sp; + out << sp; + out << nl << "/// Dispatcher for `" << servant << "` servants."; + out << nl << "public struct " << disp << ": " << getUnqualified("Ice.Disp", swiftModule); + out << sb; + out << nl << "public let servant: " << servant; + + out << nl << "private static let defaultObject = " << getUnqualified("Ice.ObjectI", swiftModule) + << "<" << traits << ">()"; + + out << sp; + out << nl << "public init(_ servant: " << servant << ")"; + out << sb; + out << nl << "self.servant = servant"; + out << eb; + + const OperationList allOps = p->allOperations(); + + StringList allOpNames; + transform(allOps.begin(), allOps.end(), back_inserter(allOpNames), ::IceUtil::constMemFun(&Contained::name)); + + allOpNames.push_back("ice_id"); + allOpNames.push_back("ice_ids"); + allOpNames.push_back("ice_isA"); + allOpNames.push_back("ice_ping"); + allOpNames.sort(); + allOpNames.unique(); + + out << sp; + out << nl; + out << "public func dispatch"; + out << spar; + out << ("request: " + getUnqualified("Ice.Request", swiftModule)); + out << ("current: " + getUnqualified("Ice.Current", swiftModule)); + out << epar; + out << " throws"; + + out << sb; + out << nl << "switch current.operation"; + out << sb; + out.dec(); // to align case with switch + for(StringList::const_iterator q = allOpNames.begin(); q != allOpNames.end(); ++q) + { + const string opName = *q; + out << nl << "case \"" << opName << "\":"; + out.inc(); + if(opName == "ice_id" || opName == "ice_ids" || opName == "ice_isA" || opName == "ice_ping") + { + out << nl << "try (servant as? Object ?? " << disp << ".defaultObject)._iceD_" + << opName << "(incoming: request, current: current)"; + } + else + { + out << nl << "try servant._iceD_" << opName << "(incoming: request, current: current)"; + } + out.dec(); + } + out << nl << "default:"; + out.inc(); + out << nl << "throw " << getUnqualified("Ice.OperationNotExistException", swiftModule) + << "(id: current.id, facet: current.facet, operation: current.operation)"; + // missing dec to compensate for the extra dec after switch sb + out << eb; + out << eb; + out << eb; + + // + // Protocol + // + ClassList bases = p->bases(); + bool hasBase = false; + while(!bases.empty() && !hasBase) + { + ClassDefPtr baseClass = bases.front(); + if(!baseClass->isInterface() && baseClass->allOperations().empty()) + { + // does not count + bases.pop_front(); + } + else + { + hasBase = true; + } + } + + StringList baseNames; + for(ClassList::const_iterator i = bases.begin(); i != bases.end(); ++i) + { + baseNames.push_back(fixIdent(getUnqualified(getAbsolute(*i), swiftModule) + + ((*i)->isInterface() ? "" : "Operations"))); + } + + // + // Check for swift:inherits metadata. + // + const StringList metaData = p->getMetaData(); + static const string prefix = "swift:inherits:"; + for(StringList::const_iterator q = metaData.begin(); q != metaData.end(); ++q) + { + if(q->find(prefix) == 0) + { + baseNames.push_back(q->substr(prefix.size())); + } + } + + out << sp; + writeDocSummary(out, p); + out << nl << "public protocol " << servant; + if(!baseNames.empty()) + { + out << ":"; + } + + for(StringList::const_iterator i = baseNames.begin(); i != baseNames.end();) + { + out << " " << (*i); + if(++i != baseNames.end()) + { + out << ","; + } + } + + out << sb; + + return true; +} + +void +Gen::ObjectVisitor::visitClassDefEnd(const ClassDefPtr&) +{ + out << eb; +} + +void +Gen::ObjectVisitor::visitOperation(const OperationPtr& op) +{ + const bool isAmd = operationIsAmd(op); + const string swiftModule = getSwiftModule(getTopLevelModule(ContainedPtr::dynamicCast(op))); + const string opName = fixIdent(op->name() + (isAmd ? "Async" : "")); + const ParamInfoList allInParams = getAllInParams(op); + const ParamInfoList allOutParams = getAllOutParams(op); + const ExceptionList allExceptions = op->throws(); + + out << sp; + writeOpDocSummary(out, op, isAmd, true); + out << nl << "func " << opName; + out << spar; + for(ParamInfoList::const_iterator q = allInParams.begin(); q != allInParams.end(); ++q) + { + ostringstream s; + s << q->name << ": " << q->typeStr; + out << s.str(); + } + out << ("current: " + getUnqualified("Ice.Current", swiftModule)); + out << epar; + + if(isAmd) + { + out << " -> PromiseKit.Promise<" << (allOutParams.size() > 0 ? operationReturnType(op) : "Swift.Void") << ">"; + } + else + { + out << " throws"; + if(allOutParams.size() > 0) + { + out << " -> " << operationReturnType(op); + } + } +} + +Gen::ObjectExtVisitor::ObjectExtVisitor(::IceUtilInternal::Output& o) : out(o) +{ +} + +bool +Gen::ObjectExtVisitor::visitModuleStart(const ModulePtr&) +{ + return true; +} + +void +Gen::ObjectExtVisitor::visitModuleEnd(const ModulePtr&) +{ +} + +bool +Gen::ObjectExtVisitor::visitClassDefStart(const ClassDefPtr& p) +{ + if(p->isLocal() || (!p->isInterface() && p->allOperations().empty())) + { + return false; + } + + const string swiftModule = getSwiftModule(getTopLevelModule(ContainedPtr::dynamicCast(p))); + const string name = getUnqualified(getAbsolute(p), swiftModule) + (p->isInterface() ? "" : "Operations"); + + ClassList allBases = p->allBases(); + + out << sp; + writeServantDocSummary(out, p, swiftModule); + out << nl << "public extension " << fixIdent(name); + + out << sb; + return true; +} + +void +Gen::ObjectExtVisitor::visitClassDefEnd(const ClassDefPtr&) +{ + out << eb; +} + +void +Gen::ObjectExtVisitor::visitOperation(const OperationPtr& op) +{ + if(operationIsAmd(op)) + { + writeDispatchAsyncOperation(out, op); + } + else + { + writeDispatchOperation(out, op); + } +} + +Gen::LocalObjectVisitor::LocalObjectVisitor(::IceUtilInternal::Output& o) : out(o) +{ +} + +bool +Gen::LocalObjectVisitor::visitModuleStart(const ModulePtr&) +{ + return true; +} + +void +Gen::LocalObjectVisitor::visitModuleEnd(const ModulePtr&) +{ +} + +bool +Gen::LocalObjectVisitor::visitClassDefStart(const ClassDefPtr& p) +{ + if(!p->isLocal()) + { + return false; + } + + const string swiftModule = getSwiftModule(getTopLevelModule(ContainedPtr::dynamicCast(p))); + const string name = getUnqualified(getAbsolute(p), swiftModule); + + if(p->isDelegate()) + { + OperationPtr op = p->allOperations().front(); + const ParamDeclList params = op->parameters(); + + out << sp; + writeDocSummary(out, p); + out << nl << "///"; + writeOpDocSummary(out, op, false, false, true); + out << nl << "public typealias " << name << " = "; + out << spar; + for(ParamDeclList::const_iterator i = params.begin(); i != params.end(); ++i) + { + ParamDeclPtr param = *i; + if(!param->isOutParam()) + { + TypePtr type = param->type(); + ostringstream s; + s << typeToString(type, p, param->getMetaData(), param->optional(), TypeContextLocal); + out << s.str(); + } + } + out << epar; + if(!op->hasMetaData("swift:noexcept")) + { + out << " throws"; + } + out << " -> "; + + TypePtr ret = op->returnType(); + ParamDeclList outParams = op->outParameters(); + + if(ret || !outParams.empty()) + { + if(outParams.empty()) + { + out << typeToString(ret, op, op->getMetaData(), op->returnIsOptional(), TypeContextLocal); + } + else if(!ret && outParams.size() == 1) + { + ParamDeclPtr param = outParams.front(); + out << typeToString(param->type(), op, param->getMetaData(), param->optional(), TypeContextLocal); + } + else + { + string returnValueS = "returnValue"; + for(ParamDeclList::const_iterator i = outParams.begin(); i != outParams.end(); ++i) + { + ParamDeclPtr param = *i; + if(param->name() == "returnValue") + { + returnValueS = "_returnValue"; + break; + } + } + + out << spar; + out << (returnValueS + ": " + typeToString(ret, op, op->getMetaData(), op->returnIsOptional(), + TypeContextLocal)); + for(ParamDeclList::const_iterator i = outParams.begin(); i != outParams.end(); ++i) + { + ParamDeclPtr param = *i; + out << (fixIdent(param->name()) + ": " + + typeToString(param->type(), op, op->getMetaData(), param->optional(), TypeContextLocal)); + } + out << epar; + } + } + else + { + out << "Swift.Void"; + } + return false; + } + + ClassList bases = p->bases(); + StringList baseNames; + if(bases.empty()) + { + baseNames.push_back(" Swift.AnyObject"); + } + else + { + for(ClassList::const_iterator i = bases.begin(); i != bases.end(); ++i) + { + baseNames.push_back(getUnqualified(getAbsolute(*i), swiftModule)); + } + } + + // + // Check for swift:inherits metadata. + // + const StringList metaData = p->getMetaData(); + static const string prefix = "swift:inherits:"; + for(StringList::const_iterator q = metaData.begin(); q != metaData.end(); ++q) + { + if(q->find(prefix) == 0) + { + baseNames.push_back(q->substr(prefix.size())); + } + } + + // + // Local interfaces and local classes map to Swift protocol + // + out << sp; + writeDocSummary(out, p); + out << nl << "public protocol " << fixIdent(name) << ":"; + + for(StringList::const_iterator i = baseNames.begin(); i != baseNames.end();) + { + out << " " << (*i); + if(++i != baseNames.end()) + { + out << ","; + } + } + + out << sb; + writeMembers(out, p->dataMembers(), p, TypeContextProtocol | TypeContextLocal); + return true; +} + +void +Gen::LocalObjectVisitor::visitClassDefEnd(const ClassDefPtr&) +{ + out << eb; +} + +void +Gen::LocalObjectVisitor::visitOperation(const OperationPtr& p) +{ + const string name = fixIdent(p->name()); + ParamDeclList params = p->parameters(); + ParamDeclList inParams = p->inParameters(); + + int typeCtx = TypeContextInParam | TypeContextLocal; + + out << sp; + writeOpDocSummary(out, p, false, false, true); + writeSwiftAttributes(out, p->getMetaData()); + out << nl << "func " << name; + out << spar; + for(ParamDeclList::const_iterator i = inParams.begin(); i != inParams.end(); ++i) + { + ParamDeclPtr param = *i; + TypePtr type = param->type(); + ostringstream s; + if(inParams.size() == 1) + { + s << "_ "; + } + s << param->name() << ": " + << typeToString(type, p, param->getMetaData(), param->optional(), typeCtx); + out << s.str(); + } + out << epar; + + if(!p->hasMetaData("swift:noexcept")) + { + out << " throws"; + } + + TypePtr ret = p->returnType(); + ParamDeclList outParams = p->outParameters(); + + if(ret || !outParams.empty()) + { + out << " -> "; + if(outParams.empty()) + { + out << typeToString(ret, p, p->getMetaData(), p->returnIsOptional(), typeCtx); + } + else if(!ret && outParams.size() == 1) + { + ParamDeclPtr param = outParams.front(); + out << typeToString(param->type(), p, param->getMetaData(), param->optional(), typeCtx); + } + else + { + string returnValueS = "returnValue"; + for(ParamDeclList::const_iterator i = outParams.begin(); i != outParams.end(); ++i) + { + ParamDeclPtr param = *i; + if(param->name() == "returnValue") + { + returnValueS = "_returnValue"; + break; + } + } + + out << spar; + out << (returnValueS + ": " + typeToString(ret, p, p->getMetaData(), p->returnIsOptional(), typeCtx)); + for(ParamDeclList::const_iterator i = outParams.begin(); i != outParams.end(); ++i) + { + ParamDeclPtr param = *i; + out << (fixIdent(param->name()) + ": " + + typeToString(param->type(), p, p->getMetaData(), param->optional(), typeCtx)); + } + out << epar; + } + } + + if(p->hasMetaData("async-oneway")) + { + out << sp; + writeOpDocSummary(out, p, true, false, true); + out << nl << "func " << name << "Async"; + out << spar; + for(ParamDeclList::const_iterator i = inParams.begin(); i != inParams.end(); ++i) + { + ParamDeclPtr param = *i; + TypePtr type = param->type(); + ostringstream s; + if(inParams.size() == 1) + { + s << "_ "; + } + s << fixIdent(param->name()) << ": " + << typeToString(type, p, param->getMetaData(), param->optional(), typeCtx); + out << s.str(); + } + out << "sentOn: Dispatch.DispatchQueue?"; + out << "sentFlags: Dispatch.DispatchWorkItemFlags?"; + out << "sent: ((Swift.Bool) -> Swift.Void)?"; + out << epar; + + out << " -> "; + + assert(!ret && outParams.empty()); + out << "PromiseKit.Promise<Swift.Void>"; + } +} diff --git a/cpp/src/slice2swift/Gen.h b/cpp/src/slice2swift/Gen.h new file mode 100644 index 00000000000..14c246946fd --- /dev/null +++ b/cpp/src/slice2swift/Gen.h @@ -0,0 +1,167 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#ifndef GEN_H +#define GEN_H + +#include <SwiftUtil.h> + +using namespace std; +using namespace Slice; + +namespace Slice +{ + +class Gen +{ +public: + + Gen(const std::string&, + const std::vector<std::string>&, + const std::string&); + ~Gen(); + + void generate(const UnitPtr&); + void closeOutput(); + void printHeader(); + +private: + + IceUtilInternal::Output _out; + + std::vector<std::string> _includePaths; + std::string _fileBase; + + class ImportVisitor : public SwiftGenerator, public ParserVisitor + { + public: + + ImportVisitor(IceUtilInternal::Output&); + + virtual bool visitModuleStart(const ModulePtr&); + virtual bool visitClassDefStart(const ClassDefPtr&); + virtual bool visitStructStart(const StructPtr&); + virtual bool visitExceptionStart(const ExceptionPtr&); + virtual void visitSequence(const SequencePtr&); + virtual void visitDictionary(const DictionaryPtr&); + + void writeImports(); + + private: + + void addImport(const TypePtr&, const ContainedPtr&); + void addImport(const ContainedPtr&, const ContainedPtr&); + void addImport(const std::string&); + + IceUtilInternal::Output& out; + std::vector< std::string> _imports; + }; + + class TypesVisitor : public SwiftGenerator, public ParserVisitor + { + + public: + + TypesVisitor(IceUtilInternal::Output&); + + virtual bool visitClassDefStart(const ClassDefPtr&); + virtual bool visitExceptionStart(const ExceptionPtr&); + virtual bool visitStructStart(const StructPtr&); + virtual void visitSequence(const SequencePtr&); + virtual void visitDictionary(const DictionaryPtr&); + virtual void visitEnum(const EnumPtr&); + virtual void visitConst(const ConstPtr&); + + private: + + IceUtilInternal::Output& out; + }; + + class ProxyVisitor : public SwiftGenerator, public ParserVisitor + { + public: + + ProxyVisitor(::IceUtilInternal::Output&); + + virtual bool visitModuleStart(const ModulePtr&); + virtual void visitModuleEnd(const ModulePtr&); + virtual bool visitClassDefStart(const ClassDefPtr&); + virtual void visitClassDefEnd(const ClassDefPtr&); + virtual void visitOperation(const OperationPtr&); + + private: + + IceUtilInternal::Output& out; + }; + + class ValueVisitor : public SwiftGenerator, public ParserVisitor + { + public: + + ValueVisitor(::IceUtilInternal::Output&); + + virtual bool visitClassDefStart(const ClassDefPtr&); + virtual void visitClassDefEnd(const ClassDefPtr&); + virtual void visitOperation(const OperationPtr&); + + private: + + IceUtilInternal::Output& out; + }; + + class ObjectVisitor : public SwiftGenerator, public ParserVisitor + { + public: + + ObjectVisitor(::IceUtilInternal::Output&); + + virtual bool visitModuleStart(const ModulePtr&); + virtual void visitModuleEnd(const ModulePtr&); + virtual bool visitClassDefStart(const ClassDefPtr&); + virtual void visitClassDefEnd(const ClassDefPtr&); + virtual void visitOperation(const OperationPtr&); + + private: + + IceUtilInternal::Output& out; + }; + + class ObjectExtVisitor : public SwiftGenerator, public ParserVisitor + { + public: + + ObjectExtVisitor(::IceUtilInternal::Output&); + + virtual bool visitModuleStart(const ModulePtr&); + virtual void visitModuleEnd(const ModulePtr&); + virtual bool visitClassDefStart(const ClassDefPtr&); + virtual void visitClassDefEnd(const ClassDefPtr&); + virtual void visitOperation(const OperationPtr&); + + private: + + IceUtilInternal::Output& out; + }; + + class LocalObjectVisitor : public SwiftGenerator, public ParserVisitor + { + public: + + LocalObjectVisitor(::IceUtilInternal::Output&); + + virtual bool visitModuleStart(const ModulePtr&); + virtual void visitModuleEnd(const ModulePtr&); + virtual bool visitClassDefStart(const ClassDefPtr&); + virtual void visitClassDefEnd(const ClassDefPtr&); + virtual void visitOperation(const OperationPtr&); + + private: + + IceUtilInternal::Output& out; + }; +}; + +} + +#endif diff --git a/cpp/src/slice2swift/Main.cpp b/cpp/src/slice2swift/Main.cpp new file mode 100644 index 00000000000..ae435a1cdf0 --- /dev/null +++ b/cpp/src/slice2swift/Main.cpp @@ -0,0 +1,355 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#include <IceUtil/ConsoleUtil.h> +#include <IceUtil/CtrlCHandler.h> +#include <IceUtil/Options.h> +#include <IceUtil/Mutex.h> +#include <IceUtil/MutexPtrLock.h> +#include <Slice/Preprocessor.h> +#include <Slice/FileTracker.h> +#include <Slice/Parser.h> +#include <Slice/Util.h> +#include "Gen.h" + +#include <cstring> +#include <climits> + +using namespace std; +using namespace Slice; +using namespace IceUtilInternal; + +namespace +{ + +IceUtil::Mutex* globalMutex = 0; +bool interrupted = false; + +class Init +{ +public: + + Init() + { + globalMutex = new IceUtil::Mutex; + } + + ~Init() + { + delete globalMutex; + globalMutex = 0; + } +}; + +Init init; + +} + +static void +interruptedCallback(int /*signal*/) +{ + IceUtilInternal::MutexPtrLock<IceUtil::Mutex> sync(globalMutex); + + interrupted = true; +} + +static void +usage(const string& n) +{ + consoleErr << "Usage: " << n << " [options] slice-files...\n"; + consoleErr << + "Options:\n" + "-h, --help Show this message.\n" + "-v, --version Display the Ice version.\n" + "-DNAME Define NAME as 1.\n" + "-DNAME=DEF Define NAME as DEF.\n" + "-UNAME Remove any definition for NAME.\n" + "-IDIR Put DIR in the include file search path.\n" + "-E Print preprocessor output on stdout.\n" + "--output-dir DIR Create files in the directory DIR.\n" + "-d, --debug Print debug messages.\n" + "--depend Generate Makefile dependencies.\n" + "--depend-xml Generate dependencies in XML format.\n" + "--depend-file FILE Write dependencies to FILE instead of standard output.\n" + "--validate Validate command line options.\n" + ; +} + +int +compile(const vector<string>& argv) +{ + IceUtilInternal::Options opts; + opts.addOpt("h", "help"); + opts.addOpt("v", "version"); + opts.addOpt("", "validate"); + opts.addOpt("D", "", IceUtilInternal::Options::NeedArg, "", IceUtilInternal::Options::Repeat); + opts.addOpt("U", "", IceUtilInternal::Options::NeedArg, "", IceUtilInternal::Options::Repeat); + opts.addOpt("I", "", IceUtilInternal::Options::NeedArg, "", IceUtilInternal::Options::Repeat); + opts.addOpt("E"); + opts.addOpt("", "output-dir", IceUtilInternal::Options::NeedArg); + opts.addOpt("", "depend"); + opts.addOpt("", "depend-xml"); + opts.addOpt("", "depend-file", IceUtilInternal::Options::NeedArg, ""); + opts.addOpt("d", "debug"); + + bool validate = find(argv.begin(), argv.end(), "--validate") != argv.end(); + + vector<string> args; + try + { + args = opts.parse(argv); + } + catch(const IceUtilInternal::BadOptException& e) + { + consoleErr << argv[0] << ": error: " << e.reason << endl; + if(!validate) + { + usage(argv[0]); + } + return EXIT_FAILURE; + } + + if(opts.isSet("help")) + { + usage(argv[0]); + return EXIT_SUCCESS; + } + + if(opts.isSet("version")) + { + consoleErr << ICE_STRING_VERSION << endl; + return EXIT_SUCCESS; + } + + vector<string> cppArgs; + vector<string> optargs = opts.argVec("D"); + for(vector<string>::const_iterator i = optargs.begin(); i != optargs.end(); ++i) + { + cppArgs.push_back("-D" + *i); + } + + optargs = opts.argVec("U"); + for(vector<string>::const_iterator i = optargs.begin(); i != optargs.end(); ++i) + { + cppArgs.push_back("-U" + *i); + } + + vector<string> includePaths = opts.argVec("I"); + for(vector<string>::const_iterator i = includePaths.begin(); i != includePaths.end(); ++i) + { + cppArgs.push_back("-I" + Preprocessor::normalizeIncludePath(*i)); + } + + bool preprocess = opts.isSet("E"); + + string output = opts.optArg("output-dir"); + + bool depend = opts.isSet("depend"); + + bool dependxml = opts.isSet("depend-xml"); + + string dependFile = opts.optArg("depend-file"); + + bool debug = opts.isSet("debug"); + + if(args.empty()) + { + consoleErr << argv[0] << ": error: no input file" << endl; + if(!validate) + { + usage(argv[0]); + } + return EXIT_FAILURE; + } + + if(depend && dependxml) + { + consoleErr << argv[0] << ": error: cannot specify both --depend and --depend-xml" << endl; + if(!validate) + { + usage(argv[0]); + } + return EXIT_FAILURE; + } + + if(validate) + { + return EXIT_SUCCESS; + } + + int status = EXIT_SUCCESS; + + IceUtil::CtrlCHandler ctrlCHandler; + ctrlCHandler.setCallback(interruptedCallback); + + ostringstream os; + if(dependxml) + { + os << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<dependencies>" << endl; + } + + for(vector<string>::const_iterator i = args.begin(); i != args.end(); ++i) + { + // + // Ignore duplicates. + // + if(find(args.begin(), args.end(), *i) != i) + { + continue; + } + + if(depend || dependxml) + { + PreprocessorPtr icecpp = Preprocessor::create(argv[0], *i, cppArgs); + FILE* cppHandle = icecpp->preprocess(false, "-D__SLICE2SWIFT__"); + + if(cppHandle == 0) + { + return EXIT_FAILURE; + } + + UnitPtr u = Unit::createUnit(false, false, false, false); + int parseStatus = u->parse(*i, cppHandle, debug); + u->destroy(); + + if(parseStatus == EXIT_FAILURE) + { + return EXIT_FAILURE; + } + + if(!icecpp->printMakefileDependencies(os, depend ? Preprocessor::PHP : Preprocessor::SliceXML, + includePaths, "-D__SLICE2SWIFT__")) + { + return EXIT_FAILURE; + } + + if(!icecpp->close()) + { + return EXIT_FAILURE; + } + } + else + { + PreprocessorPtr icecpp = Preprocessor::create(argv[0], *i, cppArgs); + FILE* cppHandle = icecpp->preprocess(true, "-D__SLICE2SWIFT__"); + + if(cppHandle == 0) + { + return EXIT_FAILURE; + } + + if(preprocess) + { + char buf[4096]; + while(fgets(buf, static_cast<int>(sizeof(buf)), cppHandle) != ICE_NULLPTR) + { + if(fputs(buf, stdout) == EOF) + { + return EXIT_FAILURE; + } + } + if(!icecpp->close()) + { + return EXIT_FAILURE; + } + } + else + { + UnitPtr u = Unit::createUnit(false, false, false, false); + int parseStatus = u->parse(*i, cppHandle, debug); + + if(!icecpp->close()) + { + u->destroy(); + return EXIT_FAILURE; + } + + if(parseStatus == EXIT_FAILURE) + { + status = EXIT_FAILURE; + } + else + { + string base = icecpp->getBaseName(); + string::size_type pos = base.find_last_of("/\\"); + if(pos != string::npos) + { + base.erase(0, pos + 1); + } + + try + { + Gen gen(icecpp->getBaseName(), includePaths, output); + gen.generate(u); + } + catch(const Slice::FileException& ex) + { + // + // If a file could not be created, then cleanup any created files. + // + FileTracker::instance()->cleanup(); + u->destroy(); + consoleErr << argv[0] << ": error: " << ex.reason() << endl; + status = EXIT_FAILURE; + break; + } + catch(const Slice::CompilerException&) + { + FileTracker::instance()->cleanup(); + u->destroy(); + status = EXIT_FAILURE; + break; + } + } + + u->destroy(); + } + } + + { + IceUtilInternal::MutexPtrLock<IceUtil::Mutex> sync(globalMutex); + + if(interrupted) + { + FileTracker::instance()->cleanup(); + return EXIT_FAILURE; + } + } + } + + if(dependxml) + { + os << "</dependencies>\n"; + } + + if(depend || dependxml) + { + writeDependencies(os.str(), dependFile); + } + + return status; +} + +#ifdef _WIN32 +int wmain(int argc, wchar_t* argv[]) +#else +int main(int argc, char* argv[]) +#endif +{ + vector<string> args = Slice::argvToArgs(argc, argv); + try + { + return compile(args); + } + catch(const std::exception& ex) + { + consoleErr << args[0] << ": error:" << ex.what() << endl; + return EXIT_FAILURE; + } + catch(...) + { + consoleErr << args[0] << ": error:" << "unknown exception" << endl; + return EXIT_FAILURE; + } +} diff --git a/cpp/src/slice2swift/SwiftUtil.cpp b/cpp/src/slice2swift/SwiftUtil.cpp new file mode 100644 index 00000000000..80e9d6469c2 --- /dev/null +++ b/cpp/src/slice2swift/SwiftUtil.cpp @@ -0,0 +1,2815 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// +// + +#include <IceUtil/OutputUtil.h> +#include <IceUtil/StringUtil.h> + +#include <Slice/Util.h> + +#include <SwiftUtil.h> + +using namespace std; +using namespace Slice; +using namespace IceUtilInternal; + +namespace +{ + +static string +lookupKwd(const string& name) +{ + // + // Keyword list. *Must* be kept in alphabetical order. + // + static const string keywordList[] = + { + "Any", "as", "associatedtype", "associativity", "break", + "case", "catch", "class", "continue", "convenience", "default", "defer", "deinit", + "didSet", "do", "dynamic", "else", "enum", "extension", "fallthrough", "false", + "fileprivate", "final", "for", "func", "get", "guard", "if", "import", "in", "indirect", + "infix", "init", "inout", "internal", "is", "lazy", "left", "let", "mutating", "nil", + "none", "nonmutating", "open", "operator", "optional", "override", "postfix", "precedence", + "prefix", "private", "protocol", "public", "repeat", "required", "rethrows", "return", + "right", "self", "set", "static", "struct", "subscript", "super", "switch", "throw", "throws", + "true", "try", "Type", "typealias", "unowned", "var", "weak", "where", "while", "willSet" + }; + bool found = binary_search(&keywordList[0], + &keywordList[sizeof(keywordList) / sizeof(*keywordList)], + name, + Slice::CICompare()); + if(found) + { + return "`" + name + "`"; + } + + return name; +} + +string +replace(string s, string patt, string val) +{ + string r = s; + string::size_type pos = r.find(patt); + while(pos != string::npos) + { + r.replace(pos, patt.size(), val); + pos += val.size(); + pos = r.find(patt, pos); + } + return r; +} + +string +opFormatTypeToString(const OperationPtr& op ) +{ + switch(op->format()) + { + case DefaultFormat: + { + return ".DefaultFormat"; + } + case CompactFormat: + { + return ".CompactFormat"; + } + case SlicedFormat: + { + return ".SlicedFormat"; + } + default: + { + assert(false); + } + } + return "???"; +} + +} + +// +// Split a scoped name into its components and return the components as a list of (unscoped) identifiers. +// +StringList +Slice::splitScopedName(const string& scoped) +{ + assert(scoped[0] == ':'); + StringList ids; + string::size_type next = 0; + string::size_type pos; + while((pos = scoped.find("::", next)) != string::npos) + { + pos += 2; + if(pos != scoped.size()) + { + string::size_type endpos = scoped.find("::", pos); + if(endpos != string::npos) + { + ids.push_back(scoped.substr(pos, endpos - pos)); + } + } + next = pos; + } + if(next != scoped.size()) + { + ids.push_back(scoped.substr(next)); + } + else + { + ids.push_back(""); + } + + return ids; +} + +// +// Check the given identifier against Swift's list of reserved words. If it matches +// a reserved word, then an escaped version is returned with a leading underscore. +// +string +Slice::fixIdent(const string& ident) +{ + if(ident[0] != ':') + { + return lookupKwd(ident); + } + StringList ids = splitScopedName(ident); + transform(ids.begin(), ids.end(), ids.begin(), ptr_fun(lookupKwd)); + ostringstream result; + for(StringList::const_iterator i = ids.begin(); i != ids.end(); ++i) + { + result << "::" + *i; + } + return result.str(); +} + +string +Slice::getSwiftModule(const ModulePtr& module, string& swiftPrefix) +{ + const string modulePrefix = "swift:module:"; + + string swiftModule; + + if(module->findMetaData(modulePrefix, swiftModule)) + { + swiftModule = swiftModule.substr(modulePrefix.size()); + + size_t pos = swiftModule.find(':'); + if(pos != string::npos) + { + swiftPrefix = swiftModule.substr(pos + 1); + swiftModule = swiftModule.substr(0, pos); + } + } + else + { + swiftModule = module->name(); + swiftPrefix = ""; + } + return fixIdent(swiftModule); +} + +string +Slice::getSwiftModule(const ModulePtr& module) +{ + string prefix; + return getSwiftModule(module, prefix); +} + +ModulePtr +Slice::getTopLevelModule(const ContainedPtr& cont) +{ + // + // Traverse to the top-level module. + // + ModulePtr m; + ContainedPtr p = cont; + while(true) + { + if(ModulePtr::dynamicCast(p)) + { + m = ModulePtr::dynamicCast(p); + } + + ContainerPtr c = p->container(); + p = ContainedPtr::dynamicCast(c); // This cast fails for Unit. + if(!p) + { + break; + } + } + return m; +} + +ModulePtr +Slice::getTopLevelModule(const TypePtr& type) +{ + assert(ProxyPtr::dynamicCast(type) || ContainedPtr::dynamicCast(type)); + + ProxyPtr proxy = ProxyPtr::dynamicCast(type); + return getTopLevelModule(proxy ? ContainedPtr::dynamicCast(proxy->_class()->definition()) : + ContainedPtr::dynamicCast(type)); +} + +void +SwiftGenerator::trimLines(StringList& l) +{ + // + // Remove empty trailing lines. + // + while(!l.empty() && l.back().empty()) + { + l.pop_back(); + } +} + +StringList +SwiftGenerator::splitComment(const string& c) +{ + string comment = c; + + // + // Strip HTML markup and javadoc links -- MATLAB doesn't display them. + // + string::size_type pos = 0; + do + { + pos = comment.find('<', pos); + if(pos != string::npos) + { + string::size_type endpos = comment.find('>', pos); + if(endpos == string::npos) + { + break; + } + comment.erase(pos, endpos - pos + 1); + } + } + while(pos != string::npos); + + const string link = "{@link"; + pos = 0; + do + { + pos = comment.find(link, pos); + if(pos != string::npos) + { + comment.erase(pos, link.size() + 1); // Erase trailing white space too. + string::size_type endpos = comment.find('}', pos); + if(endpos != string::npos) + { + string ident = comment.substr(pos, endpos - pos); + comment.erase(pos, endpos - pos + 1); + + // + // Check for links of the form {@link Type#member}. + // + string::size_type hash = ident.find('#'); + string rest; + if(hash != string::npos) + { + rest = ident.substr(hash + 1); + ident = ident.substr(0, hash); + if(!ident.empty()) + { + ident = fixIdent(ident); + if(!rest.empty()) + { + ident += "." + fixIdent(rest); + } + } + else if(!rest.empty()) + { + ident = fixIdent(rest); + } + } + else + { + ident = fixIdent(ident); + } + + comment.insert(pos, ident); + } + } + } + while(pos != string::npos); + + StringList result; + + pos = 0; + string::size_type nextPos; + while((nextPos = comment.find_first_of('\n', pos)) != string::npos) + { + result.push_back(IceUtilInternal::trim(string(comment, pos, nextPos - pos))); + pos = nextPos + 1; + } + string lastLine = IceUtilInternal::trim(string(comment, pos)); + if(!lastLine.empty()) + { + result.push_back(lastLine); + } + + trimLines(result); + + return result; +} + +bool +SwiftGenerator::parseCommentLine(const string& l, const string& tag, bool namedTag, string& name, string& doc) +{ + doc.clear(); + + if(l.find(tag) == 0) + { + const string ws = " \t"; + + if(namedTag) + { + string::size_type n = l.find_first_not_of(ws, tag.size()); + if(n == string::npos) + { + return false; // Malformed line, ignore it. + } + string::size_type end = l.find_first_of(ws, n); + if(end == string::npos) + { + return false; // Malformed line, ignore it. + } + name = l.substr(n, end - n); + n = l.find_first_not_of(ws, end); + if(n != string::npos) + { + doc = l.substr(n); + } + } + else + { + name.clear(); + + string::size_type n = l.find_first_not_of(ws, tag.size()); + if(n == string::npos) + { + return false; // Malformed line, ignore it. + } + doc = l.substr(n); + } + + return true; + } + + return false; +} + +DocElements +SwiftGenerator::parseComment(const ContainedPtr& p) +{ + DocElements doc; + + doc.deprecated = false; + + // + // First check metadata for a deprecated tag. + // + string deprecateMetadata; + if(p->findMetaData("deprecate", deprecateMetadata)) + { + doc.deprecated = true; + if(deprecateMetadata.find("deprecate:") == 0 && deprecateMetadata.size() > 10) + { + doc.deprecateReason.push_back(IceUtilInternal::trim(deprecateMetadata.substr(10))); + } + } + + // + // Split up the comment into lines. + // + StringList lines = splitComment(p->comment()); + + StringList::const_iterator i; + for(i = lines.begin(); i != lines.end(); ++i) + { + const string l = *i; + if(l[0] == '@') + { + break; + } + doc.overview.push_back(l); + } + + enum State { StateMisc, StateParam, StateThrows, StateReturn, StateDeprecated }; + State state = StateMisc; + string name; + const string ws = " \t"; + const string paramTag = "@param"; + const string throwsTag = "@throws"; + const string exceptionTag = "@exception"; + const string returnTag = "@return"; + const string deprecatedTag = "@deprecated"; + const string seeTag = "@see"; + for(; i != lines.end(); ++i) + { + const string l = IceUtilInternal::trim(*i); + string line; + if(parseCommentLine(l, paramTag, true, name, line)) + { + if(!line.empty()) + { + state = StateParam; + StringList sl; + sl.push_back(line); // The first line of the description. + doc.params[name] = sl; + } + } + else if(parseCommentLine(l, throwsTag, true, name, line)) + { + if(!line.empty()) + { + state = StateThrows; + StringList sl; + sl.push_back(line); // The first line of the description. + doc.exceptions[name] = sl; + } + } + else if(parseCommentLine(l, exceptionTag, true, name, line)) + { + if(!line.empty()) + { + state = StateThrows; + StringList sl; + sl.push_back(line); // The first line of the description. + doc.exceptions[name] = sl; + } + } + else if(parseCommentLine(l, seeTag, false, name, line)) + { + if(!line.empty()) + { + doc.seeAlso.push_back(line); + } + } + else if(parseCommentLine(l, returnTag, false, name, line)) + { + if(!line.empty()) + { + state = StateReturn; + doc.returns.push_back(line); // The first line of the description. + } + } + else if(parseCommentLine(l, deprecatedTag, false, name, line)) + { + doc.deprecated = true; + if(!line.empty()) + { + state = StateDeprecated; + doc.deprecateReason.push_back(line); // The first line of the description. + } + } + else if(!l.empty()) + { + if(l[0] == '@') + { + // + // Treat all other tags as miscellaneous comments. + // + state = StateMisc; + } + + switch(state) + { + case StateMisc: + { + doc.misc.push_back(l); + break; + } + case StateParam: + { + assert(!name.empty()); + StringList sl; + if(doc.params.find(name) != doc.params.end()) + { + sl = doc.params[name]; + } + sl.push_back(l); + doc.params[name] = sl; + break; + } + case StateThrows: + { + assert(!name.empty()); + StringList sl; + if(doc.exceptions.find(name) != doc.exceptions.end()) + { + sl = doc.exceptions[name]; + } + sl.push_back(l); + doc.exceptions[name] = sl; + break; + } + case StateReturn: + { + doc.returns.push_back(l); + break; + } + case StateDeprecated: + { + doc.deprecateReason.push_back(l); + break; + } + } + } + } + + trimLines(doc.overview); + trimLines(doc.deprecateReason); + trimLines(doc.misc); + trimLines(doc.returns); + + return doc; +} + +void +SwiftGenerator::writeDocLines(IceUtilInternal::Output& out, const StringList& lines, bool commentFirst, + const string& space) +{ + StringList l = lines; + if(!commentFirst) + { + out << l.front(); + l.pop_front(); + } + + for(StringList::const_iterator i = l.begin(); i != l.end(); ++i) + { + out << nl << "///"; + if(!i->empty()) + { + out << space << *i; + } + } +} + +void +SwiftGenerator::writeDocSentence(IceUtilInternal::Output& out, const StringList& lines) +{ + // + // Write the first sentence. + // + for(StringList::const_iterator i = lines.begin(); i != lines.end(); ++i) + { + const string ws = " \t"; + + if(i->empty()) + { + break; + } + if(i != lines.begin() && i->find_first_not_of(ws) == 0) + { + out << " "; + } + string::size_type pos = i->find('.'); + if(pos == string::npos) + { + out << *i; + } + else if(pos == i->size() - 1) + { + out << *i; + break; + } + else + { + // + // Assume a period followed by whitespace indicates the end of the sentence. + // + while(pos != string::npos) + { + if(ws.find((*i)[pos + 1]) != string::npos) + { + break; + } + pos = i->find('.', pos + 1); + } + if(pos != string::npos) + { + out << i->substr(0, pos + 1); + break; + } + else + { + out << *i; + } + } + } +} + +void +SwiftGenerator::writeDocSummary(IceUtilInternal::Output& out, const ContainedPtr& p) +{ + DocElements doc = parseComment(p); + + string n = fixIdent(p->name()); + + // + // No leading newline. + // + if(!doc.overview.empty()) + { + writeDocLines(out, doc.overview); + } + + if(!doc.misc.empty()) + { + out << "///" << nl; + writeDocLines(out, doc.misc); + } + + if(doc.deprecated) + { + out << nl << "///"; + out << nl << "/// ## Deprecated"; + if(!doc.deprecateReason.empty()) + { + writeDocLines(out, doc.deprecateReason); + } + } +} + +void +SwiftGenerator::writeOpDocSummary(IceUtilInternal::Output& out, + const OperationPtr& p, + bool async, + bool dispatch, + bool local) +{ + DocElements doc = parseComment(p); + if(!doc.overview.empty()) + { + writeDocLines(out, doc.overview); + } + + if(doc.deprecated) + { + out << nl << "///"; + out << nl << "/// ## Deprecated"; + if(!doc.deprecateReason.empty()) + { + writeDocLines(out, doc.deprecateReason); + } + } + + int typeCtx = TypeContextInParam; + if(local) + { + typeCtx |= TypeContextLocal; + } + + const ParamInfoList allInParams = getAllInParams(p, typeCtx); + for(ParamInfoList::const_iterator q = allInParams.begin(); q != allInParams.end(); ++q) + { + out << nl << "///"; + out << nl << "/// - parameter " << (!dispatch && allInParams.size() == 1 ? "_" : q->name) + << ": `" << q->typeStr << "`"; + map<string, StringList>::const_iterator r = doc.params.find(q->name); + if(r != doc.params.end() && !r->second.empty()) + { + out << " "; + writeDocLines(out, r->second, false); + } + } + + if(!local) + { + out << nl << "///"; + if(dispatch) + { + out << nl << "/// - parameter current: `Ice.Current` - The Current object for the dispatch."; + } + else + { + out << nl << "/// - parameter context: `Ice.Context` - Optional request context."; + } + } + + typeCtx = local ? TypeContextLocal : 0; + + if(async) + { + if(!dispatch) + { + out << nl << "///"; + out << nl << "/// - parameter sentOn: `Dispatch.DispatchQueue?` - Optional dispatch queue used to"; + out << nl << "/// dispatch sent callback, the default is to use `PromiseKit.conf.Q.return` queue."; + out << nl << "///"; + out << nl << "/// - parameter sentFlags: `Dispatch.DispatchWorkItemFlags?` - Optional dispatch flags used"; + out << nl << "/// to dispatch sent callback"; + out << nl << "///"; + out << nl << "/// - parameter sent: `((Swift.Bool) -> Swift.Void)` - Optional sent callback."; + } + + out << nl << "///"; + out << nl << "/// - returns: `PromiseKit.Promise<" << operationReturnType(p, typeCtx) + << ">` - The result of the operation"; + } + else + { + const ParamInfoList allOutParams = getAllOutParams(p, typeCtx); + if(allOutParams.size() == 1) + { + ParamInfo ret = allOutParams.front(); + out << nl << "///"; + out << nl << "/// - returns: `" << ret.typeStr << "`"; + if(p->returnType()) + { + if(!doc.returns.empty()) + { + out << " - "; + writeDocLines(out, doc.returns, false); + } + } + else + { + map<string, StringList>::const_iterator r = doc.params.find(ret.name); + if(r != doc.params.end() && !r->second.empty()) + { + out << " - "; + writeDocLines(out, r->second, false); + } + } + } + else if(allOutParams.size() > 1) + { + out << nl << "///"; + out << nl << "/// - returns: `" << operationReturnType(p, typeCtx) << "`:"; + if(p->returnType()) + { + ParamInfo ret = allOutParams.back(); + out << nl << "///"; + out << nl << "/// - " << ret.name << ": `" << ret.typeStr << "`"; + if(!doc.returns.empty()) + { + out << " - "; + writeDocLines(out, doc.returns, false); + } + } + + for(ParamInfoList::const_iterator q = allOutParams.begin(); q != allOutParams.end(); ++q) + { + if(q->param != 0) + { + out << nl << "///"; + out << nl << "/// - " << q->name << ": `" << q->typeStr << "`"; + map<string, StringList>::const_iterator r = doc.params.find(q->name); + if(r != doc.params.end() && !r->second.empty()) + { + out << " - "; + writeDocLines(out, r->second, false); + } + } + } + } + } + + if(!doc.exceptions.empty() && !async) + { + out << nl << "///"; + out << nl << "/// - throws:"; + for(map<string, StringList>::const_iterator q = doc.exceptions.begin(); q != doc.exceptions.end(); ++q) + { + out << nl << "///"; + out << nl << "/// - " << q->first; + if(!q->second.empty()) + { + out << " - "; + writeDocLines(out, q->second, false, " "); + } + } + } + + if(!doc.misc.empty()) + { + out << nl; + writeDocLines(out, doc.misc, false); + } +} + +void +SwiftGenerator::writeProxyDocSummary(IceUtilInternal::Output& out, const ClassDefPtr& p, const string& swiftModule) +{ + DocElements doc = parseComment(p); + + const string name = getUnqualified(getAbsolute(p), swiftModule); + const string prx = name + "Prx"; + + if(doc.overview.empty()) + { + out << nl << "/// " << prx << " overview."; + } + else + { + writeDocLines(out, doc.overview); + } + + const OperationList ops = p->operations(); + if(!ops.empty()) + { + out << nl << "///"; + out << nl << "/// " << prx << " Methods:"; + for(OperationList::const_iterator q = ops.begin(); q != ops.end(); ++q) + { + OperationPtr op = *q; + DocElements opdoc = parseComment(op); + out << nl << "///"; + out << nl << "/// - " << fixIdent(op->name()) << ": "; + if(!opdoc.overview.empty()) + { + writeDocSentence(out, opdoc.overview); + } + + out << nl << "///"; + out << nl << "/// - " << op->name() << "Async: "; + if(!opdoc.overview.empty()) + { + writeDocSentence(out, opdoc.overview); + } + } + } + + if(!doc.misc.empty()) + { + writeDocLines(out, doc.misc, false); + } +} + +void +SwiftGenerator::writeServantDocSummary(IceUtilInternal::Output& out, const ClassDefPtr& p, const string& swiftModule) +{ + DocElements doc = parseComment(p); + + const string name = getUnqualified(getAbsolute(p), swiftModule); + + if(doc.overview.empty()) + { + out << nl << "/// " << name << " overview."; + } + else + { + writeDocLines(out, doc.overview); + } + + const OperationList ops = p->operations(); + if(!ops.empty()) + { + out << nl << "///"; + out << nl << "/// " << name << " Methods:"; + for(OperationList::const_iterator q = ops.begin(); q != ops.end(); ++q) + { + OperationPtr op = *q; + DocElements opdoc = parseComment(op); + out << nl << "///"; + out << nl << "/// - " << fixIdent(op->name()) << ": "; + if(!opdoc.overview.empty()) + { + writeDocSentence(out, opdoc.overview); + } + } + } + + if(!doc.misc.empty()) + { + writeDocLines(out, doc.misc, false); + } +} + +void +SwiftGenerator::writeMemberDoc(IceUtilInternal::Output& out, const DataMemberPtr& p) +{ + DocElements doc = parseComment(p); + + // + // Skip if there are no doc comments. + // + if(doc.overview.empty() && doc.misc.empty() && doc.seeAlso.empty() && doc.deprecateReason.empty() && + !doc.deprecated) + { + return; + } + + if(doc.overview.empty()) + { + out << nl << "/// " << fixIdent(p->name()); + } + else + { + writeDocLines(out, doc.overview); + } + + if(!doc.misc.empty()) + { + writeDocLines(out, doc.misc); + } + + if(doc.deprecated) + { + out << nl << "/// ##Deprecated"; + if(!doc.deprecateReason.empty()) + { + writeDocLines(out, doc.deprecateReason); + } + } +} + +void +SwiftGenerator::validateMetaData(const UnitPtr& u) +{ + MetaDataVisitor visitor; + u->visit(&visitor, true); +} + +// +// Get the fully-qualified name of the given definition. If a suffix is provided, +// it is prepended to the definition's unqualified name. If the nameSuffix +// is provided, it is appended to the container's name. +// +namespace +{ + +string +getAbsoluteImpl(const ContainedPtr& cont, const string& prefix = "", const string& suffix = "") +{ + string swiftPrefix; + string swiftModule = getSwiftModule(getTopLevelModule(cont), swiftPrefix); + + string str = cont->scope() + prefix + cont->name() + suffix; + if(str.find("::") == 0) + { + str.erase(0, 2); + } + + size_t pos = str.find("::"); + // + // Replace the definition top-level module by the corresponding Swift module + // and append the Swift prefix for the Slice module, then any remaining nested + // modules become a Swift prefix + // + if(pos != string::npos) + { + str = str.substr(pos + 2); + } + return swiftModule + "." + swiftPrefix + replace(str, "::", ""); +} + +} + +string +SwiftGenerator::getValue(const string& swiftModule, const TypePtr& type) +{ + BuiltinPtr builtin = BuiltinPtr::dynamicCast(type); + if(builtin) + { + switch(builtin->kind()) + { + case Builtin::KindBool: + { + return "false"; + } + case Builtin::KindByte: + case Builtin::KindShort: + case Builtin::KindInt: + case Builtin::KindLong: + { + return "0"; + } + case Builtin::KindFloat: + case Builtin::KindDouble: + { + return "0.0"; + } + case Builtin::KindString: + { + return "\"\""; + } + default: + { + return "nil"; + } + } + } + + EnumPtr en = EnumPtr::dynamicCast(type); + if(en) + { + return "." + fixIdent((*en->enumerators().begin())->name()); + } + + StructPtr st = StructPtr::dynamicCast(type); + if(st) + { + return getUnqualified(getAbsolute(type), swiftModule) + "()"; + } + + SequencePtr seq = SequencePtr::dynamicCast(type); + if(seq) + { + return getUnqualified(getAbsolute(type), swiftModule) + "()"; + } + + DictionaryPtr dict = DictionaryPtr::dynamicCast(type); + if(dict) + { + return getUnqualified(getAbsolute(type), swiftModule) + "()"; + } + + return "nil"; +} + +void +SwiftGenerator::writeConstantValue(IceUtilInternal::Output& out, const TypePtr& type, + const SyntaxTreeBasePtr& valueType, const string& value, + const StringList&, const string& swiftModule, bool optional) +{ + ConstPtr constant = ConstPtr::dynamicCast(valueType); + if(constant) + { + out << getUnqualified(getAbsolute(constant), swiftModule); + } + else + { + if(valueType) + { + BuiltinPtr bp = BuiltinPtr::dynamicCast(type); + EnumPtr ep = EnumPtr::dynamicCast(type); + if(bp && bp->kind() == Builtin::KindString) + { + out << "\""; + out << toStringLiteral(value, "\n\r\t", "", EC6UCN, 0); + out << "\""; + } + else if(ep) + { + assert(valueType); + EnumeratorPtr enumerator = EnumeratorPtr::dynamicCast(valueType); + assert(enumerator); + out << getUnqualified(getAbsolute(ep), swiftModule) << "." << enumerator->name(); + } + else + { + out << value; + } + } + else if(optional) + { + out << "nil"; + } + else + { + out << getValue(swiftModule, type); + } + } +} + +string +SwiftGenerator::typeToString(const TypePtr& type, + const ContainedPtr& toplevel, + const StringList& metadata, + bool optional, + int typeCtx) +{ + static const char* builtinTable[] = + { + "Swift.UInt8", + "Swift.Bool", + "Swift.Int16", + "Swift.Int32", + "Swift.Int64", + "Swift.Float", + "Swift.Double", + "Swift.String", + "Ice.Disp", // Object + "Ice.ObjectPrx", // ObjectPrx + "Swift.AnyObject", // LocalObject + "Ice.Value" // Value + }; + + if(!type) + { + return ""; + } + + bool local = (typeCtx & TypeContextLocal) != 0; + if(local) + { + for(StringList::const_iterator i = metadata.begin(); i != metadata.end(); ++i) + { + const string swiftType = "swift:type:"; + const string meta = *i; + if(meta.find(swiftType) == 0) + { + return meta.substr(swiftType.size()); + } + } + } + + string t = ""; + // + // The current module were the type is being used + // + string currentModule = getSwiftModule(getTopLevelModule(toplevel)); + BuiltinPtr builtin = BuiltinPtr::dynamicCast(type); + bool nonnull = find(metadata.begin(), metadata.end(), "swift:nonnull") != metadata.end(); + bool inparam = typeCtx & TypeContextInParam; + + if(builtin) + { + if(builtin->kind() == Builtin::KindObject && !(typeCtx & TypeContextLocal)) + { + t = getUnqualified(builtinTable[Builtin::KindValue], currentModule); + } + else + { + t = getUnqualified(builtinTable[builtin->kind()], currentModule); + } + } + + ClassDeclPtr cl = ClassDeclPtr::dynamicCast(type); + ProxyPtr prx = ProxyPtr::dynamicCast(type); + ContainedPtr cont = ContainedPtr::dynamicCast(type); + + if(cl) + { + if(cl->isInterface() && !cl->isLocal()) + { + t = fixIdent(getUnqualified(builtinTable[Builtin::KindValue], currentModule)); + } + else + { + // + // Annotate nonnull closure as @escaping, Swift optional closure parameters are always + // @escaping see https://www.jessesquires.com/blog/why-optional-swift-closures-are-escaping/ + // + if(cl->isLocal() && cl->definition() && cl->definition()->isDelegate() && inparam && nonnull) + { + t = "@escaping "; + } + t += fixIdent(getUnqualified(getAbsoluteImpl(cl), currentModule)); + } + } + else if(prx) + { + ClassDefPtr def = prx->_class()->definition(); + if(def->isInterface() || def->allOperations().size() > 0) + { + t = getUnqualified(getAbsoluteImpl(prx->_class(), "", "Prx"), currentModule); + } + else + { + t = getUnqualified("Ice.ObjectPrx", currentModule); + } + } + else if(cont) + { + t = fixIdent(getUnqualified(getAbsoluteImpl(cont), currentModule)); + } + + if(!nonnull && (optional || isNullableType(type))) + { + t += "?"; + } + return t; +} + +string +SwiftGenerator::getAbsolute(const TypePtr& type) +{ + static const char* builtinTable[] = + { + "Swift.UInt8", + "Swift.Bool", + "Swift.Int16", + "Swift.Int32", + "Swift.Int64", + "Swift.Float", + "Swift.Double", + "Swift.String", + "Ice.Disp", // Object + "Ice.ObjectPrx", // ObjectPrx + "Swift.AnyObject", // LocalObject + "Ice.Value" // Value + }; + + BuiltinPtr builtin = BuiltinPtr::dynamicCast(type); + if(builtin) + { + return builtinTable[builtin->kind()]; + } + + ProxyPtr proxy = ProxyPtr::dynamicCast(type); + if(proxy) + { + return getAbsoluteImpl(proxy->_class(), "", "Prx"); + } + + ContainedPtr cont = ContainedPtr::dynamicCast(type); + if(cont) + { + return getAbsoluteImpl(cont); + } + + assert(false); + return "???"; +} + +string +SwiftGenerator::getAbsolute(const ClassDeclPtr& cl) +{ + return getAbsoluteImpl(cl); +} + +string +SwiftGenerator::getAbsolute(const ClassDefPtr& cl) +{ + return getAbsoluteImpl(cl); +} + +string +SwiftGenerator::getAbsolute(const ProxyPtr& prx) +{ + return getAbsoluteImpl(prx->_class(), "", "Prx"); +} + +string +SwiftGenerator::getAbsolute(const StructPtr& st) +{ + return getAbsoluteImpl(st); +} + +string +SwiftGenerator::getAbsolute(const ExceptionPtr& ex) +{ + return getAbsoluteImpl(ex); +} + +string +SwiftGenerator::getAbsolute(const EnumPtr& en) +{ + return getAbsoluteImpl(en); +} + +string +SwiftGenerator::getAbsolute(const ConstPtr& en) +{ + return getAbsoluteImpl(en); +} + +string +SwiftGenerator::getAbsolute(const SequencePtr& en) +{ + return getAbsoluteImpl(en); +} + +string +SwiftGenerator::getAbsolute(const DictionaryPtr& en) +{ + return getAbsoluteImpl(en); +} + +string +SwiftGenerator::getUnqualified(const string& type, const string& localModule) +{ + const string prefix = localModule + "."; + return type.find(prefix) == 0 ? type.substr(prefix.size()) : type; +} + +string +SwiftGenerator::modeToString(Operation::Mode opMode) +{ + string mode; + switch(opMode) + { + case Operation::Normal: + { + mode = ".Normal"; + break; + } + case Operation::Nonmutating: + { + mode = ".Nonmutating"; + break; + } + case Operation::Idempotent: + { + mode = ".Idempotent"; + break; + } + default: + { + assert(false); + break; + } + } + return mode; +} + +string +SwiftGenerator::getOptionalFormat(const TypePtr& type) +{ + BuiltinPtr bp = BuiltinPtr::dynamicCast(type); + if(bp) + { + switch(bp->kind()) + { + case Builtin::KindByte: + case Builtin::KindBool: + { + return ".F1"; + } + case Builtin::KindShort: + { + return ".F2"; + } + case Builtin::KindInt: + case Builtin::KindFloat: + { + return ".F4"; + } + case Builtin::KindLong: + case Builtin::KindDouble: + { + return ".F8"; + } + case Builtin::KindString: + { + return ".VSize"; + } + case Builtin::KindObject: + { + return ".Class"; + } + case Builtin::KindObjectProxy: + { + return ".FSize"; + } + case Builtin::KindLocalObject: + { + assert(false); + break; + } + case Builtin::KindValue: + { + return ".Class"; + } + } + } + + if(EnumPtr::dynamicCast(type)) + { + return ".Size"; + } + + SequencePtr seq = SequencePtr::dynamicCast(type); + if(seq) + { + return seq->type()->isVariableLength() ? ".FSize" : ".VSize"; + } + + DictionaryPtr d = DictionaryPtr::dynamicCast(type); + if(d) + { + return (d->keyType()->isVariableLength() || d->valueType()->isVariableLength()) ? + ".FSize" : ".VSize"; + } + + StructPtr st = StructPtr::dynamicCast(type); + if(st) + { + return st->isVariableLength() ? ".FSize" : ".VSize"; + } + + if(ProxyPtr::dynamicCast(type)) + { + return ".FSize"; + } + + ClassDeclPtr cl = ClassDeclPtr::dynamicCast(type); + assert(cl); + return ".Class"; +} + +bool +SwiftGenerator::isNullableType(const TypePtr& type) +{ + BuiltinPtr builtin = BuiltinPtr::dynamicCast(type); + if(builtin) + { + switch(builtin->kind()) + { + case Builtin::KindObject: + case Builtin::KindObjectProxy: + case Builtin::KindLocalObject: + case Builtin::KindValue: + { + return true; + } + default: + { + return false; + } + } + } + + return ClassDeclPtr::dynamicCast(type) || ProxyPtr::dynamicCast(type); +} + +bool +SwiftGenerator::isProxyType(const TypePtr& p) +{ + const BuiltinPtr builtin = BuiltinPtr::dynamicCast(p); + return (builtin && builtin->kind() == Builtin::KindObjectProxy) || ProxyPtr::dynamicCast(p); +} + +bool +SwiftGenerator::isClassType(const TypePtr& p) +{ + const BuiltinPtr builtin = BuiltinPtr::dynamicCast(p); + return (builtin && (builtin->kind() == Builtin::KindObject || + builtin->kind() == Builtin::KindValue)) || + ClassDeclPtr::dynamicCast(p); +} + +bool +SwiftGenerator::containsClassMembers(const StructPtr& s) +{ + DataMemberList dm = s->dataMembers(); + for(DataMemberList::const_iterator i = dm.begin(); i != dm.end(); ++i) + { + if(isClassType((*i)->type())) + { + return true; + } + + StructPtr st = StructPtr::dynamicCast((*i)->type()); + if(st && containsClassMembers(st)) + { + return true; + } + + SequencePtr seq = SequencePtr::dynamicCast((*i)->type()); + if(seq) + { + st = StructPtr::dynamicCast(seq->type()); + if(isClassType(seq->type()) || (st && containsClassMembers(st))) + { + return true; + } + } + + DictionaryPtr dict = DictionaryPtr::dynamicCast((*i)->type()); + if(dict) + { + st = StructPtr::dynamicCast(dict->valueType()); + if(isClassType(dict->valueType()) || (st && containsClassMembers(st))) + { + return true; + } + } + } + return false; +} + +void +SwiftGenerator::writeDefaultInitializer(IceUtilInternal::Output& out, + bool required, + bool rootClass) +{ + out << sp; + out << nl << "public "; + if(required) + { + out << "required "; + } + if(rootClass) + { + out << "init() {}"; + } + else + { + assert(required); + out << "init()"; + out << sb; + out << nl << "super.init()"; + out << eb; + } +} + +void +SwiftGenerator::writeMemberwiseInitializer(IceUtilInternal::Output& out, + const DataMemberList& members, + const ContainedPtr& p) +{ + writeMemberwiseInitializer(out, members, DataMemberList(), members, p, false, true); +} + +void +SwiftGenerator::writeMemberwiseInitializer(IceUtilInternal::Output& out, + const DataMemberList& members, + const DataMemberList& baseMembers, + const DataMemberList& allMembers, + const ContainedPtr& p, + bool local, + bool rootClass, + const StringPairList& extraParams) +{ + if(!members.empty()) + { + out << sp; + out << nl; + int typeCtx = TypeContextInParam; + if(local) + { + typeCtx |= TypeContextLocal; + } + out << "public init" << spar; + for(DataMemberList::const_iterator i = allMembers.begin(); i != allMembers.end(); ++i) + { + DataMemberPtr m = *i; + out << (fixIdent(m->name()) + ": " + + typeToString(m->type(), p, m->getMetaData(), m->optional(), TypeContextInParam)); + } + for(StringPairList::const_iterator q = extraParams.begin(); q != extraParams.end(); ++q) + { + out << (q->first + ": " + q->second); + } + out << epar; + out << sb; + for(DataMemberList::const_iterator i = members.begin(); i != members.end(); ++i) + { + DataMemberPtr m = *i; + out << nl << "self." << fixIdent(m->name()) << " = " << fixIdent(m->name()); + } + + if(!rootClass) + { + out << nl << "super.init"; + out << spar; + for(DataMemberList::const_iterator i = baseMembers.begin(); i != baseMembers.end(); ++i) + { + const string name = fixIdent((*i)->name()); + out << (name + ": " + name); + } + for(StringPairList::const_iterator q = extraParams.begin(); q != extraParams.end(); ++q) + { + out << (q->first + ": " + q->first); + } + out << epar; + } + out << eb; + } +} + +void +SwiftGenerator::writeMembers(IceUtilInternal::Output& out, + const DataMemberList& members, + const ContainedPtr& p, + int typeCtx) +{ + string swiftModule = getSwiftModule(getTopLevelModule(p)); + bool protocol = (typeCtx & TypeContextProtocol); + string access = protocol ? "" : "public "; + for(DataMemberList::const_iterator q = members.begin(); q != members.end(); ++q) + { + DataMemberPtr member = *q; + TypePtr type = member->type(); + string defaultValue = member->defaultValue(); + writeMemberDoc(out, member); + out << nl << access << "var " << fixIdent(member->name()) << ": " + << typeToString(type, p, member->getMetaData(), member->optional(), typeCtx); + if(protocol) + { + out << " { get set }"; + } + else + { + out << " = "; + writeConstantValue(out, type, member->defaultValueType(), defaultValue, p->getMetaData(), swiftModule, + member->optional()); + } + } +} + +bool +SwiftGenerator::usesMarshalHelper(const TypePtr& type) +{ + SequencePtr seq = SequencePtr::dynamicCast(type); + if(seq) + { + BuiltinPtr builtin = BuiltinPtr::dynamicCast(seq->type()); + if(builtin) + { + return builtin->kind() > Builtin::KindString; + } + return true; + } + return DictionaryPtr::dynamicCast(type); +} + +void +SwiftGenerator::writeMarshalUnmarshalCode(Output &out, + const TypePtr& type, + const ContainedPtr& p, + const string& param, + bool marshal, + int tag) +{ + string swiftModule = getSwiftModule(getTopLevelModule(p)); + string stream = StructPtr::dynamicCast(p) ? "self" : marshal ? "ostr" : "istr"; + + string args; + if(tag >= 0) + { + args += "tag: " + int64ToString(tag); + if(marshal) + { + args += ", "; + } + } + + if(marshal) + { + if(tag >= 0 || usesMarshalHelper(type)) + { + args += "value: "; + } + args += param; + } + + BuiltinPtr builtin = BuiltinPtr::dynamicCast(type); + if(builtin) + { + switch(builtin->kind()) + { + case Builtin::KindByte: + case Builtin::KindBool: + case Builtin::KindShort: + case Builtin::KindInt: + case Builtin::KindLong: + case Builtin::KindFloat: + case Builtin::KindDouble: + case Builtin::KindString: + { + if(marshal) + { + out << nl << stream << ".write(" << args << ")"; + } + else + { + out << nl << param << " = try " << stream << ".read(" << args << ")"; + } + break; + } + case Builtin::KindObjectProxy: + { + if(marshal) + { + out << nl << stream << ".write(" << args << ")"; + } + else + { + if(tag >= 0) + { + args += ", type: "; + } + args += getUnqualified(getAbsolute(type), swiftModule) + ".self"; + + out << nl << param << " = try " << stream << ".read(" << args << ")"; + } + break; + } + case Builtin::KindObject: + case Builtin::KindValue: + { + if(marshal) + { + out << nl << stream << ".write(" << args << ")"; + } + else + { + out << nl << "try " << stream << ".read(" << args << ") { " << param << " = $0 }"; + } + break; + } + case Builtin::KindLocalObject: + { + assert(false); + break; + } + default: + { + break; + } + } + } + + if(ClassDeclPtr::dynamicCast(type)) + { + ClassDeclPtr cl = ClassDeclPtr::dynamicCast(type); + if(marshal) + { + out << nl << stream << ".write(" << args << ")"; + } + else + { + if(cl->isInterface()) + { + out << nl << "try " << stream << ".read(" << args << ") { " << param << " = $0 }"; + } + else + { + if(tag >= 0) + { + args += ", value: "; + } + args += getUnqualified(getAbsolute(type), swiftModule) + ".self"; + out << nl << "try " << stream << ".read(" << args << ") { " << param << " = $0 " << "}"; + } + } + return; + } + + EnumPtr en = EnumPtr::dynamicCast(type); + if(en) + { + if(marshal) + { + out << nl << stream << ".write(" << args << ")"; + } + else + { + out << nl << param << " = try " << stream << ".read(" << args << ")"; + } + return; + } + + ProxyPtr prx = ProxyPtr::dynamicCast(type); + if(prx) + { + if(marshal) + { + out << nl << stream << ".write(" << args << ")"; + } + else + { + if(tag >= 0) + { + args += ", type: "; + } + + ClassDefPtr def = prx->_class()->definition(); + if(def->isInterface() || def->allOperations().size() > 0) + { + args += getUnqualified(getAbsolute(type), swiftModule) + ".self"; + } + else + { + args += getUnqualified("Ice.ObjectPrx", swiftModule) + ".self"; + } + out << nl << param << " = try " << stream << ".read(" << args << ")"; + } + return; + } + + if(StructPtr::dynamicCast(type)) + { + if(marshal) + { + out << nl << stream << ".write(" << args << ")"; + } + else + { + out << nl << param << " = try " << stream << ".read(" << args << ")"; + } + return; + } + + SequencePtr seq = SequencePtr::dynamicCast(type); + if(seq) + { + BuiltinPtr seqBuiltin = BuiltinPtr::dynamicCast(seq->type()); + if(seqBuiltin && seqBuiltin->kind() <= Builtin::KindString) + { + if(marshal) + { + out << nl << stream << ".write(" << args << ")"; + } + else + { + out << nl << param << " = try " << stream << ".read(" << args << ")"; + } + } + else + { + string helper = getUnqualified(getAbsoluteImpl(ContainedPtr::dynamicCast(type)), swiftModule) + "Helper"; + if(marshal) + { + out << nl << helper <<".write(to: " << stream << ", " << args << ")"; + } + else + { + out << nl << param << " = try " << helper << ".read(from: " << stream; + if(!args.empty()) + { + out << ", " << args; + } + out << ")"; + } + } + return; + } + + if(DictionaryPtr::dynamicCast(type)) + { + string helper = getUnqualified(getAbsoluteImpl(ContainedPtr::dynamicCast(type)), swiftModule) + "Helper"; + if(marshal) + { + out << nl << helper <<".write(to: " << stream << ", " << args << ")"; + } + else + { + out << nl << param << " = try " << helper << ".read(from: " << stream; + if(!args.empty()) + { + out << ", " << args; + } + out << ")"; + } + return; + } +} + +bool +SwiftGenerator::MetaDataVisitor::visitModuleStart(const ModulePtr& p) +{ + if(UnitPtr::dynamicCast(p->container())) + { + const UnitPtr ut = p->unit(); + const DefinitionContextPtr dc = ut->findDefinitionContext(p->file()); + assert(dc); + + // top-level module + ModulePtr m = ModulePtr::dynamicCast(p); + const string modulePrefix = "swift:module:"; + + string swiftModule; + string swiftPrefix; + + if(m->findMetaData(modulePrefix, swiftModule)) + { + swiftModule = swiftModule.substr(modulePrefix.size()); + + size_t pos = swiftModule.find(':'); + if(pos != string::npos) + { + swiftPrefix = swiftModule.substr(pos + 1); + swiftModule = swiftModule.substr(0, pos); + } + } + else + { + swiftModule = m->name(); + } + + const string filename = m->definitionContext()->filename(); + ModuleMap::const_iterator current = _modules.find(filename); + + if(current == _modules.end()) + { + _modules[filename] = swiftModule; + } + else if(current->second != swiftModule) + { + ostringstream os; + os << "invalid module mapping:\n Slice module `" << m->scoped() << "' should be map to Swift module `" + << current->second << "'" << endl; + dc->error(p->file(), p->line(), os.str()); + } + + ModulePrefix::iterator prefixes = _prefixes.find(swiftModule); + if(prefixes == _prefixes.end()) + { + ModuleMap mappings; + mappings[p->name()] = swiftPrefix; + _prefixes[swiftModule] = mappings; + } + else + { + current = prefixes->second.find(p->name()); + if(current == prefixes->second.end()) + { + prefixes->second[p->name()] = swiftPrefix; + } + else if(current->second != swiftPrefix) + { + ostringstream os; + os << "invalid module prefix:\n Slice module `" << m->scoped() << "' is already using"; + if(current->second.empty()) + { + os << " no prefix " << endl; + } + else + { + os << " a different Swift module prefix `" << current->second << "'" << endl; + } + dc->error(p->file(), p->line(), os.str()); + } + } + } + return true; +} + +string +SwiftGenerator::paramLabel(const string& param, const ParamDeclList& params) +{ + string s = param; + for(ParamDeclList::const_iterator q = params.begin(); q != params.end(); ++q) + { + if((*q)->name() == param) + { + s = "_" + s; + break; + } + } + return s; +} + +bool +SwiftGenerator::operationReturnIsTuple(const OperationPtr& op) +{ + ParamDeclList outParams = op->outParameters(); + return (op->returnType() && outParams.size() > 0) || outParams.size() > 1; +} + +string +SwiftGenerator::operationReturnType(const OperationPtr& op, int typeCtx) +{ + ostringstream os; + bool returnIsTuple = operationReturnIsTuple(op); + if(returnIsTuple) + { + os << "("; + } + + ParamDeclList outParams = op->outParameters(); + TypePtr returnType = op->returnType(); + if(returnType) + { + if(returnIsTuple) + { + os << paramLabel("returnValue", outParams) << ": "; + } + os << typeToString(returnType, op, op->getMetaData(), op->returnIsOptional(), typeCtx); + } + + for(ParamDeclList::const_iterator q = outParams.begin(); q != outParams.end(); ++q) + { + if(returnType || q != outParams.begin()) + { + os << ", "; + } + + if(returnIsTuple) + { + os << (*q)->name() << ": "; + } + + os << typeToString((*q)->type(), *q, (*q)->getMetaData(), (*q)->optional(), typeCtx); + } + + if(returnIsTuple) + { + os << ")"; + } + + return os.str(); +} + +std::string +SwiftGenerator::operationReturnDeclaration(const OperationPtr& op) +{ + ostringstream os; + ParamDeclList outParams = op->outParameters(); + TypePtr returnType = op->returnType(); + bool returnIsTuple = operationReturnIsTuple(op); + + if(returnIsTuple) + { + os << "("; + } + + if(returnType) + { + os << ("iceP_" + paramLabel("returnValue", outParams)); + } + + for(ParamDeclList::const_iterator q = outParams.begin(); q != outParams.end(); ++q) + { + if(returnType || q != outParams.begin()) + { + os << ", "; + } + + os << ("iceP_" + (*q)->name()); + } + + if(returnIsTuple) + { + os << ")"; + } + + return os.str(); +} + +string +SwiftGenerator::operationInParamsDeclaration(const OperationPtr& op) +{ + ostringstream os; + + ParamDeclList inParams = op->inParameters(); + const bool isTuple = inParams.size() > 1; + + if(!inParams.empty()) + { + if(isTuple) + { + os << "("; + } + for(ParamDeclList::const_iterator q = inParams.begin(); q != inParams.end(); ++q) + { + if(q != inParams.begin()) + { + os << ", "; + } + + os << ("iceP_" + (*q)->name()); + } + if(isTuple) + { + os << ")"; + } + + os << ": "; + + if(isTuple) + { + os << "("; + } + for(ParamDeclList::const_iterator q = inParams.begin(); q != inParams.end(); ++q) + { + if(q != inParams.begin()) + { + os << ", "; + } + + os << typeToString((*q)->type(), *q, (*q)->getMetaData(), (*q)->optional()); + } + if(isTuple) + { + os << ")"; + } + } + + return os.str(); +} + +bool +SwiftGenerator::operationIsAmd(const OperationPtr& op) +{ + const ClassDefPtr cl = ClassDefPtr::dynamicCast(op->container()); + return cl->hasMetaData("amd") || op->hasMetaData("amd"); +} + +ParamInfoList +SwiftGenerator::getAllInParams(const OperationPtr& op, int typeCtx) +{ + const ParamDeclList l = op->inParameters(); + ParamInfoList r; + for(ParamDeclList::const_iterator p = l.begin(); p != l.end(); ++p) + { + ParamInfo info; + info.name = (*p)->name(); + info.type = (*p)->type(); + info.typeStr = typeToString(info.type, op, (*p)->getMetaData(), (*p)->optional(), typeCtx); + info.optional = (*p)->optional(); + info.tag = (*p)->tag(); + info.param = *p; + r.push_back(info); + } + return r; +} + +void +SwiftGenerator::getInParams(const OperationPtr& op, ParamInfoList& required, ParamInfoList& optional) +{ + const ParamInfoList params = getAllInParams(op); + for(ParamInfoList::const_iterator p = params.begin(); p != params.end(); ++p) + { + if(p->optional) + { + optional.push_back(*p); + } + else + { + required.push_back(*p); + } + } + + // + // Sort optional parameters by tag. + // + class SortFn + { + public: + static bool compare(const ParamInfo& lhs, const ParamInfo& rhs) + { + return lhs.tag < rhs.tag; + } + }; + optional.sort(SortFn::compare); +} + +ParamInfoList +SwiftGenerator::getAllOutParams(const OperationPtr& op, int typeCtx) +{ + ParamDeclList params = op->outParameters(); + ParamInfoList l; + + for(ParamDeclList::const_iterator p = params.begin(); p != params.end(); ++p) + { + ParamInfo info; + info.name = (*p)->name(); + info.type = (*p)->type(); + info.typeStr = typeToString(info.type, op, (*p)->getMetaData(), (*p)->optional(), typeCtx); + info.optional = (*p)->optional(); + info.tag = (*p)->tag(); + info.param = *p; + l.push_back(info); + } + + if(op->returnType()) + { + ParamInfo info; + info.name = paramLabel("returnValue", params); + info.type = op->returnType(); + info.typeStr = typeToString(info.type, op, op->getMetaData(), op->returnIsOptional(), typeCtx); + info.optional = op->returnIsOptional(); + info.tag = op->returnTag(); + l.push_back(info); + } + + return l; +} + +void +SwiftGenerator::getOutParams(const OperationPtr& op, ParamInfoList& required, ParamInfoList& optional) +{ + const ParamInfoList params = getAllOutParams(op); + for(ParamInfoList::const_iterator p = params.begin(); p != params.end(); ++p) + { + if(p->optional) + { + optional.push_back(*p); + } + else + { + required.push_back(*p); + } + } + + // + // Sort optional parameters by tag. + // + class SortFn + { + public: + static bool compare(const ParamInfo& lhs, const ParamInfo& rhs) + { + return lhs.tag < rhs.tag; + } + }; + optional.sort(SortFn::compare); +} + +void +SwiftGenerator::writeMarshalInParams(::IceUtilInternal::Output& out, const OperationPtr& op) +{ + ParamInfoList requiredInParams, optionalInParams; + getInParams(op, requiredInParams, optionalInParams); + + out << "{ ostr in"; + out.inc(); + // + // Marshal parameters + // 1. required + // 2. optional + // + + for(ParamInfoList::const_iterator q = requiredInParams.begin(); q != requiredInParams.end(); ++q) + { + writeMarshalUnmarshalCode(out, q->type, op, "iceP_" + q->name, true); + } + + for(ParamInfoList::const_iterator q = optionalInParams.begin(); q != optionalInParams.end(); ++q) + { + writeMarshalUnmarshalCode(out, q->type, op, "iceP_" + q->name, true, q->tag); + } + + if(op->sendsClasses(false)) + { + out << nl << "ostr.writePendingValues()"; + } + out.dec(); + out << nl << "}"; +} + +void +SwiftGenerator::writeMarshalOutParams(::IceUtilInternal::Output& out, const OperationPtr& op) +{ + ParamInfoList requiredOutParams, optionalOutParams; + getOutParams(op, requiredOutParams, optionalOutParams); + + out << "{ ostr in"; + out.inc(); + // + // Marshal parameters + // 1. required + // 2. optional (including optional return) + // + + for(ParamInfoList::const_iterator q = requiredOutParams.begin(); q != requiredOutParams.end(); ++q) + { + writeMarshalUnmarshalCode(out, q->type, op, "iceP_" + q->name, true); + } + + for(ParamInfoList::const_iterator q = optionalOutParams.begin(); q != optionalOutParams.end(); ++q) + { + writeMarshalUnmarshalCode(out, q->type, op, "iceP_" + q->name, true, q->tag); + } + + if(op->returnsClasses(false)) + { + out << nl << "ostr.writePendingValues()"; + } + + out.dec(); + out << nl << "}"; +} + +void +SwiftGenerator::writeUnmarshalOutParams(::IceUtilInternal::Output& out, const OperationPtr& op) +{ + TypePtr returnType = op->returnType(); + + ParamInfoList requiredOutParams, optionalOutParams; + getOutParams(op, requiredOutParams, optionalOutParams); + const ParamInfoList allOutParams = getAllOutParams(op); + // + // Unmarshal parameters + // 1. required + // 2. return + // 3. optional (including optional return) + // + out << "{ istr in"; + out.inc(); + for(ParamInfoList::const_iterator q = requiredOutParams.begin(); q != requiredOutParams.end(); ++q) + { + string param; + if(isClassType(q->type)) + { + out << nl << "var iceP_" << q->name << ": " << q->typeStr; + param = "iceP_" + q->name; + } + else + { + param = "let iceP_" + q->name + ": " + q->typeStr; + } + writeMarshalUnmarshalCode(out, q->type, op, param, false); + } + + for(ParamInfoList::const_iterator q = optionalOutParams.begin(); q != optionalOutParams.end(); ++q) + { + string param; + if(isClassType(q->type)) + { + out << nl << "var iceP_" << q->name << ": " << q->typeStr; + param = "iceP_" + q->name; + } + else + { + param = "let iceP_" + q->name + ": " + q->typeStr; + } + writeMarshalUnmarshalCode(out, q->type, op, param, false, q->tag); + } + + if(op->returnsClasses(false)) + { + out << nl << "try istr.readPendingValues()"; + } + + out << nl << "return "; + if(allOutParams.size() > 1) + { + out << spar; + } + + if(returnType) + { + out << ("iceP_" + paramLabel("returnValue", op->outParameters())); + } + + for(ParamInfoList::const_iterator q = allOutParams.begin(); q != allOutParams.end(); ++q) + { + if(q->param) + { + out << ("iceP_" + q->name); + } + } + + if(allOutParams.size() > 1) + { + out << epar; + } + + out.dec(); + out << nl << "}"; +} + +void +SwiftGenerator::writeUnmarshalInParams(::IceUtilInternal::Output& out, const OperationPtr& op) +{ + ParamInfoList requiredInParams, optionalInParams; + getInParams(op, requiredInParams, optionalInParams); + const ParamInfoList allInParams = getAllInParams(op); + // + // Unmarshal parameters + // 1. required + // 3. optional + // + out << "{ istr in"; + out.inc(); + for(ParamInfoList::const_iterator q = requiredInParams.begin(); q != requiredInParams.end(); ++q) + { + if(q->param) + { + string param; + if(isClassType(q->type)) + { + out << nl << "var iceP_" << q->name << ": " << q->typeStr; + param = "iceP_" + q->name; + } + else + { + param = "let iceP_" + q->name + ": " + q->typeStr; + } + writeMarshalUnmarshalCode(out, q->type, op, param, false); + } + } + + for(ParamInfoList::const_iterator q = optionalInParams.begin(); q != optionalInParams.end(); ++q) + { + string param; + if(isClassType(q->type)) + { + out << nl << "var iceP_" << q->name << ": " << q->typeStr; + param = "iceP_" + q->name; + } + else + { + param = "let iceP_" + q->name + ": " + q->typeStr; + } + writeMarshalUnmarshalCode(out, q->type, op, param, false, q->tag); + } + + if(op->sendsClasses(false)) + { + out << nl << "try istr.readPendingValues()"; + } + + out << nl << "return "; + if(allInParams.size() > 1) + { + out << spar; + } + + for(ParamInfoList::const_iterator q = allInParams.begin(); q != allInParams.end(); ++q) + { + out << ("iceP_" + q->name); + } + + if(allInParams.size() > 1) + { + out << epar; + } + + out.dec(); + out << nl << "}"; +} + +void +SwiftGenerator::writeUnmarshalUserException(::IceUtilInternal::Output& out, const OperationPtr& op) +{ + const string swiftModule = getSwiftModule(getTopLevelModule(ContainedPtr::dynamicCast(op))); + ExceptionList throws = op->throws(); + throws.sort(); + throws.unique(); + + out << "{ ex in"; + out.inc(); + out << nl << "do "; + out << sb; + out << nl << "throw ex"; + out << eb; + for(ExceptionList::const_iterator q = throws.begin(); q != throws.end(); ++q) + { + out << " catch let error as " << getUnqualified(getAbsolute(*q), swiftModule) << sb; + out << nl << "throw error"; + out << eb; + } + out << " catch is " << getUnqualified("Ice.UserException", swiftModule) << " {}"; + out.dec(); + out << nl << "}"; +} + +void +SwiftGenerator::writeSwiftAttributes(::IceUtilInternal::Output& out, const StringList& metadata) +{ + static const string prefix = "swift:attribute:"; + for(StringList::const_iterator q = metadata.begin(); q != metadata.end(); ++q) + { + if(q->find(prefix) == 0 && q->size() > prefix.size()) + { + out << nl << q->substr(prefix.size()); + } + } +} + +void +SwiftGenerator::writeProxyOperation(::IceUtilInternal::Output& out, const OperationPtr& op) +{ + const string opName = fixIdent(op->name()); + + const ParamInfoList allInParams = getAllInParams(op); + const ParamInfoList allOutParams = getAllOutParams(op); + const ExceptionList allExceptions = op->throws(); + + const string swiftModule = getSwiftModule(getTopLevelModule(ContainedPtr::dynamicCast(op))); + + out << sp; + writeOpDocSummary(out, op, false, false); + out << nl << "func " << opName; + out << spar; + for(ParamInfoList::const_iterator q = allInParams.begin(); q != allInParams.end(); ++q) + { + if(allInParams.size() == 1) + { + out << ("_ iceP_" + q->name + ": " + q->typeStr + (q->optional ? " = nil" : "")); + } + else + { + out << (q->name + " iceP_" + q->name + ": " + q->typeStr + (q->optional ? " = nil" : "")); + } + } + out << ("context: " + getUnqualified("Ice.Context", swiftModule) + "? = nil"); + + out << epar; + out << " throws"; + + if(allOutParams.size() > 0) + { + out << " -> " << operationReturnType(op); + } + + out << sb; + + // + // Invoke + // + out << sp; + out << nl; + if(allOutParams.size() > 0) + { + out << "return "; + } + out << "try _impl._invoke("; + + out.useCurrentPosAsIndent(); + out << "operation: \"" << op->name() << "\","; + out << nl << "mode: " << modeToString(op->sendMode()) << ","; + + if(op->format() != DefaultFormat) + { + out << nl << "format: " << opFormatTypeToString(op); + out << ","; + } + + if(allInParams.size() > 0) + { + out << nl << "write: "; + writeMarshalInParams(out, op); + out << ","; + } + + if(allOutParams.size() > 0) + { + out << nl << "read: "; + writeUnmarshalOutParams(out, op); + out << ","; + } + + if(allExceptions.size() > 0) + { + out << nl << "userException:"; + writeUnmarshalUserException(out, op); + out << ","; + } + + out << nl << "context: context)"; + out.restoreIndent(); + + out << eb; +} + +void +SwiftGenerator::writeProxyAsyncOperation(::IceUtilInternal::Output& out, const OperationPtr& op) +{ + const string opName = fixIdent(op->name() + "Async"); + + const ParamInfoList allInParams = getAllInParams(op); + const ParamInfoList allOutParams = getAllOutParams(op); + const ExceptionList allExceptions = op->throws(); + + const string swiftModule = getSwiftModule(getTopLevelModule(ContainedPtr::dynamicCast(op))); + + out << sp; + writeOpDocSummary(out, op, true, false); + out << nl << "func " << opName; + out << spar; + for(ParamInfoList::const_iterator q = allInParams.begin(); q != allInParams.end(); ++q) + { + if(allInParams.size() == 1) + { + out << ("_ iceP_" + q->name + ": " + q->typeStr + (q->optional ? " = nil" : "")); + } + else + { + out << (q->name + " iceP_" + q->name + ": " + q->typeStr + (q->optional ? " = nil" : "")); + } + } + out << "context: " + getUnqualified("Ice.Context", swiftModule) + "? = nil"; + out << "sentOn: Dispatch.DispatchQueue? = PromiseKit.conf.Q.return"; + out << "sentFlags: Dispatch.DispatchWorkItemFlags? = nil"; + out << "sent: ((Swift.Bool) -> Swift.Void)? = nil"; + + out << epar; + out << " -> PromiseKit.Promise<"; + if(allOutParams.empty()) + { + out << "Swift.Void"; + } + else + { + out << operationReturnType(op); + } + out << ">"; + + out << sb; + + // + // Invoke + // + out << sp; + out << nl << "return _impl._invokeAsync("; + + out.useCurrentPosAsIndent(); + out << "operation: \"" << op->name() << "\","; + out << nl << "mode: " << modeToString(op->sendMode()) << ","; + + if(op->format() != DefaultFormat) + { + out << nl << "format: " << opFormatTypeToString(op); + out << ","; + } + + if(allInParams.size() > 0) + { + out << nl << "write: "; + writeMarshalInParams(out, op); + out << ","; + } + + if(allOutParams.size() > 0) + { + out << nl << "read: "; + writeUnmarshalOutParams(out, op); + out << ","; + } + + if(allExceptions.size() > 0) + { + out << nl << "userException:"; + writeUnmarshalUserException(out, op); + out << ","; + } + + out << nl << "context: context,"; + out << nl << "sentOn: sentOn,"; + out << nl << "sentFlags: sentFlags,"; + out << nl << "sent: sent)"; + out.restoreIndent(); + + out << eb; +} + +void +SwiftGenerator::writeDispatchOperation(::IceUtilInternal::Output& out, const OperationPtr& op) +{ + const string opName = op->name(); + + const ParamInfoList allInParams = getAllInParams(op); + const ParamInfoList allOutParams = getAllOutParams(op); + const ExceptionList allExceptions = op->throws(); + + const string swiftModule = getSwiftModule(getTopLevelModule(ContainedPtr::dynamicCast(op))); + + out << sp; + out << nl << "func _iceD_" << opName; + out << spar; + out << ("incoming inS: " + getUnqualified("Ice.Incoming", swiftModule)); + out << ("current: " + getUnqualified("Ice.Current", swiftModule)); + out << epar; + + out << " throws"; + + out << sb; + if(allInParams.empty()) + { + out << nl << "try inS.readEmptyParams()"; + } + else + { + out << nl << "let " << operationInParamsDeclaration(op) << " = try inS.read "; + writeUnmarshalInParams(out, op); + } + + if(op->format() != DefaultFormat) + { + out << nl << "inS.setFormat(" << opFormatTypeToString(op) << ");"; + } + + out << sp; + out << nl; + if(!allOutParams.empty()) + { + out << "let " << operationReturnDeclaration(op) << " = "; + } + out << "try self." << fixIdent(opName); + + out << spar; + for(ParamInfoList::const_iterator q = allInParams.begin(); q != allInParams.end(); ++q) + { + out << (q->name + ": iceP_" + q->name); + } + out << "current: current"; + out << epar; + + out << sp; + if(allOutParams.empty()) + { + out << nl << "inS.writeEmptyParams()"; + } + else + { + out << nl << "inS.write "; + writeMarshalOutParams(out, op); + } + + out << eb; +} + +void +SwiftGenerator::writeDispatchAsyncOperation(::IceUtilInternal::Output& out, const OperationPtr& op) +{ + const ParamInfoList allInParams = getAllInParams(op); + const ParamInfoList allOutParams = getAllOutParams(op); + + const string swiftModule = getSwiftModule(getTopLevelModule(ContainedPtr::dynamicCast(op))); + + out << sp; + out << nl << "func _iceD_" << op->name(); + out << spar; + out << ("incoming inS: " + getUnqualified("Ice.Incoming", swiftModule)); + out << ("current: " + getUnqualified("Ice.Current", swiftModule)); + out << epar; + + out << " throws"; + + out << sb; + if(allInParams.empty()) + { + out << nl << "try inS.readEmptyParams()"; + } + else + { + out << nl << "let " << operationInParamsDeclaration(op) << " = try inS.read "; + writeUnmarshalInParams(out, op); + } + + if(op->format() != DefaultFormat) + { + out << nl << "inS.setFormat(" << opFormatTypeToString(op) << ");"; + } + + out << sp; + out << nl; + out << "firstly"; + out << sb; + out << nl << fixIdent(op->name() + (operationIsAmd(op) ? "Async" : "")); + + out << spar; + for(ParamInfoList::const_iterator q = allInParams.begin(); q != allInParams.end(); ++q) + { + out << (q->name + ": iceP_" + q->name); + } + out << "current: current"; + out << epar; + out << eb; + + out << ".done(on: nil)"; + out << sb; + if(allOutParams.empty()) + { + out << nl << "inS.writeEmptyParams()"; + } + else + { + out << " " << operationReturnDeclaration(op) << " in"; + out << nl << "inS.write "; + writeMarshalOutParams(out, op); + } + out << eb; + + out << ".catch(on: nil)"; + out << sb; + out << " err in"; + out << nl << "inS.exception(err)"; + out << eb; + + out << eb; +} + +bool +SwiftGenerator::MetaDataVisitor::visitClassDefStart(const ClassDefPtr& p) +{ + validate(p); + return true; +} + +bool +SwiftGenerator::MetaDataVisitor::visitExceptionStart(const ExceptionPtr& p) +{ + validate(p); + return true; +} + +bool +SwiftGenerator::MetaDataVisitor::visitStructStart(const StructPtr& p) +{ + validate(p); + return true; +} + +void +SwiftGenerator::MetaDataVisitor::visitSequence(const SequencePtr& p) +{ + validate(p); +} + +void +SwiftGenerator::MetaDataVisitor::visitDictionary(const DictionaryPtr& p) +{ + validate(p); +} + +void +SwiftGenerator::MetaDataVisitor::visitEnum(const EnumPtr& p) +{ + validate(p); +} + +void +SwiftGenerator::MetaDataVisitor::visitConst(const ConstPtr& p) +{ + validate(p); +} + +void +SwiftGenerator::MetaDataVisitor::validate(const ContainedPtr&) +{ +} diff --git a/cpp/src/slice2swift/SwiftUtil.h b/cpp/src/slice2swift/SwiftUtil.h new file mode 100644 index 00000000000..3a4b338fba3 --- /dev/null +++ b/cpp/src/slice2swift/SwiftUtil.h @@ -0,0 +1,184 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#ifndef SWIFT_UTIL_H +#define SWIFT_UTIL_H + +#include <Slice/Parser.h> +#include <IceUtil/OutputUtil.h> + +typedef std::list<std::pair<std:: string, std::string> > StringPairList; + +namespace Slice +{ + +const int TypeContextInParam = 1; +const int TypeContextProtocol = 2; +const int TypeContextLocal = 32; + +std::string getSwiftModule(const ModulePtr&, std::string&); +std::string getSwiftModule(const ModulePtr&); +ModulePtr getTopLevelModule(const ContainedPtr&); +ModulePtr getTopLevelModule(const TypePtr&); + +std::string fixIdent(const std::string&); +StringList splitScopedName(const std::string&); + +struct ParamInfo +{ + std::string name; + TypePtr type; + std::string typeStr; + bool optional; + int tag; + ParamDeclPtr param; // 0 == return value +}; + +typedef std::list<ParamInfo> ParamInfoList; + +struct DocElements +{ + StringList overview; + bool deprecated; + StringList deprecateReason; + StringList misc; + StringList seeAlso; + StringList returns; + std::map<std::string, StringList> params; + std::map<std::string, StringList> exceptions; +}; + +class SwiftGenerator : private IceUtil::noncopyable +{ +public: + + virtual ~SwiftGenerator() {}; + + static void validateMetaData(const UnitPtr&); + +protected: + + void trimLines(StringList&); + StringList splitComment(const std::string&); + bool parseCommentLine(const std::string&, const std::string&, bool, std::string&, std::string&); + DocElements parseComment(const ContainedPtr&); + void writeDocLines(IceUtilInternal::Output&, const StringList&, bool commentFirst = true, + const std::string& space = " "); + void writeDocSentence(IceUtilInternal::Output&, const StringList&); + void writeSeeAlso(IceUtilInternal::Output&, const StringList&, const ContainerPtr&); + void writeDocSummary(IceUtilInternal::Output&, const ContainedPtr&); + void writeOpDocSummary(IceUtilInternal::Output&, const OperationPtr&, bool, bool, bool = false); + + void writeProxyDocSummary(IceUtilInternal::Output&, const ClassDefPtr&, const std::string&); + void writeServantDocSummary(IceUtilInternal::Output&, const ClassDefPtr&, const std::string&); + void writeMemberDoc(IceUtilInternal::Output&, const DataMemberPtr&); + + std::string paramLabel(const std::string&, const ParamDeclList&); + std::string operationReturnType(const OperationPtr&, int typeCtx = 0); + bool operationReturnIsTuple(const OperationPtr&); + std::string operationReturnDeclaration(const OperationPtr&); + std::string operationInParamsDeclaration(const OperationPtr&); + + bool operationIsAmd(const OperationPtr&); + + ParamInfoList getAllInParams(const OperationPtr&, int = 0); + void getInParams(const OperationPtr&, ParamInfoList&, ParamInfoList&); + + ParamInfoList getAllOutParams(const OperationPtr&, int = 0); + void getOutParams(const OperationPtr&, ParamInfoList&, ParamInfoList&); + + std::string typeToString(const TypePtr&, const ContainedPtr&, const StringList& = StringList(), bool = false, + int = 0); + + std::string getAbsolute(const TypePtr&); + std::string getAbsolute(const ProxyPtr&); + std::string getAbsolute(const ClassDeclPtr&); + std::string getAbsolute(const ClassDefPtr&); + std::string getAbsolute(const StructPtr&); + std::string getAbsolute(const ExceptionPtr&); + std::string getAbsolute(const EnumPtr&); + std::string getAbsolute(const ConstPtr&); + std::string getAbsolute(const SequencePtr&); + std::string getAbsolute(const DictionaryPtr&); + + std::string getUnqualified(const std::string&, const std::string&); + std::string modeToString(Operation::Mode); + std::string getOptionalFormat(const TypePtr&); + + bool isNullableType(const TypePtr&); + bool isProxyType(const TypePtr&); + bool isClassType(const TypePtr&); + + bool containsClassMembers(const StructPtr&); + + std::string getValue(const std::string&, const TypePtr&); + void writeConstantValue(IceUtilInternal::Output& out, const TypePtr&, const SyntaxTreeBasePtr&, + const std::string&, const StringList&, const std::string&, bool optional = false); + void writeDefaultInitializer(IceUtilInternal::Output&, bool, bool); + void writeMemberwiseInitializer(IceUtilInternal::Output&, const DataMemberList&, const ContainedPtr&); + void writeMemberwiseInitializer(IceUtilInternal::Output&, const DataMemberList&, const DataMemberList&, + const DataMemberList&, const ContainedPtr&, + bool local = false, + bool rootClass = false, + const StringPairList& = StringPairList()); + void writeMembers(IceUtilInternal::Output&, const DataMemberList&, const ContainedPtr&, int = 0); + + void writeMarshalUnmarshalCode(::IceUtilInternal::Output&, + const TypePtr&, + const ContainedPtr&, + const std::string&, + bool, + int = -1); + + bool usesMarshalHelper(const TypePtr&); + void writeMarshalInParams(::IceUtilInternal::Output&, const OperationPtr&); + void writeMarshalOutParams(::IceUtilInternal::Output&, const OperationPtr&); + void writeUnmarshalInParams(::IceUtilInternal::Output&, const OperationPtr&); + void writeUnmarshalOutParams(::IceUtilInternal::Output&, const OperationPtr&); + void writeUnmarshalUserException(::IceUtilInternal::Output& out, const OperationPtr&); + void writeSwiftAttributes(::IceUtilInternal::Output&, const StringList&); + void writeProxyOperation(::IceUtilInternal::Output&, const OperationPtr&); + void writeProxyAsyncOperation(::IceUtilInternal::Output&, const OperationPtr&); + void writeDispatchOperation(::IceUtilInternal::Output&, const OperationPtr&); + void writeDispatchAsyncOperation(::IceUtilInternal::Output&, const OperationPtr&); + +private: + + class MetaDataVisitor : public ParserVisitor + { + public: + + virtual bool visitModuleStart(const ModulePtr&); + virtual bool visitClassDefStart(const ClassDefPtr&); + virtual bool visitExceptionStart(const ExceptionPtr&); + virtual bool visitStructStart(const StructPtr&); + virtual void visitSequence(const SequencePtr&); + virtual void visitDictionary(const DictionaryPtr&); + virtual void visitEnum(const EnumPtr&); + virtual void visitConst(const ConstPtr&); + + private: + + void validate(const ContainedPtr&); + + typedef std::map<std::string, std::string> ModuleMap; + typedef std::map<std::string, ModuleMap> ModulePrefix; + + // + // Each Slice unit has to map all top-level modules to a single Swift module + // + ModuleMap _modules; + + // + // With a given Swift module a Slice module has to map to a single prefix + // + ModulePrefix _prefixes; + + static const std::string _msg; + }; +}; + +} + +#endif diff --git a/cpp/test/IceUtil/stacktrace/StackTrace.debug.macOS b/cpp/test/IceUtil/stacktrace/StackTrace.debug.macOS index d583b1ae244..0cba425ebe5 100644 --- a/cpp/test/IceUtil/stacktrace/StackTrace.debug.macOS +++ b/cpp/test/IceUtil/stacktrace/StackTrace.debug.macOS @@ -1,7 +1,7 @@ - 0 IceUtil::Exception::Exception(char const*, int) in libIce.3.7.2.dylib - 1 IceUtil::ExceptionHelper<IceUtil::NullHandleException>::ExceptionHelper(char const*, int) in libIce.3.7.2.dylib - 2 IceUtil::NullHandleException::NullHandleException(char const*, int) in libIce.3.7.2.dylib - 3 IceUtil::NullHandleException::NullHandleException(char const*, int) in libIce.3.7.2.dylib + 0 IceUtil::Exception::Exception(char const*, int) in libIce.3.7b1.dylib + 1 IceUtil::ExceptionHelper<IceUtil::NullHandleException>::ExceptionHelper(char const*, int) in libIce.3.7b1.dylib + 2 IceUtil::NullHandleException::NullHandleException(char const*, int) in libIce.3.7b1.dylib + 3 IceUtil::NullHandleException::NullHandleException(char const*, int) in libIce.3.7b1.dylib 4 (anonymous namespace)::Thrower::fifth() in client 5 (anonymous namespace)::Thrower::forth() in client 6 (anonymous namespace)::Thrower::third() in client diff --git a/cpp/test/IceUtil/stacktrace/StackTrace.release-xcode10.macOS b/cpp/test/IceUtil/stacktrace/StackTrace.release-xcode10.macOS index 42e5366de0f..cf223bb842d 100644 --- a/cpp/test/IceUtil/stacktrace/StackTrace.release-xcode10.macOS +++ b/cpp/test/IceUtil/stacktrace/StackTrace.release-xcode10.macOS @@ -1,4 +1,4 @@ - 0 IceUtil::NullHandleException::NullHandleException(char const*, int) in libIce.3.7.2.dylib + 0 IceUtil::NullHandleException::NullHandleException(char const*, int) in libIce.3.7b1.dylib 1 (anonymous namespace)::Thrower::fifth() in client 2 (anonymous namespace)::Thrower::forth() in client 3 (anonymous namespace)::Thrower::third() in client diff --git a/cpp/test/IceUtil/stacktrace/StackTrace.release-xcode9.macOS b/cpp/test/IceUtil/stacktrace/StackTrace.release-xcode9.macOS index 54d694c8b55..282221ff313 100644 --- a/cpp/test/IceUtil/stacktrace/StackTrace.release-xcode9.macOS +++ b/cpp/test/IceUtil/stacktrace/StackTrace.release-xcode9.macOS @@ -1,3 +1,3 @@ - 0 IceUtil::NullHandleException::NullHandleException(char const*, int) in libIce.3.7.2.dylib + 0 IceUtil::NullHandleException::NullHandleException(char const*, int) in libIce.3.7b1.dylib 1 Client::run(int, char**) in client 2 int Test::runTest<Client>(int, char**) in client diff --git a/cpp/test/ios/controller/C++ Test Controller.xcodeproj/project.pbxproj b/cpp/test/ios/controller/C++ Test Controller.xcodeproj/project.pbxproj index 8cb6801527f..89d6f143f07 100644 --- a/cpp/test/ios/controller/C++ Test Controller.xcodeproj/project.pbxproj +++ b/cpp/test/ios/controller/C++ Test Controller.xcodeproj/project.pbxproj @@ -55,7 +55,7 @@ "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).cpp", "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).h", ); - script = "#export ICE_BIN_DIST=all\n../../../../scripts/ice-builder-xcode-wrapper --cpp"; + script = "#export ICE_BIN_DIST=all\n../../../../scripts/ice-builder-xcode-wrapper --cpp\n"; }; 14E3982D1E01B14B00A89291 /* PBXBuildRule */ = { isa = PBXBuildRule; @@ -369,6 +369,7 @@ developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( + English, en, Base, ); diff --git a/cpp/test/ios/controller/Classes/Base.lproj/Main.storyboard b/cpp/test/ios/controller/Classes/Base.lproj/Main.storyboard index 1e639d92518..2f4327ba126 100644 --- a/cpp/test/ios/controller/Classes/Base.lproj/Main.storyboard +++ b/cpp/test/ios/controller/Classes/Base.lproj/Main.storyboard @@ -1,15 +1,15 @@ <?xml version="1.0" encoding="UTF-8"?> -<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14113" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="BYZ-38-t0r"> +<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14490.70" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="BYZ-38-t0r"> <device id="retina4_7" orientation="portrait"> <adaptation id="fullscreen"/> </device> <dependencies> <deployment identifier="iOS"/> - <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14088"/> + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14490.49"/> <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> </dependencies> <scenes> - <!--View Controller--> + <!--Controller View--> <scene sceneID="tne-QT-ifu"> <objects> <viewController id="BYZ-38-t0r" customClass="ControllerView" sceneMemberID="viewController"> diff --git a/csharp/src/Ice/PropertyNames.cs b/csharp/src/Ice/PropertyNames.cs index 931f25d2b85..ec7bd9c0f0a 100644 --- a/csharp/src/Ice/PropertyNames.cs +++ b/csharp/src/Ice/PropertyNames.cs @@ -1,7 +1,7 @@ // // Copyright (c) ZeroC, Inc. All rights reserved. // -// Generated by makeprops.py from file ../config/PropertyNames.xml, Thu Oct 25 22:10:11 2018 +// Generated by makeprops.py from file ../config/PropertyNames.xml, Wed May 29 21:06:31 2019 // IMPORTANT: Do not edit this file -- any edits made here will be lost! @@ -177,6 +177,7 @@ namespace IceInternal new Property(@"^Ice\.TCP\.RcvSize$", false, null), new Property(@"^Ice\.TCP\.SndSize$", false, null), new Property(@"^Ice\.UseApplicationClassLoader$", false, null), + new Property(@"^Ice\.UseOSLog$", false, null), new Property(@"^Ice\.UseSyslog$", false, null), new Property(@"^Ice\.UseSystemdJournal$", false, null), new Property(@"^Ice\.Warn\.AMICallback$", false, null), diff --git a/csharp/src/Ice/Proxy.cs b/csharp/src/Ice/Proxy.cs index 1de18d13ce5..ba7fed5fe1f 100644 --- a/csharp/src/Ice/Proxy.cs +++ b/csharp/src/Ice/Proxy.cs @@ -515,7 +515,7 @@ namespace Ice /// <summary> /// Returns whether this proxy communicates only via secure endpoints. /// </summary> - /// <returns>True if this proxy communicates only vi secure endpoints; false, otherwise.</returns> + /// <returns>True if this proxy communicates only via secure endpoints; false, otherwise.</returns> bool ice_isSecure(); /// <summary> diff --git a/csharp/src/Ice/Util.cs b/csharp/src/Ice/Util.cs index dfd3691a743..155c5c7e06d 100644 --- a/csharp/src/Ice/Util.cs +++ b/csharp/src/Ice/Util.cs @@ -545,7 +545,7 @@ namespace Ice /// Converts a string to an encoding version. /// </summary> /// <param name="version">The string to convert.</param> - /// <returns>The converted object identity.</returns> + /// <returns>The converted encoding version.</returns> public static EncodingVersion stringToEncodingVersion(string version) { byte major, minor; diff --git a/csharp/src/Ice/Value.cs b/csharp/src/Ice/Value.cs index 107554398f2..9ba12086345 100644 --- a/csharp/src/Ice/Value.cs +++ b/csharp/src/Ice/Value.cs @@ -39,7 +39,7 @@ namespace Ice } /// <summary> - /// This Ice run time invokes this method vafter unmarshaling an object's data members. This allows a + /// This Ice run time invokes this method after unmarshaling an object's data members. This allows a /// subclass to override this method in order to perform additional initialization. /// </summary> public virtual void ice_postUnmarshal() diff --git a/java-compat/src/Ice/src/main/java/IceInternal/PropertyNames.java b/java-compat/src/Ice/src/main/java/IceInternal/PropertyNames.java index 44147ce3ff6..a7b90d86ee7 100644 --- a/java-compat/src/Ice/src/main/java/IceInternal/PropertyNames.java +++ b/java-compat/src/Ice/src/main/java/IceInternal/PropertyNames.java @@ -1,7 +1,7 @@ // // Copyright (c) ZeroC, Inc. All rights reserved. // -// Generated by makeprops.py from file ../config/PropertyNames.xml, Thu Oct 25 22:10:11 2018 +// Generated by makeprops.py from file ../config/PropertyNames.xml, Wed May 29 21:06:31 2019 // IMPORTANT: Do not edit this file -- any edits made here will be lost! @@ -177,6 +177,7 @@ public final class PropertyNames new Property("Ice\\.TCP\\.RcvSize", false, null), new Property("Ice\\.TCP\\.SndSize", false, null), new Property("Ice\\.UseApplicationClassLoader", false, null), + new Property("Ice\\.UseOSLog", false, null), new Property("Ice\\.UseSyslog", false, null), new Property("Ice\\.UseSystemdJournal", false, null), new Property("Ice\\.Warn\\.AMICallback", false, null), diff --git a/java/src/Ice/src/main/java/com/zeroc/IceInternal/PropertyNames.java b/java/src/Ice/src/main/java/com/zeroc/IceInternal/PropertyNames.java index f104f2b48f6..a813a8e9dd4 100644 --- a/java/src/Ice/src/main/java/com/zeroc/IceInternal/PropertyNames.java +++ b/java/src/Ice/src/main/java/com/zeroc/IceInternal/PropertyNames.java @@ -1,7 +1,7 @@ // // Copyright (c) ZeroC, Inc. All rights reserved. // -// Generated by makeprops.py from file ../config/PropertyNames.xml, Thu Oct 25 22:10:11 2018 +// Generated by makeprops.py from file ../config/PropertyNames.xml, Wed May 29 21:06:31 2019 // IMPORTANT: Do not edit this file -- any edits made here will be lost! @@ -177,6 +177,7 @@ public final class PropertyNames new Property("Ice\\.TCP\\.RcvSize", false, null), new Property("Ice\\.TCP\\.SndSize", false, null), new Property("Ice\\.UseApplicationClassLoader", false, null), + new Property("Ice\\.UseOSLog", false, null), new Property("Ice\\.UseSyslog", false, null), new Property("Ice\\.UseSystemdJournal", false, null), new Property("Ice\\.Warn\\.AMICallback", false, null), diff --git a/js/src/Ice/PropertyNames.js b/js/src/Ice/PropertyNames.js index 6b30877197b..933c5ec7580 100644 --- a/js/src/Ice/PropertyNames.js +++ b/js/src/Ice/PropertyNames.js @@ -1,7 +1,7 @@ // // Copyright (c) ZeroC, Inc. All rights reserved. // -// Generated by makeprops.py from file ../config/PropertyNames.xml, Thu Oct 25 22:10:11 2018 +// Generated by makeprops.py from file ../config/PropertyNames.xml, Wed May 29 21:06:31 2019 // IMPORTANT: Do not edit this file -- any edits made here will be lost! @@ -180,6 +180,7 @@ PropertyNames.IceProps = new Property("/^Ice\.TCP\.RcvSize/", false, null), new Property("/^Ice\.TCP\.SndSize/", false, null), new Property("/^Ice\.UseApplicationClassLoader/", false, null), + new Property("/^Ice\.UseOSLog/", false, null), new Property("/^Ice\.UseSyslog/", false, null), new Property("/^Ice\.UseSystemdJournal/", false, null), new Property("/^Ice\.Warn\.AMICallback/", false, null), diff --git a/objective-c/test/ios/controller/Objective-C Test Controller.xcodeproj/project.pbxproj b/objective-c/test/ios/controller/Objective-C Test Controller.xcodeproj/project.pbxproj index d43e557b412..c931c4e3a7a 100644 --- a/objective-c/test/ios/controller/Objective-C Test Controller.xcodeproj/project.pbxproj +++ b/objective-c/test/ios/controller/Objective-C Test Controller.xcodeproj/project.pbxproj @@ -619,16 +619,6 @@ 140C31281E02F7FF00142503 /* Tests */ = { isa = PBXGroup; children = ( - 14CF1432215A47DF00499968 /* objects */, - 140C3B801E02FCE000142503 /* metrics */, - 140C3B901E02FCE000142503 /* operations */, - 140C3B9F1E02FCE000142503 /* optional */, - 140C3BA61E02FCE000142503 /* proxy */, - 140C3BAE1E02FCE000142503 /* retry */, - 140C3BB61E02FCE000142503 /* servantLocator */, - 140C3BC11E02FCE000142503 /* services */, - 140C3BC61E02FCE000142503 /* stream */, - 140C3BC91E02FCE000142503 /* timeout */, 140C3BD01E02FCE000142503 /* acm */, 140C3BD71E02FCE000142503 /* adapterDeactivation */, 140C3BDF1E02FCE000142503 /* admin */, @@ -647,7 +637,17 @@ 140C3C411E02FCE000142503 /* interceptor */, 140C3C491E02FCE000142503 /* invoke */, 140C3C511E02FCE000142503 /* location */, + 140C3B801E02FCE000142503 /* metrics */, + 14CF1432215A47DF00499968 /* objects */, + 140C3B901E02FCE000142503 /* operations */, + 140C3B9F1E02FCE000142503 /* optional */, + 140C3BA61E02FCE000142503 /* proxy */, + 140C3BAE1E02FCE000142503 /* retry */, + 140C3BB61E02FCE000142503 /* servantLocator */, + 140C3BC11E02FCE000142503 /* services */, 140C3C5B1E02FCE000142503 /* slicing */, + 140C3BC61E02FCE000142503 /* stream */, + 140C3BC91E02FCE000142503 /* timeout */, ); name = Tests; sourceTree = "<group>"; diff --git a/scripts/Component.py b/scripts/Component.py index ea9d5a4bfcd..8ad3da16de1 100644 --- a/scripts/Component.py +++ b/scripts/Component.py @@ -106,6 +106,8 @@ class Ice(Component): "Ice/properties"]) elif isinstance(mapping, JavaScriptMapping): return ([], ["typescript/.*", "es5/*"]) + elif isinstance(mapping, SwiftMapping) and config.buildPlatform in ["iphonesimulator", "iphoneos"]: + return (["Ice/.*", "IceSSL/configuration", "Slice/*"], ["Ice/properties", "Ice/udp"]) return ([], []) def canRun(self, testId, mapping, current): @@ -234,8 +236,10 @@ for m in filter(lambda x: os.path.isdir(os.path.join(toplevel, x)), os.listdir(t Mapping.add("typescript", TypeScriptMapping(), component, "js") elif m == "objective-c" or re.match("objective-c-*", m): Mapping.add(m, ObjCMapping(), component) - elif m == "csharp" or re.match("charp-.*", m): + elif m == "csharp" or re.match("csharp-.*", m): Mapping.add("csharp", CSharpMapping(), component) + elif m == "swift" or re.match("swift-.*", m): + Mapping.add("swift", SwiftMapping(), component) if isinstance(platform, Windows): # Windows doesn't support all the mappings, we take them out here. diff --git a/scripts/Util.py b/scripts/Util.py index a8ee573f020..a324c538263 100644 --- a/scripts/Util.py +++ b/scripts/Util.py @@ -2080,8 +2080,11 @@ class RemoteProcessController(ProcessController): import Ice try: result = self.proxy.waitSuccess(timeout) - except Ice.UserException: - raise Expect.TIMEOUT("waitSuccess timeout") + except Ice.UserException as ex: + if "Timeout" in ex.reason: + raise Expect.TIMEOUT("waitSuccess timeout") + else: + raise except Ice.LocalException: raise if exitstatus != result: @@ -3794,6 +3797,58 @@ class TypeScriptMapping(JavaScriptMixin,Mapping): def _getDefaultSource(self, processType): return { "client" : "Client.ts", "serveramd" : "ServerAMD.ts", "server" : "Server.ts" }[processType] +class SwiftMapping(Mapping): + + class Config(CppBasedClientMapping.Config): + mappingName = "swift" + mappingDesc = "Swift" + + def getCommandLine(self, current, process, exe, args): + testdir = self.component.getTestDir(self) + assert(current.testcase.getPath(current).startswith(testdir)) + package = current.testcase.getPath(current)[len(testdir) + 1:].replace(os.sep, ".") + + cmd = "xcodebuild -project ice.xcodeproj -target 'TestDriver {0}' -configuration {1} -showBuildSettings".format( + "macOS", + current.config.buildConfig) + + targetBuildDir = re.search("\sTARGET_BUILD_DIR = (.*)", run(cmd)).groups(1)[0] + + return "{0}/TestDriver.app/Contents/MacOS/TestDriver {1} {2} {3}".format( + targetBuildDir, + package, + exe, + args) + + def _getDefaultSource(self, processType): + return { "client" : "Client.swift", + "server" : "Server.swift", + "serveramd" : "ServerAMD.swift", + "collocated" : "Collocated.swift" + }[processType] + + def getIOSControllerIdentity(self, current): + category = "iPhoneSimulator" if current.config.buildPlatform == "iphonesimulator" else "iPhoneOS" + return "{0}/com.zeroc.Swift-Test-Controller".format(category) + + def getIOSAppFullPath(self, current): + cmd = "xcodebuild -project ice.xcodeproj \ + -target 'TestDriver iOS' \ + -configuration {0} \ + -showBuildSettings \ + -sdk {1}".format(current.config.buildConfig, current.config.buildPlatform) + targetBuildDir = re.search("\sTARGET_BUILD_DIR = (.*)", run(cmd)).groups(1)[0] + return "{0}/TestDriver.app".format(targetBuildDir) + + def getSSLProps(self, process, current): + props = Mapping.getByName("cpp").getSSLProps(process, current) + props["IceSSL.DefaultDir"] = ("certs" if current.config.buildPlatform == "iphoneos" else + os.path.join(self.component.getSourceDir(), "certs")) + return props + + def getPluginEntryPoint(self, plugin, process, current): + return Mapping.getByName("cpp").getPluginEntryPoint(plugin, process, current) + # # Instantiate platform global variable # diff --git a/slice/Glacier2/Metrics.ice b/slice/Glacier2/Metrics.ice index ad7789d567a..f592e302a60 100644 --- a/slice/Glacier2/Metrics.ice +++ b/slice/Glacier2/Metrics.ice @@ -24,7 +24,7 @@ [["java:package:com.zeroc"]] #endif -["objc:prefix:ICEMX"] +["objc:prefix:ICEMX", "swift:module:Glacier2:MX"] module IceMX { diff --git a/slice/Ice/Communicator.ice b/slice/Ice/Communicator.ice index 852eb2a33a1..a7b7b3ccf2f 100644 --- a/slice/Ice/Communicator.ice +++ b/slice/Ice/Communicator.ice @@ -89,7 +89,7 @@ local interface Communicator * @see ObjectAdapter#destroy * **/ - ["cpp:noexcept", "js:async"] void destroy(); + ["cpp:noexcept", "swift:noexcept", "js:async"] void destroy(); /** * @@ -108,7 +108,7 @@ local interface Communicator * @see ObjectAdapter#deactivate * **/ - ["cpp:noexcept", "js:async"] void shutdown(); + ["cpp:noexcept", "swift:noexcept", "js:async"] void shutdown(); /** * @@ -129,7 +129,7 @@ local interface Communicator * @see ObjectAdapter#waitForDeactivate * **/ - ["cpp:noexcept", "js:async"] void waitForShutdown(); + ["cpp:noexcept", "swift:noexcept", "js:async"] void waitForShutdown(); /** * @@ -140,7 +140,7 @@ local interface Communicator * @see #shutdown * **/ - ["cpp:const", "cpp:noexcept"] bool isShutdown(); + ["cpp:const", "cpp:noexcept", "swift:noexcept"] bool isShutdown(); /** * @@ -175,7 +175,7 @@ local interface Communicator * @see #stringToProxy * **/ - ["cpp:const"] string proxyToString(Object* obj); + ["cpp:const", "swift:noexcept"] string proxyToString(Object* obj); /** * @@ -206,8 +206,10 @@ local interface Communicator * @return The property set. * **/ - ["cpp:const"] PropertyDict proxyToProperty(Object* proxy, string property); + ["cpp:const", "swift:noexcept", "swift:nonnull"] PropertyDict proxyToProperty(["swift:nonnull"] Object* proxy, + string property); +#ifndef __SLICE2SWIFT__ /** * * Convert a string into an identity. If the string does not parse @@ -222,6 +224,7 @@ local interface Communicator **/ ["cpp:const", "deprecate:stringToIdentity() is deprecated, use the static stringToIdentity() method instead."] Identity stringToIdentity(string str); +#endif /** * @@ -234,7 +237,7 @@ local interface Communicator * @see #stringToIdentity * **/ - ["cpp:const"] string identityToString(Identity ident); + ["cpp:const", "swift:noexcept"] string identityToString(Identity ident); /** * @@ -258,7 +261,7 @@ local interface Communicator * @see Properties * **/ - ["js:async"] ObjectAdapter createObjectAdapter(string name); + ["js:async", "swift:nonnull"] ObjectAdapter createObjectAdapter(string name); /** * @@ -281,7 +284,7 @@ local interface Communicator * @see Properties * **/ - ["js:async"] ObjectAdapter createObjectAdapterWithEndpoints(string name, string endpoints); + ["js:async", "swift:nonnull"] ObjectAdapter createObjectAdapterWithEndpoints(string name, string endpoints); /** * @@ -302,8 +305,10 @@ local interface Communicator * @see Properties * **/ - ["js:async"] ObjectAdapter createObjectAdapterWithRouter(string name, ["objc:param:router"] Router* rtr); + ["js:async", "swift:nonnull"] ObjectAdapter + createObjectAdapterWithRouter(string name, ["objc:param:router", "swift:nonnull"] Router* rtr); +#if !defined(__SLICE2SWIFT__) /** * * Add an object factory to this communicator. Installing a @@ -374,6 +379,8 @@ local interface Communicator ["cpp:const", "cpp:noexcept", "deprecate:findObjectFactory() is deprecated, use ValueFactoryManager::find() instead."] ObjectFactory findObjectFactory(string id); +#endif + /** * Get the implicit context associated with this communicator. * @@ -382,7 +389,8 @@ local interface Communicator * or is set to None. * **/ - ["cpp:const", "cpp:noexcept"] ImplicitContext getImplicitContext(); + ["cpp:const", "cpp:noexcept", "swift:noexcept", "swift:nonnull"] + ImplicitContext getImplicitContext(); /** * @@ -393,7 +401,7 @@ local interface Communicator * @see Properties * **/ - ["cpp:const", "cpp:noexcept"] Properties getProperties(); + ["cpp:const", "cpp:noexcept", "swift:noexcept", "swift:nonnull"] Properties getProperties(); /** * @@ -404,9 +412,9 @@ local interface Communicator * @see Logger * **/ - ["cpp:const", "cpp:noexcept"] Logger getLogger(); + ["cpp:const", "cpp:noexcept", "swift:noexcept", "swift:nonnull"] Logger getLogger(); -#ifndef __SLICE2JS__ +#if !defined(__SLICE2SWIFT__) && !defined(__SLICE2JS__) /** * * Get the observer resolver object for this communicator. @@ -427,7 +435,7 @@ local interface Communicator * @see Router * **/ - ["cpp:const"] Router* getDefaultRouter(); + ["cpp:const", "swift:noexcept"] Router* getDefaultRouter(); /** * @@ -446,7 +454,7 @@ local interface Communicator * @see Router * **/ - void setDefaultRouter(Router* rtr); + ["swift:noexcept"] void setDefaultRouter(Router* rtr); /** * @@ -458,7 +466,7 @@ local interface Communicator * @see Locator * **/ - ["cpp:const"] Locator* getDefaultLocator(); + ["cpp:const", "swift:noexcept"] Locator* getDefaultLocator(); /** * @@ -479,9 +487,9 @@ local interface Communicator * @see ObjectAdapter#setLocator * **/ - void setDefaultLocator(Locator* loc); + ["swift:noexcept"] void setDefaultLocator(Locator* loc); -#ifndef __SLICE2JS__ +#if !defined(__SLICE2SWIFT__) && !defined(__SLICE2JS__) /** * * Get the plug-in manager for this communicator. @@ -503,7 +511,8 @@ local interface Communicator * @see ValueFactoryManager * **/ - ["cpp:const", "cpp:noexcept"] ValueFactoryManager getValueFactoryManager(); + ["cpp:const", "cpp:noexcept", "swift:noexcept", "swift:nonnull"] + ValueFactoryManager getValueFactoryManager(); /** * @@ -537,7 +546,7 @@ local interface Communicator * @see #getAdmin * **/ - Object* createAdmin(ObjectAdapter adminAdapter, Identity adminId); + ["swift:nonnull"] Object* createAdmin(ObjectAdapter adminAdapter, Identity adminId); /** * @@ -568,7 +577,7 @@ local interface Communicator * @param facet The name of the new Admin facet. * **/ - void addAdminFacet(Object servant, string facet); + void addAdminFacet(["swift:nonnull"] Object servant, string facet); /** * @@ -580,7 +589,7 @@ local interface Communicator * @return The servant associated with this Admin facet. * **/ - Object removeAdminFacet(string facet); + ["swift:nonnull", "swift:attribute:@discardableResult"] Object removeAdminFacet(string facet); /** * @@ -591,7 +600,7 @@ local interface Communicator * null if no facet is registered with the given name. * **/ - Object findAdminFacet(string facet); + ["swift:noexcept"] Object findAdminFacet(string facet); /** * @@ -603,7 +612,31 @@ local interface Communicator * @see #findAdminFacet * **/ - FacetMap findAllAdminFacets(); + ["swift:noexcept"] FacetMap findAllAdminFacets(); +#endif + +#if defined(__SLICE2SWIFT__) || defined(ICE_SWIFT) + /** + * + * Returns the client dispatch queue. + * + * @return The dispatch queue associated wih this Communicator's + * client thread pool. + * + **/ + ["cpp:const", "swift:nonnull", "cpp:type:dispatch_queue_t", "swift:type:Dispatch.DispatchQueue"] + LocalObject getClientDispatchQueue(); + + /** + * + * Returns the server dispatch queue. + * + * @return The dispatch queue associated wih the Communicator's + * server thread pool. + * + **/ + ["cpp:const", "swift:nonnull", "cpp:type:dispatch_queue_t", "swift:type:Dispatch.DispatchQueue"] + LocalObject getServerDispatchQueue(); #endif } diff --git a/slice/Ice/Connection.ice b/slice/Ice/Connection.ice index a6fefdbe073..76a5ff45229 100644 --- a/slice/Ice/Connection.ice +++ b/slice/Ice/Connection.ice @@ -114,7 +114,7 @@ local interface CloseCallback * * @param con The connection that closed. **/ - void closed(Connection con); + ["swift:noexcept"] void closed(Connection con); } /** @@ -135,7 +135,7 @@ local interface HeartbeatCallback * * @param con The connection on which a heartbeat was received. **/ - void heartbeat(Connection con); + ["swift:noexcept"] void heartbeat(Connection con); } /** @@ -217,6 +217,7 @@ local enum ConnectionClose * The user-level interface to a connection. * **/ +["swift:inherits:Swift.CustomStringConvertible"] local interface Connection { /** @@ -245,7 +246,7 @@ local interface Connection * * @see #setAdapter **/ - ["cpp:const"] Object* createProxy(Identity id); + ["cpp:const", "swift:nonnull"] Object* createProxy(Identity id); /** * @@ -280,7 +281,7 @@ local interface Connection * @see #setAdapter * **/ - ["cpp:const", "cpp:noexcept"] ObjectAdapter getAdapter(); + ["cpp:const", "cpp:noexcept", "swift:noexcept"] ObjectAdapter getAdapter(); /** * @@ -289,7 +290,7 @@ local interface Connection * @return The endpoint from which the connection was created. * **/ - ["cpp:const", "cpp:noexcept"] Endpoint getEndpoint(); + ["cpp:const", "cpp:noexcept", "swift:noexcept", "swift:nonnull"] Endpoint getEndpoint(); /** * @@ -324,7 +325,7 @@ local interface Connection * @param callback The heartbeat callback object. * **/ - void setHeartbeatCallback(HeartbeatCallback callback); + ["swift:noexcept"] void setHeartbeatCallback(HeartbeatCallback callback); /** * @@ -337,15 +338,14 @@ local interface Connection * * Set the active connection management parameters. * - * @param timeout The timeout value in seconds. It must be positive or 0, if a negative - * value is given, an invalid argument exception will be raised. + * @param timeout The timeout value in seconds, must be >= 0 * * @param close The close condition * * @param heartbeat The hertbeat condition * **/ - ["java:optional"] + ["swift:noexcept", "java:optional"] void setACM(optional(1) int timeout, optional(2) ACMClose close, optional(3) ACMHeartbeat heartbeat); /** @@ -355,7 +355,7 @@ local interface Connection * @return The ACM parameters. * **/ - ["cpp:noexcept"] ACM getACM(); + ["cpp:noexcept", "swift:noexcept"] ACM getACM(); /** * @@ -365,7 +365,7 @@ local interface Connection * @return The type of the connection. * **/ - ["cpp:const", "cpp:noexcept"] string type(); + ["cpp:const", "cpp:noexcept", "swift:noexcept"] string type(); /** * @@ -374,7 +374,7 @@ local interface Connection * @return The connection's timeout. * **/ - ["cpp:const", "cpp:noexcept"] int timeout(); + ["cpp:const", "cpp:noexcept", "swift:noexcept"] int timeout(); /** * @@ -385,7 +385,7 @@ local interface Connection * text. * **/ - ["cpp:const", "cpp:noexcept"] string toString(); + ["cpp:const", "cpp:noexcept", "swift:noexcept"] string toString(); /** * @@ -394,7 +394,7 @@ local interface Connection * @return The connection information. * **/ - ["cpp:const"] ConnectionInfo getInfo(); + ["cpp:const", "swift:nonnull"] ConnectionInfo getInfo(); /** * diff --git a/slice/Ice/Endpoint.ice b/slice/Ice/Endpoint.ice index 46b4afe6b5e..e723e416610 100644 --- a/slice/Ice/Endpoint.ice +++ b/slice/Ice/Endpoint.ice @@ -131,7 +131,7 @@ local class EndpointInfo * @return The endpoint type. * **/ - ["cpp:const", "cpp:noexcept"] short type(); + ["cpp:const", "cpp:noexcept", "swift:noexcept"] short type(); /** * @@ -140,7 +140,7 @@ local class EndpointInfo * @return True for a datagram endpoint. * **/ - ["cpp:const", "cpp:noexcept"] bool datagram(); + ["cpp:const", "cpp:noexcept", "swift:noexcept"] bool datagram(); /** * @@ -149,7 +149,7 @@ local class EndpointInfo * @return True for a secure endpoint. * **/ - ["cpp:const", "cpp:noexcept"] bool secure(); + ["cpp:const", "cpp:noexcept", "swift:noexcept"] bool secure(); } /** @@ -157,7 +157,7 @@ local class EndpointInfo * The user-level interface to an endpoint. * **/ -["cpp:comparable", "js:comparable"] +["cpp:comparable", "js:comparable", "swift:inherits:Swift.CustomStringConvertible"] local interface Endpoint { /** @@ -167,7 +167,7 @@ local interface Endpoint * @return The string representation of the endpoint. * **/ - ["cpp:const", "cpp:noexcept"] string toString(); + ["cpp:const", "cpp:noexcept", "swift:noexcept"] string toString(); /** * @@ -176,7 +176,7 @@ local interface Endpoint * @return The endpoint information class. * **/ - ["cpp:const", "cpp:noexcept"] EndpointInfo getInfo(); + ["cpp:const", "cpp:noexcept", "swift:noexcept"] EndpointInfo getInfo(); } /** diff --git a/slice/Ice/EndpointF.ice b/slice/Ice/EndpointF.ice index 07918041a44..3bc4a19d4a1 100644 --- a/slice/Ice/EndpointF.ice +++ b/slice/Ice/EndpointF.ice @@ -37,6 +37,6 @@ local interface Endpoint; * A sequence of endpoints. * **/ -local sequence<Endpoint> EndpointSeq; +["swift:nonnull"] local sequence<Endpoint> EndpointSeq; } diff --git a/slice/Ice/FacetMap.ice b/slice/Ice/FacetMap.ice index 53ba7ada4a5..17775b3605c 100644 --- a/slice/Ice/FacetMap.ice +++ b/slice/Ice/FacetMap.ice @@ -30,6 +30,6 @@ module Ice * A mapping from facet name to servant. * **/ -local dictionary<string, Object> FacetMap; +local dictionary<string, ["swift:nonnull"] Object> FacetMap; } diff --git a/slice/Ice/ImplicitContext.ice b/slice/Ice/ImplicitContext.ice index 4fe9eda8bad..078a729918c 100644 --- a/slice/Ice/ImplicitContext.ice +++ b/slice/Ice/ImplicitContext.ice @@ -60,7 +60,7 @@ local interface ImplicitContext * @return A copy of the underlying context. * **/ - ["cpp:const"] Context getContext(); + ["cpp:const", "swift:noexcept"] Context getContext(); /** * Set the underlying context. @@ -68,7 +68,7 @@ local interface ImplicitContext * @param newContext The new context. * **/ - void setContext(Context newContext); + ["swift:noexcept"] void setContext(Context newContext); /** * Check if this key has an associated value in the underlying context. @@ -78,7 +78,7 @@ local interface ImplicitContext * @return True if the key has an associated value, False otherwise. * **/ - ["cpp:const"] bool containsKey(string key); + ["cpp:const", "swift:noexcept"] bool containsKey(string key); /** * Get the value associated with the given key in the underlying context. @@ -91,7 +91,7 @@ local interface ImplicitContext * @return The value associated with the key. * **/ - ["cpp:const"] string get(string key); + ["cpp:const", "swift:noexcept"] string get(string key); /** * Create or update a key/value entry in the underlying context. @@ -103,7 +103,7 @@ local interface ImplicitContext * @return The previous value associated with the key, if any. * **/ - string put(string key, string \value); + ["swift:noexcept"] string put(string key, string \value); /** * Remove the entry for the given key in the underlying context. @@ -113,6 +113,6 @@ local interface ImplicitContext * @return The value associated with the key, if any. * **/ - string remove(string key); + ["swift:noexcept"] string remove(string key); } } diff --git a/slice/Ice/Logger.ice b/slice/Ice/Logger.ice index 9c92bed2747..76fcabc7f0b 100644 --- a/slice/Ice/Logger.ice +++ b/slice/Ice/Logger.ice @@ -40,7 +40,7 @@ local interface Logger * * @param message The message to log. **/ - void print(string message); + ["swift:noexcept"] void print(string message); /** * @@ -51,7 +51,7 @@ local interface Logger * @param message The trace message to log. * **/ - void trace(string category, string message); + ["swift:noexcept"] void trace(string category, string message); /** * @@ -62,7 +62,7 @@ local interface Logger * @see #error * **/ - void warning(string message); + ["swift:noexcept"] void warning(string message); /** * @@ -73,7 +73,7 @@ local interface Logger * @see #warning * **/ - void error(string message); + ["swift:noexcept"] void error(string message); /** * @@ -82,7 +82,7 @@ local interface Logger * @return The prefix. * **/ - string getPrefix(); + ["swift:noexcept"] string getPrefix(); /** * @@ -92,7 +92,7 @@ local interface Logger * @return A logger instance. * */ - Logger cloneWithPrefix(string prefix); + ["swift:noexcept", "swift:nonnull"] Logger cloneWithPrefix(string prefix); } } diff --git a/slice/Ice/Metrics.ice b/slice/Ice/Metrics.ice index 0710d42295d..d785d5dab50 100644 --- a/slice/Ice/Metrics.ice +++ b/slice/Ice/Metrics.ice @@ -30,7 +30,7 @@ [["java:package:com.zeroc"]] #endif -["objc:prefix:ICEMX"] +["objc:prefix:ICEMX", "swift:module:Ice:MX"] module IceMX { diff --git a/slice/Ice/ObjectAdapter.ice b/slice/Ice/ObjectAdapter.ice index 4aa4064ea58..2996b32189c 100644 --- a/slice/Ice/ObjectAdapter.ice +++ b/slice/Ice/ObjectAdapter.ice @@ -54,7 +54,7 @@ local interface ObjectAdapter * @return This object adapter's name. * **/ - ["cpp:const", "cpp:noexcept"] string getName(); + ["cpp:const", "cpp:noexcept", "swift:noexcept"] string getName(); /** * @@ -65,7 +65,7 @@ local interface ObjectAdapter * @see Communicator * **/ - ["cpp:const", "cpp:noexcept"] Communicator getCommunicator(); + ["cpp:const", "cpp:noexcept", "swift:noexcept", "swift:nonnull"] Communicator getCommunicator(); /** * @@ -94,7 +94,7 @@ local interface ObjectAdapter * @see #waitForHold * **/ - void hold(); + ["swift:noexcept"] void hold(); /** * @@ -107,7 +107,7 @@ local interface ObjectAdapter * @see Communicator#waitForShutdown * **/ - ["js:async"] void waitForHold(); + ["swift:noexcept", "js:async"] void waitForHold(); /** * @@ -134,7 +134,7 @@ local interface ObjectAdapter * @see Communicator#shutdown * **/ - ["cpp:noexcept", "js:async"] void deactivate(); + ["cpp:noexcept", "swift:noexcept", "js:async"] void deactivate(); /** * @@ -148,7 +148,7 @@ local interface ObjectAdapter * @see Communicator#waitForShutdown * **/ - ["cpp:noexcept", "js:async"] void waitForDeactivate(); + ["cpp:noexcept", "swift:noexcept", "js:async"] void waitForDeactivate(); /** * @@ -159,7 +159,7 @@ local interface ObjectAdapter * @see Communicator#shutdown * **/ - ["cpp:const", "cpp:noexcept"] bool isDeactivated(); + ["cpp:const", "cpp:noexcept", "swift:noexcept"] bool isDeactivated(); /** * @@ -175,7 +175,7 @@ local interface ObjectAdapter * @see Communicator#destroy * **/ - ["cpp:noexcept", "js:async"] void destroy(); + ["cpp:noexcept", "swift:noexcept", "js:async"] void destroy(); /** * @@ -199,7 +199,8 @@ local interface ObjectAdapter * @see #find * **/ - Object* add(Object servant, ["objc:param:identity"] Identity id); + ["swift:nonnull", "swift:attribute:@discardableResult"] + Object* add(["swift:nonnull"] Object servant, ["objc:param:identity"] Identity id); /** * @@ -223,7 +224,8 @@ local interface ObjectAdapter * @see #findFacet * **/ - Object* addFacet(Object servant, ["objc:param:identity"] Identity id, string facet); + ["swift:nonnull", "swift:attribute:@discardableResult"] + Object* addFacet(["swift:nonnull"] Object servant, ["objc:param:identity"] Identity id, string facet); /** * @@ -244,7 +246,7 @@ local interface ObjectAdapter * @see #find * **/ - Object* addWithUUID(Object servant); + ["swift:nonnull", "swift:attribute:@discardableResult"] Object* addWithUUID(["swift:nonnull"] Object servant); /** * @@ -267,7 +269,7 @@ local interface ObjectAdapter * @see #findFacet * **/ - Object* addFacetWithUUID(Object servant, string facet); + ["swift:nonnull", "swift:attribute:@discardableResult"] Object* addFacetWithUUID(["swift:nonnull"] Object servant, string facet); /** * @@ -307,7 +309,7 @@ local interface ObjectAdapter * @see #findDefaultServant * **/ - void addDefaultServant(Object servant, string category); + void addDefaultServant(["swift:nonnull"] Object servant, string category); /** * @@ -327,7 +329,7 @@ local interface ObjectAdapter * @see #addWithUUID * **/ - Object remove(Identity id); + ["swift:nonnull", "swift:attribute:@discardableResult"] Object remove(Identity id); /** * @@ -346,7 +348,7 @@ local interface ObjectAdapter * @see #addFacetWithUUID * **/ - Object removeFacet(Identity id, string facet); + ["swift:nonnull", "swift:attribute:@discardableResult"] Object removeFacet(Identity id, string facet); /** * @@ -364,7 +366,7 @@ local interface ObjectAdapter * @see #removeFacet * **/ - FacetMap removeAllFacets(Identity id); + ["swift:attribute:@discardableResult"] FacetMap removeAllFacets(Identity id); /** * @@ -380,7 +382,7 @@ local interface ObjectAdapter * @see #findDefaultServant * **/ - Object removeDefaultServant(string category); + ["swift:nonnull", "swift:attribute:@discardableResult"] Object removeDefaultServant(string category); /** * @@ -402,7 +404,7 @@ local interface ObjectAdapter * @see #findByProxy * **/ - ["cpp:const"] Object find(Identity id); + ["swift:noexcept", "cpp:const"] Object find(Identity id); /** * @@ -425,7 +427,7 @@ local interface ObjectAdapter * @see #findByProxy * **/ - ["cpp:const"] Object findFacet(Identity id, string facet); + ["swift:noexcept", "cpp:const"] Object findFacet(Identity id, string facet); /** * @@ -443,7 +445,7 @@ local interface ObjectAdapter * @see #findFacet * **/ - ["cpp:const"] FacetMap findAllFacets(Identity id); + ["swift:noexcept", "cpp:const"] FacetMap findAllFacets(Identity id); /** * @@ -463,7 +465,7 @@ local interface ObjectAdapter * @see #findFacet * **/ - ["cpp:const"] Object findByProxy(Object* proxy); + ["swift:noexcept", "cpp:const"] Object findByProxy(["swift:nonnull"] Object* proxy); /** * @@ -511,7 +513,7 @@ local interface ObjectAdapter * @see ServantLocator * **/ - void addServantLocator(ServantLocator locator, string category); + void addServantLocator(["swift:nonnull"] ServantLocator locator, string category); /** * @@ -530,7 +532,7 @@ local interface ObjectAdapter * @see ServantLocator * **/ - ServantLocator removeServantLocator(string category); + ["swift:nonnull", "swift:attribute:@discardableResult"] ServantLocator removeServantLocator(string category); /** * @@ -549,7 +551,7 @@ local interface ObjectAdapter * @see ServantLocator * **/ - ["cpp:const"] ServantLocator findServantLocator(string category); + ["swift:noexcept", "cpp:const"] ServantLocator findServantLocator(string category); /** * @@ -564,7 +566,7 @@ local interface ObjectAdapter * @see #removeDefaultServant * **/ - ["cpp:const"] Object findDefaultServant(string category); + ["swift:noexcept", "cpp:const"] Object findDefaultServant(string category); /** * @@ -583,7 +585,7 @@ local interface ObjectAdapter * @see Identity * **/ - ["cpp:const"] Object* createProxy(Identity id); + ["cpp:const", "swift:nonnull"] Object* createProxy(Identity id); /** * @@ -598,7 +600,7 @@ local interface ObjectAdapter * @see Identity * **/ - ["cpp:const"] Object* createDirectProxy(Identity id); + ["cpp:const", "swift:nonnull"] Object* createDirectProxy(Identity id); /** * @@ -614,7 +616,7 @@ local interface ObjectAdapter * @see Identity * **/ - ["cpp:const"] Object* createIndirectProxy(Identity id); + ["cpp:const", "swift:nonnull"] Object* createIndirectProxy(Identity id); /** * Set an Ice locator for this object adapter. By doing so, the @@ -643,7 +645,7 @@ local interface ObjectAdapter * @see #setLocator * **/ - ["cpp:const", "cpp:noexcept"] Locator* getLocator(); + ["cpp:const", "cpp:noexcept", "swift:noexcept"] Locator* getLocator(); /** * @@ -654,7 +656,7 @@ local interface ObjectAdapter * @see Endpoint * **/ - ["cpp:const", "cpp:noexcept"] EndpointSeq getEndpoints(); + ["cpp:const", "cpp:noexcept", "swift:noexcept"] EndpointSeq getEndpoints(); /** * Refresh the set of published endpoints. The run time re-reads @@ -678,7 +680,7 @@ local interface ObjectAdapter * @see Endpoint * **/ - ["cpp:const", "cpp:noexcept"] EndpointSeq getPublishedEndpoints(); + ["cpp:const", "cpp:noexcept", "swift:noexcept"] EndpointSeq getPublishedEndpoints(); /** * @@ -692,6 +694,16 @@ local interface ObjectAdapter * **/ void setPublishedEndpoints(EndpointSeq newEndpoints); + +#if defined(__SLICE2SWIFT__) || defined(ICE_SWIFT) + /* + * Returns the dispatch queue. + * + * @return The dispatch queue associated wih this Object Adapter. + **/ + ["cpp:const", "swift:nonnull", "cpp:type:dispatch_queue_t", "swift:type:Dispatch.DispatchQueue"] + LocalObject getDispatchQueue(); +#endif } } diff --git a/slice/Ice/ObjectFactory.ice b/slice/Ice/ObjectFactory.ice index 8e6040d9bc7..cfaa21ba6a7 100644 --- a/slice/Ice/ObjectFactory.ice +++ b/slice/Ice/ObjectFactory.ice @@ -25,7 +25,7 @@ module Ice { -#if !defined(__SLICE2PHP__) +#if !defined(__SLICE2PHP__) && !defined(__SLICE2SWIFT__) /** * * A factory for objects. Object factories are used when receiving "objects by value". diff --git a/slice/Ice/Plugin.ice b/slice/Ice/Plugin.ice index b23a2d97ba3..ae214f4f524 100644 --- a/slice/Ice/Plugin.ice +++ b/slice/Ice/Plugin.ice @@ -89,7 +89,7 @@ local interface PluginManager * @see #getPlugin * **/ - ["cpp:noexcept"] StringSeq getPlugins(); + ["cpp:noexcept", "swift:noexcept"] StringSeq getPlugins(); /** * @@ -122,7 +122,7 @@ local interface PluginManager * Called when the communicator is being destroyed. * **/ - ["cpp:noexcept"] void destroy(); + ["cpp:noexcept", "swift:noexcept"] void destroy(); } #endif diff --git a/slice/Ice/Properties.ice b/slice/Ice/Properties.ice index 86a45411c0f..609f143bdd8 100644 --- a/slice/Ice/Properties.ice +++ b/slice/Ice/Properties.ice @@ -51,7 +51,7 @@ local interface Properties * @see #setProperty * **/ - ["cpp:noexcept"] string getProperty(string key); + ["cpp:noexcept", "swift:noexcept"] string getProperty(string key); /** * @@ -68,7 +68,7 @@ local interface Properties * @see #setProperty * **/ - ["cpp:noexcept"] string getPropertyWithDefault(string key, string \value); + ["cpp:noexcept", "swift:noexcept"] string getPropertyWithDefault(string key, string \value); /** * @@ -82,7 +82,7 @@ local interface Properties * @see #setProperty * **/ - ["cpp:noexcept"] int getPropertyAsInt(string key); + ["cpp:noexcept", "swift:noexcept"] int getPropertyAsInt(string key); /** * @@ -100,7 +100,7 @@ local interface Properties * @see #setProperty * **/ - ["cpp:noexcept"] int getPropertyAsIntWithDefault(string key, int \value); + ["cpp:noexcept", "swift:noexcept"] int getPropertyAsIntWithDefault(string key, int \value); /** * @@ -120,7 +120,7 @@ local interface Properties * @see #setProperty * **/ - ["cpp:noexcept"] StringSeq getPropertyAsList(string key); + ["cpp:noexcept", "swift:noexcept"] StringSeq getPropertyAsList(string key); /** * @@ -143,7 +143,7 @@ local interface Properties * @see #setProperty * **/ - ["cpp:noexcept"] StringSeq getPropertyAsListWithDefault(string key, StringSeq \value); + ["cpp:noexcept", "swift:noexcept"] StringSeq getPropertyAsListWithDefault(string key, StringSeq \value); /** * @@ -156,7 +156,7 @@ local interface Properties * @return The matching property set. * **/ - ["cpp:noexcept"] PropertyDict getPropertiesForPrefix(string prefix); + ["cpp:noexcept", "swift:noexcept"] PropertyDict getPropertiesForPrefix(string prefix); /** * @@ -169,7 +169,7 @@ local interface Properties * @see #getProperty * **/ - void setProperty(string key, string \value); + ["swift:noexcept"] void setProperty(string key, string \value); /** * @@ -181,7 +181,7 @@ local interface Properties * @return The command line options for this property set. * **/ - ["cpp:noexcept"] StringSeq getCommandLineOptions(); + ["cpp:noexcept", "swift:noexcept"] StringSeq getCommandLineOptions(); /** * @@ -235,7 +235,7 @@ local interface Properties * @return A copy of this property set. * **/ - ["cpp:noexcept"] Properties clone(); + ["cpp:noexcept", "swift:noexcept", "swift:nonnull"] Properties clone(); } #endif diff --git a/slice/Ice/ServantLocator.ice b/slice/Ice/ServantLocator.ice index 409462018cf..2afaec2de17 100644 --- a/slice/Ice/ServantLocator.ice +++ b/slice/Ice/ServantLocator.ice @@ -112,7 +112,9 @@ local interface ServantLocator * @see #locate * **/ - ["java:UserException"] void finished(Current curr, Object servant, LocalObject cookie); + ["java:UserException"] void finished(Current curr, + ["swift:nonnull"] Object servant, + LocalObject cookie); /** * @@ -127,7 +129,7 @@ local interface ServantLocator * @see Communicator#destroy * **/ - void deactivate(string category); + ["swift:noexcept"] void deactivate(string category); } } diff --git a/slice/Ice/ValueFactory.ice b/slice/Ice/ValueFactory.ice index 6b7cb9b0505..7a650be6063 100644 --- a/slice/Ice/ValueFactory.ice +++ b/slice/Ice/ValueFactory.ice @@ -54,7 +54,7 @@ local interface ValueFactory * factory is unable to create the value. * **/ - Value create(string type); + ["swift:noexcept"] Value create(string type); } /** @@ -112,7 +112,7 @@ local interface ValueFactoryManager * an empty string for the default factory. * **/ - void add(ValueFactory factory, ["objc:param:sliceId"] string id); + void add(["swift:nonnull"] ValueFactory factory, ["objc:param:sliceId"] string id); /** * @@ -125,7 +125,7 @@ local interface ValueFactoryManager * found for the given id. * **/ - ["cpp:const", "cpp:noexcept"] ValueFactory find(string id); + ["cpp:const", "cpp:noexcept", "swift:noexcept"] ValueFactory find(string id); } #endif diff --git a/slice/IceBT/EndpointInfo.ice b/slice/IceBT/EndpointInfo.ice index a199c550fa9..111b65ceab2 100644 --- a/slice/IceBT/EndpointInfo.ice +++ b/slice/IceBT/EndpointInfo.ice @@ -27,7 +27,7 @@ * IceBT provides a Bluetooth transport for Ice. * **/ -["objc:prefix:ICEBT"] +["objc:prefix:ICEBT", "swift:module:Ice:SSL"] module IceBT { diff --git a/slice/IceGrid/PluginFacade.ice b/slice/IceGrid/PluginFacade.ice index 6adffd64a1b..e71284d8ef6 100644 --- a/slice/IceGrid/PluginFacade.ice +++ b/slice/IceGrid/PluginFacade.ice @@ -285,7 +285,7 @@ local interface RegistryPluginFacade * @param filter The filter implementation. * **/ - ["cpp:noexcept"] void addReplicaGroupFilter(string id, ReplicaGroupFilter filter); + ["cpp:noexcept", "swift:noexcept"] void addReplicaGroupFilter(string id, ReplicaGroupFilter filter); /** * @@ -298,7 +298,7 @@ local interface RegistryPluginFacade * @return True of the filter was removed, false otherwise. * **/ - ["cpp:noexcept"] bool removeReplicaGroupFilter(string id, ReplicaGroupFilter filter); + ["cpp:noexcept", "swift:noexcept"] bool removeReplicaGroupFilter(string id, ReplicaGroupFilter filter); /** * @@ -309,7 +309,7 @@ local interface RegistryPluginFacade * @param filter The filter implementation. * **/ - ["cpp:noexcept"] void addTypeFilter(string type, TypeFilter filter); + ["cpp:noexcept", "swift:noexcept"] void addTypeFilter(string type, TypeFilter filter); /** * @@ -322,7 +322,7 @@ local interface RegistryPluginFacade * @return True of the filter was removed, false otherwise. * **/ - ["cpp:noexcept"] bool removeTypeFilter(string type, TypeFilter filter); + ["cpp:noexcept", "swift:noexcept"] bool removeTypeFilter(string type, TypeFilter filter); } } diff --git a/slice/IceIAP/ConnectionInfo.ice b/slice/IceIAP/ConnectionInfo.ice index 6dcf3445339..8c0faf71fd8 100644 --- a/slice/IceIAP/ConnectionInfo.ice +++ b/slice/IceIAP/ConnectionInfo.ice @@ -16,7 +16,7 @@ #include <Ice/Connection.ice> -["objc:prefix:ICEIAP"] +["objc:prefix:ICEIAP", "swift:module:Ice:IAP"] module IceIAP { diff --git a/slice/IceIAP/EndpointInfo.ice b/slice/IceIAP/EndpointInfo.ice index 94c18e31706..320728c9add 100644 --- a/slice/IceIAP/EndpointInfo.ice +++ b/slice/IceIAP/EndpointInfo.ice @@ -21,7 +21,7 @@ * IceIAP provides a secure transport for Ice. * **/ -["objc:prefix:ICEIAP"] +["objc:prefix:ICEIAP", "swift:module:Ice:IAP"] module IceIAP { diff --git a/slice/IceSSL/ConnectionInfo.ice b/slice/IceSSL/ConnectionInfo.ice index 546ae194eee..f4191326568 100644 --- a/slice/IceSSL/ConnectionInfo.ice +++ b/slice/IceSSL/ConnectionInfo.ice @@ -25,7 +25,7 @@ [["java:package:com.zeroc"]] #endif -["objc:prefix:ICESSL"] +["objc:prefix:ICESSL", "swift:module:Ice:SSL"] module IceSSL { @@ -42,7 +42,8 @@ local class ConnectionInfo extends Ice::ConnectionInfo /** The certificate chain. */ ["cpp:type:std::vector<CertificatePtr>", "java:type:java.security.cert.Certificate[]", - "cs:type:System.Security.Cryptography.X509Certificates.X509Certificate2[]"] + "cs:type:System.Security.Cryptography.X509Certificates.X509Certificate2[]", + "swift:type:[SecCertificate]"] Ice::StringSeq certs; /** The certificate chain verification status. */ diff --git a/slice/IceSSL/ConnectionInfoF.ice b/slice/IceSSL/ConnectionInfoF.ice index 140cee70e3e..2f5fa5f88b9 100644 --- a/slice/IceSSL/ConnectionInfoF.ice +++ b/slice/IceSSL/ConnectionInfoF.ice @@ -21,7 +21,7 @@ [["java:package:com.zeroc"]] #endif -["objc:prefix:ICESSL"] +["objc:prefix:ICESSL", "swift:module:Ice:SSL"] module IceSSL { diff --git a/slice/IceSSL/EndpointInfo.ice b/slice/IceSSL/EndpointInfo.ice index 45b5ee62e40..f3647116d8a 100644 --- a/slice/IceSSL/EndpointInfo.ice +++ b/slice/IceSSL/EndpointInfo.ice @@ -28,7 +28,7 @@ [["java:package:com.zeroc"]] #endif -["objc:prefix:ICESSL"] +["objc:prefix:ICESSL", "swift:module:Ice:SSL"] module IceSSL { diff --git a/slice/IceStorm/Metrics.ice b/slice/IceStorm/Metrics.ice index 89b3914b82d..5b83723435e 100644 --- a/slice/IceStorm/Metrics.ice +++ b/slice/IceStorm/Metrics.ice @@ -22,7 +22,7 @@ [["java:package:com.zeroc"]] #endif -["objc:prefix:ICEMX", "js:module:ice"] +["objc:prefix:ICEMX", "js:module:ice", "swift:module:IceStorm:MX"] module IceMX { diff --git a/swift/.gitignore b/swift/.gitignore new file mode 100644 index 00000000000..2f88269126d --- /dev/null +++ b/swift/.gitignore @@ -0,0 +1 @@ +/docs diff --git a/swift/.jazzy.yaml b/swift/.jazzy.yaml new file mode 100644 index 00000000000..3117a6b5387 --- /dev/null +++ b/swift/.jazzy.yaml @@ -0,0 +1,17 @@ +module: Ice +author: ZeroC +author_url: https://zeroc.com +github_url: https://github.com/zeroc-ice/ice +theme: fullwidth +copyright: Copyright (c) ZeroC, Inc. All rights reserved. +xcodebuild_arguments: ['-project', 'ice.xcodeproj', '-scheme', 'Ice macOS'] +skip_undocumented: true +hide_documentation_coverage: true +exclude: +- src/Ice/ClassResolver.swift + +# custom_categories: +# - name: Exceptions +# children: +# - Exception +# - LocalException diff --git a/swift/.swift-version b/swift/.swift-version new file mode 100644 index 00000000000..7ed6ff82de6 --- /dev/null +++ b/swift/.swift-version @@ -0,0 +1 @@ +5 diff --git a/swift/.swiftformat b/swift/.swiftformat new file mode 100644 index 00000000000..1c94cf5c4f3 --- /dev/null +++ b/swift/.swiftformat @@ -0,0 +1 @@ +--commas "inline" diff --git a/swift/.swiftlint.yml b/swift/.swiftlint.yml new file mode 100644 index 00000000000..76aac5f798a --- /dev/null +++ b/swift/.swiftlint.yml @@ -0,0 +1,10 @@ +disabled_rules: + - identifier_name + - function_parameter_count + - type_name + - type_body_length + - function_body_length + - file_length + - force_cast + - cyclomatic_complexity + - large_tuple diff --git a/swift/README.md b/swift/README.md new file mode 100644 index 00000000000..bc823ea7db7 --- /dev/null +++ b/swift/README.md @@ -0,0 +1,88 @@ +# Building Ice for Swift + +This file describes how to build Ice for Swift from source and how to test the +resulting build. + +* [Build Requirements](#build-requirements) + * [Operating Systems](#operating-systems) + * [Slice to Swift Compiler](#slice-to-swift-compiler) + * [Swift Version](#swift-version) +* [Building Ice for Swift](#building-ice-for-swift) + +## Swift Build Requirements + +### Operating Systems + +Ice for Swift builds and runs properly on macOS and is fully supported on +the platforms listed on the [supported platforms][2] page. + +### Slice to Swift Compiler + +You need the Slice to Swift compiler to build Ice for Swift and also to use +Ice for Swift. The Slice to Swift compiler (`slice2swift`) is a command-line tool +written in C++. You can build the Slice to Swift compiler from source, or +alternatively you can install an Ice [binary distribution][1] that includes +this compiler. + +### Swift Version + +Ice for Swift requires Swift 5 or later. + +### Carthage + +Carthage must be installed to build Ice for Swift. You can install Carthage using Homebrew: +``` +brew install carthage +``` + +## Building Ice for Swift + +The build system requires the Slice to Swift and the Slice to C++ +compilers. If you have not installed a binary distribution that provides +these command-line tools, refer to the [C++ build instructions](../cpp/README.md) +to build these compilers using the Ice for C++ sources. + +To first download and build the necessary dependency frameworks, run +``` +carthage update +``` +from the base folder you downloaded ice into. + +Then open `ice.xcproject` with Xcode and build the `Ice macOS` or `Ice iOS` target +to build Ice for Swift macOS framework or Ice for Swift iOS framework respectively. + +The test programs for macOS and iOS can be built using `TestDriver macOS` and +`TestDriver iOS` respectively + +## Running the Swift Tests on + +Python is required to run the test suite. + +### macOS + +``` +python allTests.py --config Debug +``` + +If everything worked out, you should see lots of `ok` messages. In case of a +failure, the tests abort with `failed`. + +### iOS + +Start the `TestDriver iOS` app on your iOS device, from Xcode. + +``` +python allTests.py --config Debug --platform iphoneos +``` + +## Install + +### Carthage + +In your `Cartfile` add a reference to Ice package +``` +github "zeroc-ice/ice" ~> swift +``` + +[1]: https://zeroc.com/distributions/ice +[2]: https://doc.zeroc.com/display/Rel/Supported+Platforms+for+Ice+3.7.2 diff --git a/swift/Rakefile b/swift/Rakefile new file mode 100644 index 00000000000..a9efa81898a --- /dev/null +++ b/swift/Rakefile @@ -0,0 +1,653 @@ +#!/usr/bin/env ruby + +require 'xcodeproj' + +$tests = [ + "Ice/acm", + "Ice/adapterDeactivation", + "Ice/admin", + "Ice/ami", + "Ice/binding", + "Ice/defaultServant", + "Ice/defaultValue", + "Ice/enums", + "Ice/exceptions", + "Ice/facets", + "Ice/hold", + "Ice/info", + "Ice/inheritance", + "Ice/invoke", + "Ice/location", + "Ice/objects", + "Ice/operations", + "Ice/optional", + "Ice/properties", + "Ice/proxy", + "Ice/retry", + "Ice/scope", + "Ice/servantLocator", + "Ice/slicing/exceptions", + "Ice/slicing/objects", + "Ice/stream", + "Ice/timeout", + "Ice/udp", + "IceSSL/configuration", + "Slice/escape" +] + +$test_variants = ["Client", "Server", "ServerAMD", "Collocated"] + +# +# Default sources for each test variant +# +$test_default_sources = { + "Client" => ["Client.swift", "AllTests.swift", "*Test.ice", "Client.ice"], + "Server" => ["Server.swift", "TestI.swift", "*Test.ice", "Server.ice"], + "ServerAMD" => ["ServerAMD.swift", "TestAMDI.swift", "*TestAMD.ice"], + "Collocated" => ["Collocated.swift"] +} + +# +# Extra test sources if any +# +$test_extra_sources = { + + "Ice/operations/Client" => ["BatchOneways.swift", + "BatchOnewaysAMI.swift", + "Oneways.swift", + "OnewaysAMI.swift", + "Twoways.swift", + "TwowaysAMI.swift"], + + "Ice/servantLocator" => ["ServantLocatorI.swift"], + + "Ice/slicing/exceptions/Client" => ["ClientPrivate.ice"], + "Ice/slicing/exceptions/Server" => ["ServerPrivate.ice"], + "Ice/slicing/exceptions/ServerAMD" => ["ServerPrivateAMD.ice"], + + "Ice/slicing/objects/Client" => ["ClientPrivate.ice"], + "Ice/slicing/objects/Server" => ["ServerPrivate.ice"], + "Ice/slicing/objects/ServerAMD" => ["ServerPrivateAMD.ice"], + "Slice/escape" => ["Clash.ice", "Key.ice"] +} + +$test_resources = { + "IceSSL/configuration" => ["../../../../cpp/test/IceSSL/certs"] +} + +desc "Generate Xcode projects required to build Ice for Swift" +task :iceproj do + project = Xcodeproj::Project.new("ice.xcodeproj") + + [:osx, :ios].each do |platform| + create_platform_targets(project, platform) + end + + attributes = project.root_object.attributes + attributes["TargetAttributes"] ||= {} + project.targets.each do |target| + attributes["TargetAttributes"][target.uuid] ||= {} + attributes["TargetAttributes"][target.uuid]["ProvisioningStyle"] = "Automatic" + end + project.root_object.development_region = "en" + project.root_object.known_regions = ["Base", "en"] + + # + # Sort the project and save it + # + project.sort({:groups_position => :above}) + project.save() +end + +task :default => [:iceproj] + +def create_platform_targets(project, platform) + + platform_name = platform == :osx ? "macOS" : "iOS" + + # + # Ice for C++11 static libraries + # + cpp_components = ["Ice", "IceSSL", "IceDiscovery", "IceLocatorDiscovery"] + cpp_source_dirs = { "Ice" => ["IceUtil", "Ice"] } + if platform == :ios then + cpp_components << "IceIAP" + cpp_source_dirs["Ice"] << "Ice/ios" + end + + excludes = { + "Ice" => ["Application.cpp", + "AsyncResult.cpp", + "AsyncResult.cpp", + "ConvertUTF.cpp", + "DLLMain.cpp", + "GCObject.cpp", + "ResponseHandler.cpp", + "SystemdJournal.cpp", + "Unicode.cpp"], + "IceSSL" => ["OpenSSL*", "SChannel*", "UWP*"] + } + + cpp_targets = [] + ice_cpp_target = nil + + cpp_components.each do | component | + target = project.new_target(:static_library, "#{component} C++11 #{platform_name}", platform) + cpp_targets << target + + group = project_group(project, "slice/#{component}") + target_add_files(target, group, "../slice/#{component}", ["*.ice"]) + target_add_slice2cpp_build_rule(project, target, component) + + target.build_configurations.each { |config| + config.build_settings["HEADER_SEARCH_PATHS"] = [ + "$(SRCROOT)/../cpp/include/", + "$(SYMROOT)/$(PLATFORM_NAME)/include/", + "$(SRCROOT)/../cpp/src/" + ] + config.build_settings["GCC_PREPROCESSOR_DEFINITIONS"] = [ + "ICE_CPP11_MAPPING", + "ICE_BUILDING_SRC", + "ICE_STATIC_LIBS", + "ICE_SWIFT" + ] + if config.name == "Release" then + config.build_settings["GCC_PREPROCESSOR_DEFINITIONS"] << "NDEBUG" + end + config.build_settings["CLANG_ENABLE_OBJC_ARC"] = "NO" + + if component == "Ice" then + ice_cpp_target = target + else + target.add_dependency(ice_cpp_target) + end + } + target_set_common_build_settings(target, "#{component}++11#{platform_name}") + + source_dirs = cpp_source_dirs[component] || [component] + source_dirs.each do |d| + group = project_group(project, "cpp/src/#{d}") + target_add_files(target, group, "../cpp/src/#{d}", ["*.cpp", "*.mm"], excludes[component] || []) + end + end + + # + # Ice for Swift framework + # + ice_target = project.new_target(:framework, "Ice", platform) + ice_target.name = "Ice #{platform_name}" + + target = ice_target + target.frameworks_build_phases.clear() + + group = project_group(project, "src/IceObjc") + target_add_files(target, group, "src/IceObjc", ["*.mm"]) + target_add_headers(target, group, "src/IceObjc", ["*.h"], attributes: ["Private"]) + + target_set_common_build_settings(target, "Ice", plist: "src/Ice/Info.plist", swift: true) + + cpp_targets.each do |t| + target.frameworks_build_phases.add_file_reference(t.product_reference, true) + end + + target.build_configurations.each { |config| + config.build_settings["HEADER_SEARCH_PATHS"] = [ + "$(SRCROOT)/../cpp/include/", + "$(SYMROOT)/$(PLATFORM_NAME)/include/", + "$(SRCROOT)/../cpp/src/" + ] + config.build_settings["SWIFT_INCLUDE_PATHS"] = "$(SRCROOT)/src/IceObjc" + config.build_settings["DEFINES_MODULE"] = "YES" + config.build_settings["OTHER_LDFLAGS"] = [ + "-lbz2", + "-liconv" + ] + config.build_settings["GCC_PREPROCESSOR_DEFINITIONS"] = [ + "ICE_CPP11_MAPPING", + "ICE_STATIC_LIBS", + "ICE_SWIFT" + ] + + if config.name == "Release" then + config.build_settings["GCC_PREPROCESSOR_DEFINITIONS"] << "NDEBUG" + end + } + target_set_framework_build_settings(target) + target_add_carthage_framework(target, platform, "PromiseKit.framework") + + if platform == :ios then + target.add_system_framework("ExternalAccessory") + target.add_system_framework("Security") + target.add_system_framework("CFNetwork") + target.add_system_framework("Foundation") + target.add_system_framework("UIKit") + end + + group = project_group(project, "src/Ice") + group_add_files(group, "src/Ice", ["*.plist"]) + target_add_headers(target, group, "src/Ice", ["*.h"]) + target_add_files(target, group, "src/Ice", ["*.swift"]) + + slices = ["Ice", "IceSSL"] + if platform == :ios then + slices << "IceIAP" + end + + slices.each do |item| + group = project_group(project, "slice/#{item}") + target_add_files(target, group, "../slice/#{item}", ["*.ice"], excludes[item] || []) + target_add_slice2swift_build_rule(project, target, item) + end + + target_add_swiftlint_build_phase(target, "src/Ice") + + # + # Glacier2, IceStorm and IceGrid Frameworks + # + glacier2_target = project.new_target(:framework, "Glacier2", platform) + icestorm_target = project.new_target(:framework, "IceStorm", platform) + icegrid_target = project.new_target(:framework, "IceGrid", platform) + + [glacier2_target, icestorm_target, icegrid_target].each do | t | + target = t + framework = target.name + target.name = "#{target.name} #{platform_name}" + + target.frameworks_build_phases.clear() + + target_set_common_build_settings(target, framework, plist: "src/#{framework}/Info.plist", swift: true) + + target.build_configurations.each { |config| + config.build_settings["DEFINES_MODULE"] = "YES" + } + target_set_framework_build_settings(target) + target_add_carthage_framework(target, platform, "PromiseKit.framework") + + group = project_group(project, "src/#{framework}") + group_add_files(group, "src/#{framework}", ["*.plist"]) + target_add_headers(target, group, "src/#{framework}", ["*.h"]) + target_add_files(target, group, "src/#{framework}", ["*.swift"]) + + group = project_group(project, "slice/#{framework}") + target_add_files(target, group, "../slice/#{framework}", ["*.ice"]) + target_add_slice2swift_build_rule(project, target, framework) + target.frameworks_build_phases.add_file_reference(ice_target.product_reference) + target.add_dependency(ice_target) + end + + # + # IceGrid requires Glacier2 + # + icegrid_target.frameworks_build_phases.add_file_reference(glacier2_target.product_reference) + icegrid_target.add_dependency(glacier2_target) + + # + # TestCommon framework + # + target = project.new_target(:framework, "TestCommon", platform) + target.name = "#{target.name} #{platform_name}" + target.frameworks_build_phases.add_file_reference(ice_target.product_reference, true) + target_set_framework_build_settings(target) + target_add_carthage_framework(target, platform, "PromiseKit.framework") + target_add_slice2swift_build_rule(project, target) + target_add_swiftlint_build_phase(target, "test/TestCommon") + test_common_target = target + + # + # Add .ice and .swift files to the target + # + group = project_group(project, "test/TestCommon") + group_add_files(group, "test/TestCommon", ["*.plist"]) + target_add_files(target, group, "test/TestCommon", ["*.ice", "*.swift"]) + target_set_common_build_settings(target, "TestCommon", + plist: "test/TestCommon/Info.plist", + swift: true) + + target = project.new_target(:application, "TestDriver", platform) + target.name = "#{target.name} #{platform_name}" + target_set_common_build_settings(target, "TestDriver", + plist: "test/TestDriver/#{platform_name}/Info.plist", + swift: true) + target_add_slice2swift_build_rule(project, target) + target_add_swiftlint_build_phase(target, "test/TestDriver") + + group = project_group(project, "test/TestDriver") + target_add_files(target, group, "test/TestDriver", ["*.ice", "*.swift"]) + + group = project_group(project, "test/TestDriver/#{platform_name}") + target_add_files(target, group, "test/TestDriver/#{platform_name}", ["*.ice", "*.swift"]) + if platform == :ios then + target_add_files(target, group, "../scripts", ["*.ice"]) + target_add_files(target, group, "test/TestDriver/#{platform_name}", ["*.xcassets"]) + target_add_files(target, group, "test/TestDriver/#{platform_name}/Base.lproj", ["*.storyboard"]) + target.add_resources(group_add_files(group, "..", ["certs"])) + end + + # + # Copy Ice and TestCommon frameworks to the test driver + # + copy_phase = target.new_copy_files_build_phase("Copy Frameworks") + copy_phase.dst_subfolder_spec = Xcodeproj::Constants::COPY_FILES_BUILD_PHASE_DESTINATIONS[:frameworks] + + [ice_target, test_common_target].each do |t| + file = copy_phase.add_file_reference(t.product_reference) + file.settings = { 'ATTRIBUTES' => ['CodeSignOnCopy'] } + target.frameworks_build_phases.add_file_reference(t.product_reference) + end + + target_set_framework_build_settings(target) + target_add_carthage_framework(target, platform, "PromiseKit.framework", true) + + target.build_configurations.each { |config| + if target.name.include? "macOS" + config.build_settings["CODE_SIGN_IDENTITY"] = "Mac Developer" + else + config.build_settings["CODE_SIGN_IDENTITY"] = "iPhone Developer" + end + config.build_settings["DEVELOPMENT_TEAM"] = "U4TBVKNQ7F" + } + test_driver_target = target + + # + # For each test create a bundle target + # + $tests.each do |test| + target = project.new_target(:bundle, target_name("#{test}"), platform) + target.name = "#{target.name} #{platform_name}" + + [test_common_target, ice_target].each do |t| + target.frameworks_build_phases.add_file_reference(t.product_reference, true) + end + + target_set_framework_build_settings(target) + target.build_configurations.each { |config| + config.build_settings["ENABLE_BITCODE"] = "NO" + } + + target_add_carthage_framework(target, platform, "PromiseKit.framework") + target_add_slice2swift_build_rule(project, target) + target_add_swiftlint_build_phase(target, "test/#{test}") + + # + # Add .ice and .swift files to the target + # + group = project_group(project, "test/#{test}") + group_add_files(group, "test/#{test}", ["*.plist"]) + + $test_variants.reject{ |item| item == "ServerAMD" }.each do |variant| + unless test_has_variant(test, variant) + next + end + target_add_files(target, group, "test/#{test}", test_variant_sources(test, variant)) + end + + if $test_resources.include? test then + target.add_resources(group_add_files(group, "test/#{test}", $test_resources[test])) + end + + target_set_common_build_settings(target, target_name("#{test}"), swift: true) + test_driver_target.add_dependency(target) + + # + # Add the bundle to test driver copy phase + # + file = copy_phase.add_file_reference(target.product_reference) + file.settings = { 'ATTRIBUTES' => ['CodeSignOnCopy'] } + end + + # + # Create a separate bundle for AMD test if there is an AMD test variant + # + $tests.each do |test| + if test_has_variant(test, "ServerAMD") + target = project.new_target(:bundle, target_name("#{test}AMD"), platform) + target.name = "#{target.name} #{platform_name}" + + [test_common_target, ice_target].each do |t| + target.frameworks_build_phases.add_file_reference(t.product_reference, true) + end + + target_set_framework_build_settings(target) + target.build_configurations.each { |config| + config.build_settings["ENABLE_BITCODE"] = "NO" + } + + target_add_carthage_framework(target, platform, "PromiseKit.framework") + target_add_slice2swift_build_rule(project, target) + target_add_swiftlint_build_phase(target, "test/#{test}") + + # + # Add .ice and .swift files to the target + # + group = project_group(project, "test/#{test}") + group_add_files(group, "test/#{test}", ["*.plist"]) + + target_add_files(target, group, "test/#{test}", test_variant_sources(test, "ServerAMD"), + ["Test.ice", "Client*.ice"]) + target_set_common_build_settings(target, target_name("#{test}AMD"), swift: true) + test_driver_target.add_dependency(target) + + # + # Add the bundle to test driver copy phase + # + file = copy_phase.add_file_reference(target.product_reference) + file.settings = { 'ATTRIBUTES' => ['CodeSignOnCopy'] } + end + end + + # + # Ensure Ice.framework has a shared scheme to build it, this is required for Carthage builds + # + scheme = Xcodeproj::XCScheme.new + scheme.add_build_target(ice_target) + scheme.add_build_target(glacier2_target) + scheme.add_build_target(icestorm_target) + scheme.add_build_target(icegrid_target) + scheme.save_as("ice.xcodeproj", "Ice #{platform_name}", true) +end + +def project_group(project, name) + group = project.main_group + name.split("/").each { |item| + new_group = group[item] + unless new_group + new_group = group.new_group(item) + end + group = new_group + } + group +end + +def target_name(basename, suffix = nil) + name = basename.split("/").map{ |item| item[0].upcase + item[1..-1]}.join() + suffix ? "#{name} #{suffix}" : name +end + +def target_add_slice2swift_build_rule(project, target, prefix = nil) + # + # Add Slice Compiler build rule to the target + # + rule = project.new(Xcodeproj::Project::PBXBuildRule) + rule.compiler_spec = "com.apple.compilers.proxy.script" + rule.file_type = "pattern.proxy" + + slic2swift = <<~EOF + if [ -f "$ICE_HOME/cpp/bin/slice2swift" ]; then + SLICE2SWIFT="$ICE_HOME/cpp/bin/slice2swift" + elif [ -f "$SRCROOT/../cpp/bin/slice2swift" ]; then + SLICE2SWIFT="$SRCROOT/../cpp/bin/slice2swift" + elif [ -f /usr/local/bin/slice2swift ]; then + SLICE2SWIFT=/usr/local/bin/slice2swift + else + echo "Failed to locate slice2swift compiler" + exit 1 + fi + EOF + + if prefix then + rule.name = "Slice Compiler for #{prefix}/*.ice" + rule.file_patterns = "*/#{prefix}/*.ice" + rule.script = <<~EOF + #{slic2swift} + BASENAME=$(basename -- "$INPUT_FILE_PATH") + BASENAME="${BASENAME%.*}" + mkdir -p "$DERIVED_FILE_DIR/#{prefix}" + "$SLICE2SWIFT" -I"$SRCROOT/../slice" -I"$INPUT_FILE_DIR" --output-dir "$DERIVED_FILE_DIR/#{prefix}" "$INPUT_FILE_PATH" + mv "$DERIVED_FILE_DIR/#{prefix}/$BASENAME.swift" "$DERIVED_FILE_DIR/#{prefix}_$BASENAME.swift" + EOF + rule.output_files = ["$(DERIVED_FILE_DIR)/#{prefix}_$(INPUT_FILE_BASE).swift"] + else + rule.name = "Slice Compiler" + rule.file_patterns = "*.ice" + rule.script = <<~EOF + #{slic2swift} + "$SLICE2SWIFT" -I"$SRCROOT/../slice" -I"$INPUT_FILE_DIR" --output-dir "$DERIVED_FILE_DIR" "$INPUT_FILE_PATH" + EOF + rule.output_files = ["$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift"] + end + target.build_rules << rule +end + +def target_add_slice2cpp_build_rule(project, target, prefix) + # + # Add Slice Compiler build rule to the target + # + rule = project.new(Xcodeproj::Project::PBXBuildRule) + rule.compiler_spec = "com.apple.compilers.proxy.script" + rule.file_type = "pattern.proxy" + rule.name = "Slice2Cpp Compiler for #{prefix}/*.ice" + rule.file_patterns = "*/#{prefix}/*.ice" + rule.script = <<~EOF + if [ -f "$ICE_HOME/cpp/bin/slice2cpp" ]; then + SLICE2CPP="$ICE_HOME/cpp/bin/slice2cpp" + elif [ -f "$SRCROOT/../cpp/bin/slice2cpp" ]; then + SLICE2CPP="$SRCROOT/../cpp/bin/slice2cpp" + elif [ -f /usr/local/opt/slice2swift/libexec/bin/slice2cpp ]; then + SLICE2CPP=/usr/local/opt/slice2swift/libexec/bin/slice2cpp + elif [ -f /usr/local/bin/slice2cpp ]; then + SLICE2CPP=/usr/local/bin/slice2cpp + else + echo "Failed to locate slice2cpp compiler" + exit 1 + fi + + BASENAME=$(basename -- "$INPUT_FILE_PATH") + BASENAME="${BASENAME%.*}" + mkdir -p "$DERIVED_FILE_DIR/#{prefix}" + $SLICE2CPP -I"$SRCROOT/../slice" -D ICE_SWIFT --include-dir #{prefix} --output-dir "$DERIVED_FILE_DIR/#{prefix}" "$INPUT_FILE_PATH" + mkdir -p "$SYMROOT/$PLATFORM_NAME/include/#{prefix}" + mv "$DERIVED_FILE_DIR/#{prefix}/$BASENAME.h" "$SYMROOT/$PLATFORM_NAME/include/#{prefix}/$BASENAME.h" + EOF + rule.output_files = ["$(DERIVED_FILE_DIR)/#{prefix}/$(INPUT_FILE_BASE).cpp", + "$(SYMROOT)/$(PLATFORM_NAME)/include/#{prefix}/$(INPUT_FILE_BASE).h"] + target.build_rules << rule +end + +def target_add_swiftlint_build_phase(target, basedir) + phase = target.new_shell_script_build_phase("Swiftformat & Swiftlint") + phase.shell_script = <<~EOF + if which swiftlint >/dev/null; then + swiftlint --path "$SRCROOT/#{basedir}" --config "$SRCROOT/.swiftlint.yml" + else + echo "warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint" + fi + EOF +end + +def group_add_files(group, basedir, patterns, exclude = []) + files = [] + Dir.chdir(basedir) do + patterns.each do |p| + Dir.glob(p) do |file| + files << file + end + end + end + files = files.reject { |item| exclude.any? { |pattern| item.match(pattern) } } + files = files.uniq + files.map { |file| group.find_subpath(File.basename(file)) || group.new_file("#{basedir}/#{file}") } +end + +def target_add_files(target, group, basedir, patterns, excludes = []) + target.add_file_references(group_add_files(group, basedir, patterns, excludes)) +end + +def target_add_headers(target, group, basedir, patterns, excludes: [], attributes: ["Public"]) + files = group_add_files(group, basedir, patterns, excludes) + if attributes.include? "Public" then + files.each do |file| + header = target.headers_build_phase.add_file_reference(file) + header.settings = { "ATTRIBUTES" => attributes } + end + end +end + +def target_set_common_build_settings(target, product, plist: nil, swift: false) + target.build_configurations.each { |config| + config.build_settings["GCC_SYMBOLS_PRIVATE_EXTERN"] = "YES" + config.build_settings["ENABLE_TESTABILITY"] = "NO" + config.build_settings["CODE_SIGN_STYLE"] = "Automatic" + config.build_settings["CURRENT_PROJECT_VERSION"] = "3.7.61" + config.build_settings["DYLIB_CURRENT_VERSION"] = "3.7.61" + config.build_settings["DYLIB_COMPATIBILITY_VERSION"] = "0" + + if plist then + config.build_settings["INFOPLIST_FILE"] = plist + end + config.build_settings["PRODUCT_NAME"] = product + config.build_settings["PRODUCT_BUNDLE_IDENTIFIER"] = "com.zeroc.#{product}" + + if swift then + config.build_settings["SWIFT_VERSION"] = "5.0" + end + + config.build_settings["SUPPORTED_PLATFORMS"] = + (target.name.include? "macOS") ? "macosx" : "iphoneos iphonesimulator" + + config.build_settings["AVAILABLE_PLATFORMS"] = + (target.name.include? "macOS") ? "macosx" : "iphoneos iphonesimulator" + } +end + +def target_set_framework_build_settings(target) + carthage_prefix = (target.name.include? "macOS") ? "Mac" : "iOS" + target.build_configurations.each { |config| + config.build_settings["FRAMEWORK_SEARCH_PATHS"] = "$(SRCROOT)/../Carthage/Build/#{carthage_prefix}" + } +end + +def target_add_carthage_framework(target, platform, framework, copy=false) + group = target.project.frameworks_group[(platform == :osx ? "OS X" : "iOS")] + carthage_prefix = (platform == :osx) ? "Mac" : "iOS" + group_add_files(group, "../Carthage/Build/#{carthage_prefix}", [framework]).each do |ref| + target.frameworks_build_phases.add_file_reference(ref, true) + if copy then + file = target.copy_files_build_phases[0].add_file_reference(ref) + file.settings = { 'ATTRIBUTES' => ['CodeSignOnCopy'] } + end + end +end + +# +# Check if the test include the given variant +# +def test_has_variant(test, variant) + return File.file?("test/#{test}/#{variant}.swift") +end + +def test_variant_sources(test, variant) + sources = $test_default_sources[variant] + + if variant == "Collocated" + sources += $test_default_sources["Server"].reject { |s| s == "Server.swift" } + sources += $test_default_sources["Client"].reject { |s| s == "Client.swift" } + + sources += $test_extra_sources["#{test}/Server"] || [] + sources += $test_extra_sources["#{test}/Client"] || [] + end + + sources += $test_extra_sources[test] || [] + sources += $test_extra_sources["#{test}/#{variant}"] || [] + + return sources +end diff --git a/swift/allTests.py b/swift/allTests.py new file mode 100755 index 00000000000..5e7b075e397 --- /dev/null +++ b/swift/allTests.py @@ -0,0 +1,11 @@ +#!/usr/bin/env python +# +# Copyright (c) ZeroC, Inc. All rights reserved. +# + +import os, sys +sys.path.append(os.path.join(os.path.dirname(__file__), "..", "scripts")) + +from Util import runTestsWithPath + +runTestsWithPath(__file__) diff --git a/swift/ice.xcodeproj/project.pbxproj b/swift/ice.xcodeproj/project.pbxproj new file mode 100644 index 00000000000..b2782cf7558 --- /dev/null +++ b/swift/ice.xcodeproj/project.pbxproj @@ -0,0 +1,18536 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 0066FB05A623D454E52FC155 /* AllTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B7F934610D941B81F304A45 /* AllTests.swift */; }; + 00792C77914DC758FE793EA3 /* LocalException.ice in Sources */ = {isa = PBXBuildFile; fileRef = 030F29F231CBED0013A88C7B /* LocalException.ice */; }; + 0081B391BB9E4C1691F75675 /* Exception.ice in Sources */ = {isa = PBXBuildFile; fileRef = FD8F93A83F1728798AEE0123 /* Exception.ice */; }; + 008369161442731D9EC369FD /* ExternalAccessory.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 85FDF41433ED94733E1BC813 /* ExternalAccessory.framework */; }; + 00A147E234F95EA8645B27FF /* TraceLevels.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 241813D9F10FFD0E31CED44C /* TraceLevels.cpp */; }; + 00C861F27E8429FA1DD5B178 /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D41A319A7B3B147FDC8EA45 /* PromiseKit.framework */; }; + 0173C2108DE4B2F4FCD4BE55 /* SliceChecksumDict.ice in Sources */ = {isa = PBXBuildFile; fileRef = 463459FB7D8F704FD77898C4 /* SliceChecksumDict.ice */; }; + 01781FB36D41AF431EEFC443 /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D41A319A7B3B147FDC8EA45 /* PromiseKit.framework */; }; + 01C2412A320F699B3E117E25 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A74A24CD7ED2FBFECB9FED97 /* Cocoa.framework */; }; + 0207A29D754D2B128489D90C /* EndpointI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 438696C57A24E941A67A69B5 /* EndpointI.cpp */; }; + 020DD1C698232DD062033D93 /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D41A319A7B3B147FDC8EA45 /* PromiseKit.framework */; }; + 02415C47C5B09F8838DCBC4E /* TestI.swift in Sources */ = {isa = PBXBuildFile; fileRef = AAB25D7258209D619F6376D1 /* TestI.swift */; }; + 02658C6221656BD7A99DB740 /* AllTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3BF5A14B208DEAECF5A412C8 /* AllTests.swift */; }; + 027620F4E5DD6F3D9D794299 /* AllTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01AA575CAE3319A28CD5E7F4 /* AllTests.swift */; }; + 027745F1DBC32B76E1566181 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A74A24CD7ED2FBFECB9FED97 /* Cocoa.framework */; }; + 0289FB77EA23F8BCB92BB224 /* Collocated.swift in Sources */ = {isa = PBXBuildFile; fileRef = E628FC93DBC978079A724FF4 /* Collocated.swift */; }; + 02B9EB5AEC8D04F88ECD607F /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED07FE8864F33CBDEC73EA98 /* TestCommon.framework */; }; + 02C0FD25090FAA6FAD92D379 /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C7C5BFE9B16BF237E7782A4F /* Ice.framework */; }; + 02E6CE58740CBA06DB87A965 /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAD5CB65C9E749E09CE7AAEA /* Ice.framework */; }; + 031A03370342CCA7EA4F0D21 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 870EAA4BC7FF0C331853C50F /* Foundation.framework */; }; + 0320E320253B3D129FA475C5 /* Test.ice in Sources */ = {isa = PBXBuildFile; fileRef = E368CACB974FFFFD22404B7D /* Test.ice */; }; + 032834A166B038BD0C6970A1 /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAD5CB65C9E749E09CE7AAEA /* Ice.framework */; }; + 0332AE15E3D9DA0745162B72 /* Collocated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95D70577B75E2EF282CDA2F8 /* Collocated.swift */; }; + 034A3116A15B2244F71CB396 /* Collocated.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB75890D80B77241BDB185B2 /* Collocated.swift */; }; + 03530715ADB5BE824E31EB3F /* ObjectAdapterFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 15F2E4CA99023797339779F0 /* ObjectAdapterFactory.cpp */; }; + 03786D1E7F5714D1A72C7CA8 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A74A24CD7ED2FBFECB9FED97 /* Cocoa.framework */; }; + 0387CC3DD26CB7E81BA47927 /* Value.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B131399750F43672CA389DF5 /* Value.cpp */; }; + 0408FBF4731356EE15F03B29 /* Descriptor.ice in Sources */ = {isa = PBXBuildFile; fileRef = A2069630D4A927F86C4FBC80 /* Descriptor.ice */; }; + 04923DBF0E7D3AD4A5B72F55 /* Version.ice in Sources */ = {isa = PBXBuildFile; fileRef = B912CA6E0A1F10F0DF6E9E77 /* Version.ice */; }; + 04B79F3883EF777D77A690B4 /* IceSlicingExceptions.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 9DEB9C24CF5B2D68DEB44B1A /* IceSlicingExceptions.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + 04E9AAB3EE515276D8335D45 /* Incoming.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A9F6B38C8BBFEF026210B08 /* Incoming.cpp */; }; + 0524C2C2105973ED9C0F3046 /* Session.ice in Sources */ = {isa = PBXBuildFile; fileRef = 2F414D5E99A36BE073766A95 /* Session.ice */; }; + 05258514E8858952981AA10F /* Incoming.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A9F6B38C8BBFEF026210B08 /* Incoming.cpp */; }; + 0561404BB3BE93E87079750B /* ServerAMD.swift in Sources */ = {isa = PBXBuildFile; fileRef = B923D26B7ACBD6A753291EF2 /* ServerAMD.swift */; }; + 062B9241F6888AF7FE424F85 /* Metrics.ice in Sources */ = {isa = PBXBuildFile; fileRef = 1AA2AE3927EBF4C6E252C140 /* Metrics.ice */; }; + 066722DF9120BF918C6E0536 /* Server.swift in Sources */ = {isa = PBXBuildFile; fileRef = 476F4FDDFCDE084B13E4F39A /* Server.swift */; }; + 0684FB73646DC143EC99F6B7 /* ConsoleUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 240904EAE20C44F684F837C6 /* ConsoleUtil.cpp */; }; + 06C059ED7A9206DC215E9106 /* BuiltinSequences.ice in Sources */ = {isa = PBXBuildFile; fileRef = FE64D8105AAAEB060E6FA33A /* BuiltinSequences.ice */; }; + 06C96E8932554223A840AE0D /* MetricsAdminI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3632C5F63AE7689F894CBC54 /* MetricsAdminI.cpp */; }; + 06E95584CC8ED0956F2E01AB /* Collocated.swift in Sources */ = {isa = PBXBuildFile; fileRef = E628FC93DBC978079A724FF4 /* Collocated.swift */; }; + 070FEAC25814B75236C5A584 /* TestI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1423CA94EC8D93C8B70B8FB8 /* TestI.swift */; }; + 0746EACEBC040C979978D405 /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 622CA373CF127B6E7D1CF2C6 /* TestCommon.framework */; }; + 076A9FAB341C820C39D4899B /* TestI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 719ADF19645404C64EA92692 /* TestI.swift */; }; + 0799A3BB7DDD3834B48E8A6A /* ServerPrivate.ice in Sources */ = {isa = PBXBuildFile; fileRef = 9633B57E8267287F48291029 /* ServerPrivate.ice */; }; + 07B19A8F67DA6623D50D6525 /* InstrumentationF.ice in Sources */ = {isa = PBXBuildFile; fileRef = 90EFB1CE1C4B06CB3795BA7B /* InstrumentationF.ice */; }; + 07BAD62AB935D3806A4F0CF5 /* IceGridSwift.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BA5B7ABB4CB0BF942935864 /* IceGridSwift.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 07DA0B970A916316DBB220D5 /* ACM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FB1070ED2615D46D7FDFD027 /* ACM.cpp */; }; + 07E0B792B0CADEEC82ACE9ED /* Collocated.swift in Sources */ = {isa = PBXBuildFile; fileRef = E797BF17140520C3290ABFDC /* Collocated.swift */; }; + 07F8524E908A86039CD41579 /* PropertiesI.swift in Sources */ = {isa = PBXBuildFile; fileRef = C329F45DB1FD9E70F37C7823 /* PropertiesI.swift */; }; + 08601749EC3C097B6AB0DD0A /* FacetMap.ice in Sources */ = {isa = PBXBuildFile; fileRef = 5E8B177E95BA2D07DCEFDA1D /* FacetMap.ice */; }; + 08782D5FB89840CF6FF62423 /* Collocated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5947A3AA5EEBFF2631DACE41 /* Collocated.swift */; }; + 08BF1EF9E9879316EE783B96 /* Instrumentation.ice in Sources */ = {isa = PBXBuildFile; fileRef = DAEA5CA5740117C6BC42907B /* Instrumentation.ice */; }; + 0956C2267E4C66103CEDF72E /* IceInheritance.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 06F658397BEF3A330FDA4056 /* IceInheritance.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + 095C819136C5A2F0B46E5454 /* Exception.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFE0D57F8DD001E75530856B /* Exception.swift */; }; + 0989AFA0C5B5E41EF2B3AE91 /* ServerPrivate.ice in Sources */ = {isa = PBXBuildFile; fileRef = 9188C130AAD5F8B048DC36FF /* ServerPrivate.ice */; }; + 09CA76FF336297E541B38F62 /* Collocated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5947A3AA5EEBFF2631DACE41 /* Collocated.swift */; }; + 0A0C93299CC8C331BA803E40 /* ServerAMD.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1CE9F19AF6637FFEE12A205 /* ServerAMD.swift */; }; + 0A403FBA1FB1CABCFFDDC7E2 /* AllTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A301C0867F02FB9808FAC6AF /* AllTests.swift */; }; + 0A64DDAA19493DC1A1FA216B /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAD5CB65C9E749E09CE7AAEA /* Ice.framework */; }; + 0A652B9275FAED3946293AF2 /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 63D913EF7A0370FCA4F0D76A /* PromiseKit.framework */; }; + 0A92ACAF7069C4CDE7907C53 /* LocalExceptionDescription.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBFCC3CB5A23A85DE6AE2607 /* LocalExceptionDescription.swift */; }; + 0A93DAB54BE7666B4873A549 /* LoggerWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0BDC7ABB450D5DCFB59EBCB /* LoggerWrapper.swift */; }; + 0ABC0357FAC38F4628588F3D /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAD5CB65C9E749E09CE7AAEA /* Ice.framework */; }; + 0B2716A6299442BC5FD16D71 /* RegisterPluginsInit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2EB6DB1F8688EB1980F15640 /* RegisterPluginsInit.cpp */; }; + 0B2D3057B9F25CFE669F74AA /* TestAMDI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A8A24458E30DC80BCD1B434 /* TestAMDI.swift */; }; + 0B3168B5CC64A8343CD56489 /* ProcessI.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD3629FBA66A03B093AF336F /* ProcessI.swift */; }; + 0B3DB7966E6D54D6681FAA6E /* LocalException.ice in Sources */ = {isa = PBXBuildFile; fileRef = 030F29F231CBED0013A88C7B /* LocalException.ice */; }; + 0B4437075D5D65B411DF757B /* TestI.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA9CA8ABE0C8034574EE00F5 /* TestI.swift */; }; + 0B592828833EDAA6BC430E27 /* Server.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6AE3AEEADC3C6C8E0FB3C93 /* Server.swift */; }; + 0B88C6CF3E0220E0CBF85264 /* AllTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D5180800465FD5D453E63A6 /* AllTests.swift */; }; + 0BAA5C057654488A9B5BA981 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A74A24CD7ED2FBFECB9FED97 /* Cocoa.framework */; }; + 0BBE7D0E1F9EB821F6C2937D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 870EAA4BC7FF0C331853C50F /* Foundation.framework */; }; + 0BC19AB47F114C0F543ED202 /* IceScope.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 9DE0D76C9B9CA73D2B49DEC5 /* IceScope.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + 0BC9B04F73488B313EA01F0F /* IceDiscovery.ice in Sources */ = {isa = PBXBuildFile; fileRef = CD259FE076F39EEBA1958C54 /* IceDiscovery.ice */; }; + 0BDC6A6BAB50225B11E76532 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A74A24CD7ED2FBFECB9FED97 /* Cocoa.framework */; }; + 0C45F9D7143331F1EA9EBE6D /* EventHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B27746854547F83FD3400B1 /* EventHandler.cpp */; }; + 0C4860AB335A52D97CB526E9 /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 63D913EF7A0370FCA4F0D76A /* PromiseKit.framework */; }; + 0C73AD16B009068E720011FC /* ConnectRequestHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 80DFB051092F5C0B9386E466 /* ConnectRequestHandler.cpp */; }; + 0CAB78C8497337E1B93BE811 /* PropertiesF.ice in Sources */ = {isa = PBXBuildFile; fileRef = F57A0472503DA95892ED6B14 /* PropertiesF.ice */; }; + 0CAD7608BE60D73111D098CF /* IceDefaultServant.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 06D538137AA30E6A7A28C2A2 /* IceDefaultServant.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + 0CAD7BA690D2A96B34323761 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 870EAA4BC7FF0C331853C50F /* Foundation.framework */; }; + 0CF65747AEA1C642B61FBEC8 /* PluginF.ice in Sources */ = {isa = PBXBuildFile; fileRef = 488A75C9C0C95733FE145F5A /* PluginF.ice */; }; + 0D040353EA5624B097DEC0F3 /* TcpEndpointI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7548DFA80BEDA74E4E959478 /* TcpEndpointI.cpp */; }; + 0D2F9685B7C040AD3F6207F4 /* ServerAMD.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FB3724BBA6C5D4D698ACB54 /* ServerAMD.swift */; }; + 0D4A0FDF123411285994065F /* ObjectAdapterF.ice in Sources */ = {isa = PBXBuildFile; fileRef = 39F05C7B7976B9D17D483374 /* ObjectAdapterF.ice */; }; + 0D9CC34F57CD386352643C96 /* AllTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95B6991B5CF369BEF354B351 /* AllTests.swift */; }; + 0DA47AC99EB0372FE55FB5B7 /* PropertiesAdminI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14FABAAED2F701CC5D6E21C2 /* PropertiesAdminI.swift */; }; + 0E106C35889ACD1035538DF7 /* Server.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75E28A8A26A675D74CEE27DA /* Server.swift */; }; + 0E1260BB84A8814798CBFF68 /* EndpointInfo.ice in Sources */ = {isa = PBXBuildFile; fileRef = CE99BACF0BE149F69F2AFBFA /* EndpointInfo.ice */; }; + 0E52F9340F71FDFB58296FE6 /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D41A319A7B3B147FDC8EA45 /* PromiseKit.framework */; }; + 0E73FDFC58DA51C3EA9A3230 /* InputStream.swift in Sources */ = {isa = PBXBuildFile; fileRef = 911798EC58B6007855943BCB /* InputStream.swift */; }; + 0E98D65EEF9AB20E59219177 /* RetryQueue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ED2B0C01FC9F33222506FD38 /* RetryQueue.cpp */; }; + 0EA80D5F90DA744A548F8416 /* ConnectionI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 79B384D87B697743242782A4 /* ConnectionI.cpp */; }; + 0EFBBD15D2527804387E6290 /* Test.ice in Sources */ = {isa = PBXBuildFile; fileRef = 81DDF0548E42CFB37B7CD4C4 /* Test.ice */; }; + 0F2D41EF5125E610E1465AD6 /* IceServantLocatorAMD.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = E4C6A05E68524E4013034DC9 /* IceServantLocatorAMD.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + 0F49645BBD38E1B9D3DF58B4 /* Exception.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A98EBCF6F026FC4FF7AFD672 /* Exception.cpp */; }; + 0F5DBE402E6F5D3C8F4F5717 /* ConnectionF.ice in Sources */ = {isa = PBXBuildFile; fileRef = 828B38E787FC8723C83D4919 /* ConnectionF.ice */; }; + 0FAF08B6B8F8630EE0F47126 /* ServantLocator.ice in Sources */ = {isa = PBXBuildFile; fileRef = CAABDEC1B20906FA83353809 /* ServantLocator.ice */; }; + 0FE199E050C697DEDE7E37F5 /* OutgoingAsync.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 93F6B13E28C65453745EE726 /* OutgoingAsync.cpp */; }; + 0FF2847D2EFCB00FA045B40C /* RFC2253.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 825783EC43912BFE5482D5DF /* RFC2253.cpp */; }; + 102D580D0EADC27ABD848AB6 /* Main.storyboard in Sources */ = {isa = PBXBuildFile; fileRef = 8F5CFDD336873528BE970BAD /* Main.storyboard */; }; + 103DC65AAC1737D29E71EB42 /* FacetMap.ice in Sources */ = {isa = PBXBuildFile; fileRef = 5E8B177E95BA2D07DCEFDA1D /* FacetMap.ice */; }; + 10A6EB3407CEEAA4A71AA023 /* ConnectionInfo.ice in Sources */ = {isa = PBXBuildFile; fileRef = 251C120660145DCD5FB6FB5B /* ConnectionInfo.ice */; }; + 10BE066CFFEA63DF949C17F7 /* LoggerF.ice in Sources */ = {isa = PBXBuildFile; fileRef = 7F2F45A4AF18D649F0885E9B /* LoggerF.ice */; }; + 10EB2433EB852D7E3A50C7D9 /* TestI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44516D401491DBD4538B5906 /* TestI.swift */; }; + 1115456314096D06AB701C0B /* ServerAMD.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FB3724BBA6C5D4D698ACB54 /* ServerAMD.swift */; }; + 11254E7070871D3C72789AB7 /* Connection.ice in Sources */ = {isa = PBXBuildFile; fileRef = D6292E700118F4E42B326819 /* Connection.ice */; }; + 1134352FB4B1AA10585A69A3 /* Logger.ice in Sources */ = {isa = PBXBuildFile; fileRef = A7C655DD11BD41ED4C3D1E99 /* Logger.ice */; }; + 116A2D9083F126E7810679C3 /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C7C5BFE9B16BF237E7782A4F /* Ice.framework */; }; + 116D0ECFA5FC8EAF9001F75B /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 63D913EF7A0370FCA4F0D76A /* PromiseKit.framework */; }; + 11CFC6D8BCA000967B1A023D /* FactoryTable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B14DACBDF514B9BD2FC934DA /* FactoryTable.cpp */; }; + 1200090E7C8A288CAB15A546 /* CtrlCHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7F02FA98FF08CB088789D1C7 /* CtrlCHandler.cpp */; }; + 121C80D7AFBC0F464AC27839 /* IceProperties.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = A54D26BC0704A7705CF6E082 /* IceProperties.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + 124C3AF25C8C378A27B7EBBF /* Transceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6FDA009DD1E09F4AD8054EB9 /* Transceiver.cpp */; }; + 129E7BC2B182103CEAA52424 /* TestI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07504CB28A77E27A13CD5553 /* TestI.swift */; }; + 12A1C34D2900381FC44D3576 /* PluginI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 574BF372E6E418E4C6ED09C1 /* PluginI.cpp */; }; + 12E93D7EF859AF5233347937 /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C7C5BFE9B16BF237E7782A4F /* Ice.framework */; }; + 131D6777B9244CD128038CC7 /* AllTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A301C0867F02FB9808FAC6AF /* AllTests.swift */; }; + 1322CA62E8218E0BD774D6DD /* SecureTransportTransceiverI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A0AF0DCC30C5C540CE97CC4 /* SecureTransportTransceiverI.cpp */; }; + 133053EAA0D8A8381CF1C508 /* EndpointI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F96132367DF285FBBC548D6D /* EndpointI.cpp */; }; + 13C88E98118243BFAE8A2071 /* PropertyNames.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 14BC90C52DA9A3CAF39322CD /* PropertyNames.cpp */; }; + 140965E65CDB7F5C13A53AE3 /* ConnectionRequestHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 71F686B1842EE0F0668A7ADC /* ConnectionRequestHandler.cpp */; }; + 141B0C6DC4820DBCC978C3AB /* InstrumentationI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DBC747062704608D240AE0FE /* InstrumentationI.cpp */; }; + 146F1E57A7DB216D955FF8B1 /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED07FE8864F33CBDEC73EA98 /* TestCommon.framework */; }; + 147CF1E78C0647C531A533AA /* Properties.ice in Sources */ = {isa = PBXBuildFile; fileRef = 4A796EC75AE3F3A95CF44FF5 /* Properties.ice */; }; + 14B1DE2AFA42B56EFFCD0B4E /* Client.swift in Sources */ = {isa = PBXBuildFile; fileRef = E28EA8C2C7AA96A782A5AD34 /* Client.swift */; }; + 14C963AF776260AFA81C0010 /* RouterF.ice in Sources */ = {isa = PBXBuildFile; fileRef = 6709AE92A21F7B4AA66E804F /* RouterF.ice */; }; + 14EB7CA690B8F9133A0CC32D /* ConnectionInfoF.ice in Sources */ = {isa = PBXBuildFile; fileRef = C2362DD1D9852CFEEBAED065 /* ConnectionInfoF.ice */; }; + 1511E2FD5FCE84CBB84528BC /* MutexProtocol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9245071A4DE8D8E016961500 /* MutexProtocol.cpp */; }; + 15254EECA5F1DCE304A10D6A /* Test.ice in Sources */ = {isa = PBXBuildFile; fileRef = 3B85A3BA1C4E1813167238B1 /* Test.ice */; }; + 15527A2DCF387F1DC268F522 /* NativePropertiesAdmin.swift in Sources */ = {isa = PBXBuildFile; fileRef = B405F0A79A60C68C7D5FA6B6 /* NativePropertiesAdmin.swift */; }; + 158C2D497FCAA36F4A1CCC7D /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED07FE8864F33CBDEC73EA98 /* TestCommon.framework */; }; + 158CB2EFA55A9FB86FD42000 /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D41A319A7B3B147FDC8EA45 /* PromiseKit.framework */; }; + 15B84448322C0BC254EDE36E /* Client.swift in Sources */ = {isa = PBXBuildFile; fileRef = 822BAFEABECEDD0F2875C9A2 /* Client.swift */; }; + 15C2E4C12F7C67F48A32DC0A /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C7C5BFE9B16BF237E7782A4F /* Ice.framework */; }; + 15F4C897B04F59357E1D7776 /* RouterF.ice in Sources */ = {isa = PBXBuildFile; fileRef = 6709AE92A21F7B4AA66E804F /* RouterF.ice */; }; + 161B62C32C7EAABE83DA6978 /* TrustManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5FE4A2CF0D4682384614B575 /* TrustManager.cpp */; }; + 16242CCCAB9343118922A028 /* LocatorF.ice in Sources */ = {isa = PBXBuildFile; fileRef = 0324299CF5CA4E7302B4ACAC /* LocatorF.ice */; }; + 1625BD16048EEF46F5FDC8D7 /* ServantLocatorI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81B7B64819E414CA3B2A2EE1 /* ServantLocatorI.swift */; }; + 16A9AC4A541EEF2061BDABAD /* StringConverter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9BAAC87A1922606E9DD4593C /* StringConverter.cpp */; }; + 17329A4BE8E1743CB567EA4A /* TraceUtil.mm in Sources */ = {isa = PBXBuildFile; fileRef = 6F67B6869ECDEBB8425E91EB /* TraceUtil.mm */; }; + 1754868FDAAFF2EBF6F534C9 /* PropertiesAdminI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 70565ECB1A3515AB0C667598 /* PropertiesAdminI.cpp */; }; + 17707E3099D207F2770C9392 /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED07FE8864F33CBDEC73EA98 /* TestCommon.framework */; }; + 178B82AD768A37F439841B4C /* RemoteLogger.ice in Sources */ = {isa = PBXBuildFile; fileRef = 523B9454C940E0D81E8047AF /* RemoteLogger.ice */; }; + 17D851C4F5C42EE68FB4FDAE /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAD5CB65C9E749E09CE7AAEA /* Ice.framework */; }; + 18216299BB52E0E1E4ED8B31 /* ObjectAdapter.mm in Sources */ = {isa = PBXBuildFile; fileRef = C284F41389035557B72DC921 /* ObjectAdapter.mm */; }; + 1876C9A3C65DD2703F1F3ACC /* ImplicitContext.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2856C294561B45DE0AAF3F61 /* ImplicitContext.mm */; }; + 18C25C3D5AA6FD0A45046AFE /* TestAMD.ice in Sources */ = {isa = PBXBuildFile; fileRef = 300F8FB7BD45F093F4626D58 /* TestAMD.ice */; }; + 190664DCC1D588091A49299F /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED07FE8864F33CBDEC73EA98 /* TestCommon.framework */; }; + 193874554671D567CEDEB883 /* AllTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 737728F65186B1B6E7C4D3CA /* AllTests.swift */; }; + 196AEA543D0F1BBE65CCB907 /* Test.ice in Sources */ = {isa = PBXBuildFile; fileRef = ED2FACB490C9A2EC5A501FB9 /* Test.ice */; }; + 198A053EC77660963FA11C93 /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 63D913EF7A0370FCA4F0D76A /* PromiseKit.framework */; }; + 19B3B8A5A77340E581A4E993 /* UdpEndpointI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6677DC4BA022BF3A4991609E /* UdpEndpointI.cpp */; }; + 19B6FB9FBE7F6C835A2FA1EB /* TestI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8EA814FAFAE21BEA08FDE9D1 /* TestI.swift */; }; + 19CD8F010E169FC6028AD24E /* Server.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2720E37C8DAA9D7FD5B5216D /* Server.swift */; }; + 19CEDF36D236870EB6116849 /* Time.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BFBAEAB4EA096824A6EC790D /* Time.cpp */; }; + 19DCB33E479104CECD613510 /* Locator.ice in Sources */ = {isa = PBXBuildFile; fileRef = 2D0747ED96A227648F3E66B2 /* Locator.ice */; }; + 1A29D18FFF8F14ACDC9F1C5E /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 63D913EF7A0370FCA4F0D76A /* PromiseKit.framework */; }; + 1A2C3EE38E327B1FF8435526 /* AllTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D244C8F931231B7714E673B /* AllTests.swift */; }; + 1A365B98B8FF8BCA7892AE51 /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 622CA373CF127B6E7D1CF2C6 /* TestCommon.framework */; }; + 1ABDE1F3B058A08D67A99D2C /* Test.ice in Sources */ = {isa = PBXBuildFile; fileRef = DB73E84768C9BEB4E05AC522 /* Test.ice */; }; + 1AC281332068D5FADC6A31B7 /* BlobjectFacade.mm in Sources */ = {isa = PBXBuildFile; fileRef = E4FC64A9E74B4DBB9C9A057C /* BlobjectFacade.mm */; }; + 1AC8F65D4457FD557E68CF25 /* StringConverter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9BAAC87A1922606E9DD4593C /* StringConverter.cpp */; }; + 1AF9D01D78090698FC5FE71E /* Test.ice in Sources */ = {isa = PBXBuildFile; fileRef = CFA93665AC82E5AE1150E268 /* Test.ice */; }; + 1B93FEC954CD2CDBDCDDD93A /* ServantLocatorF.ice in Sources */ = {isa = PBXBuildFile; fileRef = A373F10D83CCD608A39E3835 /* ServantLocatorF.ice */; }; + 1B9F8CF25A8088376A00E78B /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A74A24CD7ED2FBFECB9FED97 /* Cocoa.framework */; }; + 1BEE11E294F149B37303F51F /* NetworkProxy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0C7C4954E6E427052EAA79D3 /* NetworkProxy.cpp */; }; + 1BFD51F465639535C2F791EA /* Server.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C1B9082D7C66385A1F84BD7 /* Server.swift */; }; + 1C146741585801C85CFD69DE /* Transceiver.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5876CCBAE6AAC096CB461F82 /* Transceiver.mm */; }; + 1CC7B3E3BB8C38C1C8B2CD60 /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 622CA373CF127B6E7D1CF2C6 /* TestCommon.framework */; }; + 1CE1858D654370A0F5A97699 /* LocatorF.ice in Sources */ = {isa = PBXBuildFile; fileRef = 0324299CF5CA4E7302B4ACAC /* LocatorF.ice */; }; + 1D12A96FC7C7628ECC3291EC /* Server.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5DC688033A9F5344D4120EA9 /* Server.swift */; }; + 1D2478994B03EDF7146CFB2C /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 622CA373CF127B6E7D1CF2C6 /* TestCommon.framework */; }; + 1D37C2057FBFA8924D102337 /* AllTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2BC96422360316AF829DC82F /* AllTests.swift */; }; + 1D5227E6239D1A6D22605E73 /* Test.ice in Sources */ = {isa = PBXBuildFile; fileRef = CFA93665AC82E5AE1150E268 /* Test.ice */; }; + 1D526D3AF12DD14972E093D4 /* IceServantLocator.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 63FB631C2469790D2A77A6C1 /* IceServantLocator.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + 1D6E4A51FFB99C028FB6D16B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 870EAA4BC7FF0C331853C50F /* Foundation.framework */; }; + 1DA2A12433FFD2A5DFBACDD2 /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED07FE8864F33CBDEC73EA98 /* TestCommon.framework */; }; + 1DDE57276F39699117FC1821 /* CommunicatorF.ice in Sources */ = {isa = PBXBuildFile; fileRef = 1253B9777BCF966221D0C86F /* CommunicatorF.ice */; }; + 1DEF6854F6E2CF77BB08EF36 /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 622CA373CF127B6E7D1CF2C6 /* TestCommon.framework */; }; + 1E101E298583A48138E15A74 /* OSLogLoggerI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EDF8E5A8A5004B676A0BDF25 /* OSLogLoggerI.cpp */; }; + 1E32F5E12050940ADBF48B63 /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D41A319A7B3B147FDC8EA45 /* PromiseKit.framework */; }; + 1EC7FEE0B3D397C4EFAB2C43 /* TestI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17D070013CAD1AF6D9C58593 /* TestI.swift */; }; + 1ED0538B6101C3F018204E77 /* DefaultsAndOverrides.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D54F27BBB79EC99E49FB8337 /* DefaultsAndOverrides.cpp */; }; + 1F207049945C2BAEAB7984DF /* ConnectionInfoFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3056C5DA712F55A97B05A44 /* ConnectionInfoFactory.swift */; }; + 1F297C927FE9248694042109 /* Thread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C429BA52E5200E492155ADFB /* Thread.cpp */; }; + 1FCE7CBF751B81D1BFCAED5B /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAD5CB65C9E749E09CE7AAEA /* Ice.framework */; }; + 2055394AD261FB35FFA6E352 /* IceLocatorDiscovery.ice in Sources */ = {isa = PBXBuildFile; fileRef = 56B83B797BCB69269ADCD3E3 /* IceLocatorDiscovery.ice */; }; + 20AC270F1626B3F73A3480DD /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A74A24CD7ED2FBFECB9FED97 /* Cocoa.framework */; }; + 20CCF09AA09AB304FCCCCAA6 /* MetricsObserverI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 89475D08DAA465BCAC6BF4D7 /* MetricsObserverI.cpp */; }; + 20E3F1D7ADBE03E93602402A /* SysLoggerI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CFAAE2F5B1D4A3050CD17E97 /* SysLoggerI.cpp */; }; + 2116F22D5255900C82DD146D /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C7C5BFE9B16BF237E7782A4F /* Ice.framework */; }; + 21D161D034F0F7117EBD56BE /* Client.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF2E3A220AC9E9A060DB583D /* Client.swift */; }; + 221DD011A9B36293C7552A25 /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAD5CB65C9E749E09CE7AAEA /* Ice.framework */; }; + 221EF3874241D1A3D69EC695 /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C7C5BFE9B16BF237E7782A4F /* Ice.framework */; }; + 22370DB643D68C7F2AC452B2 /* SystemdJournalI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BD08E0917CB9C3B366951D3 /* SystemdJournalI.cpp */; }; + 225524BC1FA7587DE0E46A5F /* Client.swift in Sources */ = {isa = PBXBuildFile; fileRef = 359279F78A2113594A1CF8A8 /* Client.swift */; }; + 22692E0B29D17761FDA56D8A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 870EAA4BC7FF0C331853C50F /* Foundation.framework */; }; + 226BFF697F187F5A11C72142 /* IceInfo.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 44A837C5842979328742845D /* IceInfo.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + 226F8576B8B318BC5840F69C /* Network.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 63A7DA541926380531C3B8E8 /* Network.cpp */; }; + 2270105FD23484AD7E635144 /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAD5CB65C9E749E09CE7AAEA /* Ice.framework */; }; + 22AC18A400F59DA741B40196 /* Server.swift in Sources */ = {isa = PBXBuildFile; fileRef = C62FA99000CCECFFFBB3FFC3 /* Server.swift */; }; + 22E6B2C97E645E727D6846C2 /* ObjectAdapterF.ice in Sources */ = {isa = PBXBuildFile; fileRef = 39F05C7B7976B9D17D483374 /* ObjectAdapterF.ice */; }; + 2366BCB4D4545C8CBE7C63F3 /* Test.ice in Sources */ = {isa = PBXBuildFile; fileRef = C9B9DCE19FD35FC0F6AD1D4D /* Test.ice */; }; + 238223EBAA43A9900E5C6674 /* AcceptorI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 61643EA5813C280FBB5DCA70 /* AcceptorI.cpp */; }; + 23BA98286B263C444BDCFCA8 /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 63D913EF7A0370FCA4F0D76A /* PromiseKit.framework */; }; + 24035600F3E8C9CC4C419E53 /* Server.swift in Sources */ = {isa = PBXBuildFile; fileRef = D4153C0A035AFF362A8D7A6E /* Server.swift */; }; + 244F74385045B2ECF5448516 /* LocalException.ice in Sources */ = {isa = PBXBuildFile; fileRef = 030F29F231CBED0013A88C7B /* LocalException.ice */; }; + 24591C7ACEC9152A4FE77151 /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAD5CB65C9E749E09CE7AAEA /* Ice.framework */; }; + 245D0FD5B61BF7B9D30066CD /* Endpoint.ice in Sources */ = {isa = PBXBuildFile; fileRef = CEDF515DDF519A53EF31E84C /* Endpoint.ice */; }; + 2461BF59BCE9C690D420F662 /* Test.ice in Sources */ = {isa = PBXBuildFile; fileRef = B2F7E5D229333C92C6146AC4 /* Test.ice */; }; + 246A078751FC2E59CEB8F105 /* PermissionsVerifier.ice in Sources */ = {isa = PBXBuildFile; fileRef = 60D1641294029748233057E1 /* PermissionsVerifier.ice */; }; + 24B3ACE69C5AC1AC45684F2B /* IceProxyAMD.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 0C4A61DF34D8B6DA32B58EF3 /* IceProxyAMD.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + 24B8B2FC969F4F461D8E0EB5 /* IceOperations.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 03C4192F0524006FB342718D /* IceOperations.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + 25113E8AA23FD67137E71431 /* libIceLocatorDiscovery C++11 macOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D0FF6202727A575BFDDD22A6 /* libIceLocatorDiscovery C++11 macOS.a */; }; + 252093E4966061D18C34A717 /* ValueFactory.ice in Sources */ = {isa = PBXBuildFile; fileRef = 020836068D73A79D4DCE6A0C /* ValueFactory.ice */; }; + 2571886FA0167BF4E08BA18D /* Initialize.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BFDA8F3C438AF1F853497C0 /* Initialize.swift */; }; + 25817D629469273EFCE386B6 /* Ice.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = C7C5BFE9B16BF237E7782A4F /* Ice.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + 25E7343180B4033A6E217616 /* ValueFactory.ice in Sources */ = {isa = PBXBuildFile; fileRef = 020836068D73A79D4DCE6A0C /* ValueFactory.ice */; }; + 25F8EDDC499DA91BC422C429 /* ObjectAdapterF.ice in Sources */ = {isa = PBXBuildFile; fileRef = 39F05C7B7976B9D17D483374 /* ObjectAdapterF.ice */; }; + 261F5C1AC65993E6DA67EBD5 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A74A24CD7ED2FBFECB9FED97 /* Cocoa.framework */; }; + 269072A92ECEB0C74B35624E /* Server.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E043CCAB631BD471DEF5B6E /* Server.swift */; }; + 26B72F7E195520DD3C53A701 /* Proxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 173315ECEF41B1A98A00B666 /* Proxy.swift */; }; + 26D03EF0E31501EA5BA4877C /* ImplicitContext.ice in Sources */ = {isa = PBXBuildFile; fileRef = 4C1E574FCAD6BE4FD30AAEF9 /* ImplicitContext.ice */; }; + 271BECBF433A2B9DBA94D2B2 /* SHA1.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4771A7DB0DD97F7601FBE649 /* SHA1.cpp */; }; + 27386722D3B6F16AD5823C41 /* TestAMDI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84D759E6446D5F71CE241600 /* TestAMDI.swift */; }; + 27A11B123332BDF8E82E599A /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED07FE8864F33CBDEC73EA98 /* TestCommon.framework */; }; + 27A368D789B51D658B2527A9 /* Incoming.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18E3542529153EB181E880EF /* Incoming.swift */; }; + 27D895095EA59A7115DEC5D3 /* InitializationData.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0793AF8CBDD07CA59ED7EED /* InitializationData.swift */; }; + 283E8AEC23A3AF1C2F0229F2 /* Random.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2EF912517FE2F9E06B375F87 /* Random.cpp */; }; + 28A6440C0E30ACD1FC3501F9 /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAD5CB65C9E749E09CE7AAEA /* Ice.framework */; }; + 28AE771787CE3654CB4C1BE5 /* ProcessI.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD3629FBA66A03B093AF336F /* ProcessI.swift */; }; + 28EBB364FDF91A8461EDC0C4 /* ServantManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F62C515D81B4ECC1B8F7ECC2 /* ServantManager.cpp */; }; + 2980A864D03FFAB2715E9B18 /* PermissionsVerifier.ice in Sources */ = {isa = PBXBuildFile; fileRef = 60D1641294029748233057E1 /* PermissionsVerifier.ice */; }; + 29951E9C484005A7D898C1A4 /* Util.swift in Sources */ = {isa = PBXBuildFile; fileRef = 851C3F8D55FA569B433B5FD5 /* Util.swift */; }; + 29C62000FE11F6F365EBB29B /* BlobjectAsync.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0290A48F7C23A5D1DDAD3AC1 /* BlobjectAsync.swift */; }; + 29FF2A74A4B599A629F2DEC1 /* UtilException.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BF1BCF9C50968F7FEB3324F6 /* UtilException.cpp */; }; + 2A7A7DAF6B232AD281F95812 /* CommunicatorI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1DF68240A0F93CA79AB86926 /* CommunicatorI.cpp */; }; + 2A7CD5CB6A1392FA3E4E3CC6 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A74A24CD7ED2FBFECB9FED97 /* Cocoa.framework */; }; + 2A88685405F115C51FD403E4 /* IceDefaultValue.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 163EB528D7D26A1820BD9E1A /* IceDefaultValue.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + 2AA97AFF0DA50397A7E1A7DD /* IceServantLocatorAMD.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = FB37603A7E1259106EF33F05 /* IceServantLocatorAMD.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + 2B6BE46EAE186B342433147A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 870EAA4BC7FF0C331853C50F /* Foundation.framework */; }; + 2B877AB082A7117D68015E25 /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D41A319A7B3B147FDC8EA45 /* PromiseKit.framework */; }; + 2B8FBF0D9552DFD0CAA3D330 /* UUID.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5659A452A8240A244425F4FC /* UUID.cpp */; }; + 2BB4490C1624FD06B164D961 /* PropertiesF.ice in Sources */ = {isa = PBXBuildFile; fileRef = F57A0472503DA95892ED6B14 /* PropertiesF.ice */; }; + 2BDC55071E4DE407042F0A19 /* IceStorm.ice in Sources */ = {isa = PBXBuildFile; fileRef = A0C05CB1065C9BC36847B733 /* IceStorm.ice */; }; + 2BE1F5A1B3CF814B8D43913A /* IceInvoke.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 952E665CC33C0FD5B7BB55BB /* IceInvoke.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + 2C14FC1079EBA5A3D607112F /* ObjectAdapterF.ice in Sources */ = {isa = PBXBuildFile; fileRef = 39F05C7B7976B9D17D483374 /* ObjectAdapterF.ice */; }; + 2C35645A3D8CF45B184307A5 /* TestAMD.ice in Sources */ = {isa = PBXBuildFile; fileRef = CE5804052FC5A96D221B8803 /* TestAMD.ice */; }; + 2C4F138BD2F675D5FF790B3B /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C7C5BFE9B16BF237E7782A4F /* Ice.framework */; }; + 2CABFE586BD21D70A8F656D3 /* LocatorF.ice in Sources */ = {isa = PBXBuildFile; fileRef = 0324299CF5CA4E7302B4ACAC /* LocatorF.ice */; }; + 2CB30F36C8F8F14A84179776 /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C7C5BFE9B16BF237E7782A4F /* Ice.framework */; }; + 2D1A757825819086C7721170 /* AllTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2BC96422360316AF829DC82F /* AllTests.swift */; }; + 2D5850EB1105C16C1A4DE7B5 /* Client.swift in Sources */ = {isa = PBXBuildFile; fileRef = EEB80E71EB7BE144DED9D320 /* Client.swift */; }; + 2D63E46FAC27E272B060E677 /* ServerPrivate.ice in Sources */ = {isa = PBXBuildFile; fileRef = 9188C130AAD5F8B048DC36FF /* ServerPrivate.ice */; }; + 2D6A4EB56775C3B7563AF148 /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D41A319A7B3B147FDC8EA45 /* PromiseKit.framework */; }; + 2D8612D799BD9AD5FDA4DED7 /* LocalObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6CDAF82F7706588F392E7300 /* LocalObject.cpp */; }; + 2DAB164FFC676DDD181D6553 /* Exception.ice in Sources */ = {isa = PBXBuildFile; fileRef = FD8F93A83F1728798AEE0123 /* Exception.ice */; }; + 2DBC52523B0B8051A0E77869 /* Client.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1714B9E2F7542EBF1F7C50DA /* Client.swift */; }; + 2E60FCCD0A298E94DF3A1DBE /* ImplicitContext.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2856C294561B45DE0AAF3F61 /* ImplicitContext.mm */; }; + 2EACEEB10AE9F7C01B2A04E7 /* Client.swift in Sources */ = {isa = PBXBuildFile; fileRef = 42852A32ED4AE895BFAAA6CA /* Client.swift */; }; + 2EB68AB41E09C0EB1E7E115A /* TcpEndpointI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7548DFA80BEDA74E4E959478 /* TcpEndpointI.cpp */; }; + 2F0328BEA29038D125A04AEA /* OutputUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6EC8AC1A2176680E2BE40014 /* OutputUtil.cpp */; }; + 2F17C2E71F52076551DA4C7E /* TestI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17D070013CAD1AF6D9C58593 /* TestI.swift */; }; + 2F22AFB1B431725502346E42 /* Admin.ice in Sources */ = {isa = PBXBuildFile; fileRef = 71A96FD335DA471AC7150A42 /* Admin.ice */; }; + 2F398F42089092F1F55647BE /* Endpoint.ice in Sources */ = {isa = PBXBuildFile; fileRef = CEDF515DDF519A53EF31E84C /* Endpoint.ice */; }; + 2F850A0F4EEA9414010292B3 /* AllTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80B853408ED79054E6964CD6 /* AllTests.swift */; }; + 2F95B31D192119D7F2FC4570 /* TestAMDI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FEDB803435645F58EFFC661 /* TestAMDI.swift */; }; + 303BA643841DF915FF75CA43 /* IceServantLocator.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 2FDEB40857CC76910C985FA8 /* IceServantLocator.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + 3079A1D67984402AE8474CFD /* InitializationData.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0793AF8CBDD07CA59ED7EED /* InitializationData.swift */; }; + 30931EB54C0C283804BAEF81 /* Value.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81534B568DDF6C96DC83A047 /* Value.swift */; }; + 30D850BB0D43BF80FAA96EB9 /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAD5CB65C9E749E09CE7AAEA /* Ice.framework */; }; + 30D91F750423EAF6E0A3AA4E /* IceLocatorDiscovery.ice in Sources */ = {isa = PBXBuildFile; fileRef = 56B83B797BCB69269ADCD3E3 /* IceLocatorDiscovery.ice */; }; + 30FA46ECC55C45C83506973B /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAD5CB65C9E749E09CE7AAEA /* Ice.framework */; }; + 3106DD435CA85253D14154DA /* Server.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAA4A859A9283C6D0B233CAE /* Server.swift */; }; + 310B78C5656DB70A841C1B55 /* PromiseKit.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 6D41A319A7B3B147FDC8EA45 /* PromiseKit.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + 310CFE1D3DC3AA4FD8D70A47 /* RouterInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 71F7CDB885CFFA255B8704DA /* RouterInfo.cpp */; }; + 3114BB4DA90C803B1164C1CD /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D41A319A7B3B147FDC8EA45 /* PromiseKit.framework */; }; + 314CF076C9DF0B975C45BB07 /* ServantManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A001D5976E7EBCEFED2B608 /* ServantManager.swift */; }; + 314F57A03CD6516ABB10A2AE /* Client.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1146EA738EEBF0E8643A7CD7 /* Client.swift */; }; + 315D356975870C84B3977579 /* PluginManagerI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5D7BC837A190E8C95AAD223D /* PluginManagerI.cpp */; }; + 316A86CB63D0D7C9E8057DE0 /* TestCommon.swift in Sources */ = {isa = PBXBuildFile; fileRef = 303C14482E7E9485547E6FFD /* TestCommon.swift */; }; + 319577A24E9D3843475721F0 /* ServerAMD.swift in Sources */ = {isa = PBXBuildFile; fileRef = 037FD47584D12123792BDA88 /* ServerAMD.swift */; }; + 319EB6ADDABE81055D66844A /* Server.swift in Sources */ = {isa = PBXBuildFile; fileRef = 007AC5018F40F695098F6B05 /* Server.swift */; }; + 31E36AC26107A4EF2817236A /* LocalObject.mm in Sources */ = {isa = PBXBuildFile; fileRef = F6AF11149756D4636F97B86E /* LocalObject.mm */; }; + 321485FE3F8C35C5A258B489 /* Registry.ice in Sources */ = {isa = PBXBuildFile; fileRef = B716BD86823CBA85EFEE6513 /* Registry.ice */; }; + 32CD6BCD5B098639116B1684 /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAD5CB65C9E749E09CE7AAEA /* Ice.framework */; }; + 331D2A4743EE0EBF4369EDB8 /* Notifications.mm in Sources */ = {isa = PBXBuildFile; fileRef = 72A5A83540F1CD36566EDF59 /* Notifications.mm */; }; + 334E5B86040998937B000AA5 /* OutputStream.swift in Sources */ = {isa = PBXBuildFile; fileRef = 48F4EF698C0373A8B76A2663 /* OutputStream.swift */; }; + 335477464957FC3DB7EB547D /* Logger.ice in Sources */ = {isa = PBXBuildFile; fileRef = A7C655DD11BD41ED4C3D1E99 /* Logger.ice */; }; + 3356908D4AB2230AC735A111 /* LoggerF.ice in Sources */ = {isa = PBXBuildFile; fileRef = 7F2F45A4AF18D649F0885E9B /* LoggerF.ice */; }; + 339B38347D04907C87694EB6 /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 63D913EF7A0370FCA4F0D76A /* PromiseKit.framework */; }; + 33B1079CED187701D69550A8 /* Collocated.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB75890D80B77241BDB185B2 /* Collocated.swift */; }; + 33CB0655CD72D88C4F79B1F5 /* Test.ice in Sources */ = {isa = PBXBuildFile; fileRef = 52D7B25FF0A236B7B69B2B48 /* Test.ice */; }; + 33E10CEECCB7C180B466EA38 /* TestAMD.ice in Sources */ = {isa = PBXBuildFile; fileRef = 1F6E970957A11B1AE6EF71DB /* TestAMD.ice */; }; + 343A2365223EF022186D9078 /* PluginF.ice in Sources */ = {isa = PBXBuildFile; fileRef = 488A75C9C0C95733FE145F5A /* PluginF.ice */; }; + 34BE044B0EAF225B177C3CE2 /* AllTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 067C85F35976F4DEF23B57DB /* AllTests.swift */; }; + 34F3A3C1EF977FFA8BC8AC23 /* TestI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6EC50A5D5A8848770F31576D /* TestI.swift */; }; + 353D30FD103BAD4BA700FEFD /* FileUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EEA3F903D78E2993FA6F98DD /* FileUtil.cpp */; }; + 35BE914D175254D87B52F79C /* ObserverHelper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3721236531620DBCBEB39D41 /* ObserverHelper.cpp */; }; + 35BFCCDF41E420E108D463EC /* Test.ice in Sources */ = {isa = PBXBuildFile; fileRef = E368CACB974FFFFD22404B7D /* Test.ice */; }; + 35FFE2FF88A64ADCCB73E680 /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D41A319A7B3B147FDC8EA45 /* PromiseKit.framework */; }; + 361A4990DDFBDC01553B314F /* Connection.mm in Sources */ = {isa = PBXBuildFile; fileRef = 366C5D3266D9C6C5D60E338C /* Connection.mm */; }; + 36784DAE1087C3F2F1B0D55F /* CommunicatorI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1DF68240A0F93CA79AB86926 /* CommunicatorI.cpp */; }; + 36A33E74A48DF60595D94BD4 /* OutputStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FABD6EB0E182EA49D4B5766E /* OutputStream.cpp */; }; + 36BCD811BC01E4274BCF2568 /* RequestHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 52E6495C52AF1860B1907025 /* RequestHandler.cpp */; }; + 36E3FE9128313023BD1058B0 /* PropertiesAdmin.ice in Sources */ = {isa = PBXBuildFile; fileRef = 2288D724247415182EE9EED7 /* PropertiesAdmin.ice */; }; + 371C63738EE0582715C6AD29 /* ACM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FB1070ED2615D46D7FDFD027 /* ACM.cpp */; }; + 37235F125F0F5ED17183970D /* ServerAMD.swift in Sources */ = {isa = PBXBuildFile; fileRef = 457E31EE594CC88F3A44A799 /* ServerAMD.swift */; }; + 3730BD7FF3D35E5BD9757278 /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED07FE8864F33CBDEC73EA98 /* TestCommon.framework */; }; + 37583621DD8B4D0198D9DB94 /* IncomingAsync.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 887AF44AB027F6D7F3BA5D34 /* IncomingAsync.cpp */; }; + 376D8F51C0A8097D03BD8C4B /* IceDefaultServant.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = C2F3779808DBC5ED79EEFBF0 /* IceDefaultServant.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + 379A65604C82A0A96199109B /* ImplicitContextI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0A1C910BAD79CB90B4E3DC5 /* ImplicitContextI.cpp */; }; + 37ACBA61D40679F130362D3B /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C7C5BFE9B16BF237E7782A4F /* Ice.framework */; }; + 37B434042D4A50299206AA2F /* ImplicitContextF.ice in Sources */ = {isa = PBXBuildFile; fileRef = 6B0972F4B9891E7569954312 /* ImplicitContextF.ice */; }; + 37BD94AC805ABCD3DD133233 /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 63D913EF7A0370FCA4F0D76A /* PromiseKit.framework */; }; + 381A32448D4F563BBD8F3B33 /* IceSSLConfiguration.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 309B6BAC2D50E248C757311C /* IceSSLConfiguration.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + 382F77949F441CCDA40237FD /* Instrumentation.ice in Sources */ = {isa = PBXBuildFile; fileRef = DAEA5CA5740117C6BC42907B /* Instrumentation.ice */; }; + 387A65A799F2EF13F0B82077 /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 622CA373CF127B6E7D1CF2C6 /* TestCommon.framework */; }; + 387F1BDB28D6BC841B257F40 /* PluginF.ice in Sources */ = {isa = PBXBuildFile; fileRef = 488A75C9C0C95733FE145F5A /* PluginF.ice */; }; + 38A690BB0204258D7CC71A94 /* UUID.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5659A452A8240A244425F4FC /* UUID.cpp */; }; + 38ADB9C2D855400F02A5288E /* Router.ice in Sources */ = {isa = PBXBuildFile; fileRef = B497B16BCF0F6A55224FFDB0 /* Router.ice */; }; + 3925A587BEBFD5563B28B337 /* EndpointTypes.ice in Sources */ = {isa = PBXBuildFile; fileRef = A6D1E38568D7656F13F57D5A /* EndpointTypes.ice */; }; + 3931BBCB99D7EF495920569B /* TestCommon.swift in Sources */ = {isa = PBXBuildFile; fileRef = 303C14482E7E9485547E6FFD /* TestCommon.swift */; }; + 393D79B00E02566DC29BC6D0 /* OutputUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6EC8AC1A2176680E2BE40014 /* OutputUtil.cpp */; }; + 39750DF2B490D70B5E2B6AE7 /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 63D913EF7A0370FCA4F0D76A /* PromiseKit.framework */; }; + 398E6814A2DB7FB34355C3C8 /* Util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2581CADFB1C4EBF2F4EAD662 /* Util.cpp */; }; + 39C836F272F0C12E603F709E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 870EAA4BC7FF0C331853C50F /* Foundation.framework */; }; + 39F4F2F439211047D2199843 /* Test.ice in Sources */ = {isa = PBXBuildFile; fileRef = 457855F403B22BF39C75B16F /* Test.ice */; }; + 3A39E3AA6732B844613175F0 /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 622CA373CF127B6E7D1CF2C6 /* TestCommon.framework */; }; + 3A5A3F0F1C5A7B9DEEA6A68C /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A74A24CD7ED2FBFECB9FED97 /* Cocoa.framework */; }; + 3AF718A41FCC7BA4BC9940A9 /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D41A319A7B3B147FDC8EA45 /* PromiseKit.framework */; }; + 3B1ED7DCDED985B4A4AC2296 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 870EAA4BC7FF0C331853C50F /* Foundation.framework */; }; + 3B26B235184670A160541BB1 /* SecureTransportCertificateI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CAC5452C269A362D8DCD26F3 /* SecureTransportCertificateI.cpp */; }; + 3B386AC589DF49B91FEB07EE /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 63D913EF7A0370FCA4F0D76A /* PromiseKit.framework */; }; + 3B65968289BE065ACA1E7CD0 /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 622CA373CF127B6E7D1CF2C6 /* TestCommon.framework */; }; + 3BF080B95D70506691124BD2 /* IceAdapterDeactivation.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 54FBF62F717A8E7B3E7E34D9 /* IceAdapterDeactivation.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + 3BF9D91C1C098EBF2CA42457 /* TestAMDI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 594A5893311594ABA84DDE2E /* TestAMDI.swift */; }; + 3BFA5FC721C782DE8B8FE580 /* TestI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85A108B0EC561AA0BF6C2FCD /* TestI.swift */; }; + 3C124267EB06BCE333034FED /* LocatorInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48588A0FEC71B23F244B557F /* LocatorInfo.cpp */; }; + 3C2617C4E4428C2098965E8C /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D41A319A7B3B147FDC8EA45 /* PromiseKit.framework */; }; + 3C6989E63E19B0829AEF1C91 /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 622CA373CF127B6E7D1CF2C6 /* TestCommon.framework */; }; + 3C96DBD1FA7EBB19223698F0 /* Collocated.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA7D86CCA91AA68E7C38124A /* Collocated.swift */; }; + 3CD3BA291DC97FF1343B4782 /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAD5CB65C9E749E09CE7AAEA /* Ice.framework */; }; + 3CF1089FE298ADF25FA0DB98 /* Instance.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 802EA8B7D12327ACEC90091B /* Instance.cpp */; }; + 3D1A4B8E5D80D564A6C0A587 /* ProtocolInstance.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1FD927676FD53EC5878D9266 /* ProtocolInstance.cpp */; }; + 3D25B6CA762260D9CC05D14D /* TcpAcceptor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D732E2E9FBBA59C3AABBF754 /* TcpAcceptor.cpp */; }; + 3D52FB6CAF2405D5EB36ACE0 /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 622CA373CF127B6E7D1CF2C6 /* TestCommon.framework */; }; + 3D9E046AA5327DA1B5A00D7F /* RequestHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 52E6495C52AF1860B1907025 /* RequestHandler.cpp */; }; + 3DEA7841B90067E7A3244E01 /* AllTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 189E3ED7C7335F42F131CAE4 /* AllTests.swift */; }; + 3E12E5A464EDD053036D8099 /* IceAcm.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 370F2F863ADD7F42819C4498 /* IceAcm.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + 3E508BED680DE287A58E5088 /* Server.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0946309162FAB019EF2B106F /* Server.swift */; }; + 3E9A9D57AAC55D492E9DFB7B /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 622CA373CF127B6E7D1CF2C6 /* TestCommon.framework */; }; + 3EB3B89CAB872154D67B8D75 /* PermissionsVerifierF.ice in Sources */ = {isa = PBXBuildFile; fileRef = CD5BDD8CDC4198C5DBFD0372 /* PermissionsVerifierF.ice */; }; + 3EB6D69172321B286B3EEAFB /* Current.ice in Sources */ = {isa = PBXBuildFile; fileRef = 95A8E2FD4FB54E0EF0C4CADE /* Current.ice */; }; + 3EBC59998901A8C51AD3E9CD /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C7C5BFE9B16BF237E7782A4F /* Ice.framework */; }; + 3EE95E63573BE5750100B4BD /* PermissionsVerifierF.ice in Sources */ = {isa = PBXBuildFile; fileRef = CD5BDD8CDC4198C5DBFD0372 /* PermissionsVerifierF.ice */; }; + 3EECBF13D68C5CAD2059625B /* Client.swift in Sources */ = {isa = PBXBuildFile; fileRef = A91D5392ED5EE6A845F39DA3 /* Client.swift */; }; + 3EFB04269B0353AF52012041 /* TestAMDI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EBB3540198C53BCD831F20D /* TestAMDI.swift */; }; + 3F0939B88429C6226E3D06A6 /* SliceEscape.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 30A8323A18473C6280EC17C3 /* SliceEscape.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + 3F0CAC7FE95F6EE526523D69 /* TestI.swift in Sources */ = {isa = PBXBuildFile; fileRef = C534C5979A7D8B4B3752F9BE /* TestI.swift */; }; + 3F5507D34CE969B1CEFDEDC7 /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 63D913EF7A0370FCA4F0D76A /* PromiseKit.framework */; }; + 3F5F3AD2135FC9981B647FFE /* Test.ice in Sources */ = {isa = PBXBuildFile; fileRef = 00EB2CB2792EEC2158F75EEC /* Test.ice */; }; + 4024CF376A89303C2F4558C7 /* WSAcceptor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7680CD444DA1821E2BBDDD9F /* WSAcceptor.cpp */; }; + 403F2CFEA4E5FB7AB862094C /* Server.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6296F751356C58951A1119CF /* Server.swift */; }; + 4041409F845FB5CC5DC7E025 /* ServerAMD.swift in Sources */ = {isa = PBXBuildFile; fileRef = 411D02DCD4129040E0C3C8F6 /* ServerAMD.swift */; }; + 40C1AAC31177345201CE5255 /* MetricsObserverI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 89475D08DAA465BCAC6BF4D7 /* MetricsObserverI.cpp */; }; + 411888CB84707FF354BDF408 /* Value.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81534B568DDF6C96DC83A047 /* Value.swift */; }; + 4124FA8D2F8E72F5A26183D5 /* OnewaysAMI.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8BDCF3B69B2E86939F9A57A /* OnewaysAMI.swift */; }; + 41265E253FBDBCAC86A8235C /* SliceChecksumDict.ice in Sources */ = {isa = PBXBuildFile; fileRef = 463459FB7D8F704FD77898C4 /* SliceChecksumDict.ice */; }; + 4126DC7CB12943CA6164618D /* Test.ice in Sources */ = {isa = PBXBuildFile; fileRef = 4A352B2A5341FAB967856ADF /* Test.ice */; }; + 413B4371F3F346A7889D4E76 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A74A24CD7ED2FBFECB9FED97 /* Cocoa.framework */; }; + 41458C8D7C4AF7B69614B7EA /* Instance.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 802EA8B7D12327ACEC90091B /* Instance.cpp */; }; + 4162BFE72F186050702ECA52 /* Client.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0A305D5937C66216F11CF05 /* Client.swift */; }; + 41714FBF491300715EA0CDCC /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 870EAA4BC7FF0C331853C50F /* Foundation.framework */; }; + 41D13FFF690C640262A7E72B /* RFC2253.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 825783EC43912BFE5482D5DF /* RFC2253.cpp */; }; + 41D162675B137658FC2D72ED /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D41A319A7B3B147FDC8EA45 /* PromiseKit.framework */; }; + 41DF08A739084FB0F05FCF05 /* Acceptor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BA596A7278E6A5BE268759B0 /* Acceptor.cpp */; }; + 41F02240D0189C2AD26E8C1C /* Cond.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FD05C8DE3492FA4593406C28 /* Cond.cpp */; }; + 4257E054C3DA0D6C20A74C01 /* Current.ice in Sources */ = {isa = PBXBuildFile; fileRef = 95A8E2FD4FB54E0EF0C4CADE /* Current.ice */; }; + 42EACDFF54E8E05AB80EE32C /* Session.ice in Sources */ = {isa = PBXBuildFile; fileRef = 2F414D5E99A36BE073766A95 /* Session.ice */; }; + 42F4011C73DF9851A3399AEC /* Client.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2031D6527EBCAC2258D6F59F /* Client.swift */; }; + 42F74A6810D9C50990D50876 /* StringConverterPlugin.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CCB7DD0A81B767D953903000 /* StringConverterPlugin.cpp */; }; + 430DA8B247990F2D21BE3F19 /* Test.ice in Sources */ = {isa = PBXBuildFile; fileRef = DB73E84768C9BEB4E05AC522 /* Test.ice */; }; + 4315DFE7AD8816EC8FBC5EBB /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 870EAA4BC7FF0C331853C50F /* Foundation.framework */; }; + 4325F2FBF734D0968FE602F8 /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED07FE8864F33CBDEC73EA98 /* TestCommon.framework */; }; + 43C19AEB0B3F9E6416E2594B /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAD5CB65C9E749E09CE7AAEA /* Ice.framework */; }; + 43C7C992E113D507B347C41B /* IceHold.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = E4E251AABEC70AA1739E5859 /* IceHold.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + 43CA01BE6127F7874124EB85 /* AllTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D244C8F931231B7714E673B /* AllTests.swift */; }; + 43F3C63558484B3A33025FF9 /* Collocated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 925CBA6473C1C2E94842EF0C /* Collocated.swift */; }; + 44A9BD6A600D9E53EAFF72DC /* Collocated.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA7D86CCA91AA68E7C38124A /* Collocated.swift */; }; + 45628CD9E91095399F9A05B5 /* WSTransceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B5C1917BF4210D0F739E5084 /* WSTransceiver.cpp */; }; + 45BCCE9446E36DC1C33AE8FA /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A74A24CD7ED2FBFECB9FED97 /* Cocoa.framework */; }; + 45FD9BF763EAF0044BBC740C /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 63D913EF7A0370FCA4F0D76A /* PromiseKit.framework */; }; + 46BB70B3651E7C64F90B5837 /* Options.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A2C2BD4A7F4DE45077554C07 /* Options.cpp */; }; + 470C3A3CD442AF4CE6F70905 /* TestAMDI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52CCEBC401EF280F0E87AB1D /* TestAMDI.swift */; }; + 471C10DD00580B04DA210B15 /* IceInheritance.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 4B299CAB121530EBB3DA7B2E /* IceInheritance.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + 472756F8F6AF3045877622D2 /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAD5CB65C9E749E09CE7AAEA /* Ice.framework */; }; + 473EF10F3DC9F5883D4CA1D6 /* PropertyNames.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 14BC90C52DA9A3CAF39322CD /* PropertyNames.cpp */; }; + 47408314A93EFE6682AB207B /* IceUtil.mm in Sources */ = {isa = PBXBuildFile; fileRef = 03B19351ED5C7121B2A4A39E /* IceUtil.mm */; }; + 478526E7674CA822E45C215A /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A74A24CD7ED2FBFECB9FED97 /* Cocoa.framework */; }; + 479E5A0DB9CEF8BA8BDE4DAE /* TwowaysAMI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 758E5A7716D74082A68175B3 /* TwowaysAMI.swift */; }; + 47A5F31359C4718350AA7798 /* TestI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 401C8E9968EA1542A390134C /* TestI.swift */; }; + 47D08B40D720DC120A5DB9C9 /* Client.swift in Sources */ = {isa = PBXBuildFile; fileRef = E28EA8C2C7AA96A782A5AD34 /* Client.swift */; }; + 47F6265D635DFB3B62F94E42 /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 63D913EF7A0370FCA4F0D76A /* PromiseKit.framework */; }; + 4827D8A80CD64FBB9606A5F5 /* SecureTransportCertificateI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CAC5452C269A362D8DCD26F3 /* SecureTransportCertificateI.cpp */; }; + 48513BEE11D5372F7AF7958C /* ValueFactory.ice in Sources */ = {isa = PBXBuildFile; fileRef = 020836068D73A79D4DCE6A0C /* ValueFactory.ice */; }; + 4869D084A5F1EC37A25934B1 /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 622CA373CF127B6E7D1CF2C6 /* TestCommon.framework */; }; + 48DBE64DD41784B778D0D5BA /* TestI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 719ADF19645404C64EA92692 /* TestI.swift */; }; + 491229905A5F5890E0A6392C /* TestI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2062C5FD342B207E6E7A831E /* TestI.swift */; }; + 492C4CB8D338C1F6E2CECC2D /* FactoryTableInit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE718247E5207FBE81F7C1CD /* FactoryTableInit.cpp */; }; + 495CBC593063F0ED91D8B333 /* BatchOneways.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67A8C3A32F38C280D5A32C12 /* BatchOneways.swift */; }; + 49D0B5C7619486D003C2A9F4 /* Client.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B89423116A9D0059B0444DB /* Client.swift */; }; + 49F24CFCB16E4120A1B6A504 /* TestAMD.ice in Sources */ = {isa = PBXBuildFile; fileRef = 0C6868C9BFC9BCAA965A5D1C /* TestAMD.ice */; }; + 4A1B351D93A06125870278C5 /* Test.ice in Sources */ = {isa = PBXBuildFile; fileRef = 00EB2CB2792EEC2158F75EEC /* Test.ice */; }; + 4A504E8A39C05CCE025CDBE6 /* StreamConnector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9104FC83EEB1DB6A2D5A5427 /* StreamConnector.cpp */; }; + 4A77EBB59A89C3FC83D953E7 /* IceAdmin.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 24E1B6E96C21EC72DC064E34 /* IceAdmin.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + 4A8A96B5FAEF07DC167CC0A8 /* Version.ice in Sources */ = {isa = PBXBuildFile; fileRef = B912CA6E0A1F10F0DF6E9E77 /* Version.ice */; }; + 4ABE82F802F40E18C41D8B00 /* SecureTransportPluginI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 586624A3F550C8253BF180DF /* SecureTransportPluginI.cpp */; }; + 4AF5FE2188EC1DFE9D5C8DB0 /* IceProxyAMD.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 056AD68493E2D83EBA27D71B /* IceProxyAMD.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + 4B0D3B96EA5A4DF2F1679947 /* Instance.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ADBFAB5D4E295192C5DA5D3D /* Instance.cpp */; }; + 4B72A4BE05BC8AF96B59B0D5 /* CollocatedRequestHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B2E3B10FBA657C52E19BC44B /* CollocatedRequestHandler.cpp */; }; + 4B9C6E253EB0B8A2E528F40A /* TestI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 340032EE1FA41DE5519F6FC1 /* TestI.swift */; }; + 4BB25E9875B3FFE18C1D71E7 /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED07FE8864F33CBDEC73EA98 /* TestCommon.framework */; }; + 4C0433FF7209480B579DBDE3 /* IceSlicingObjectsAMD.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 3294A580D3F62ABF8224BFCF /* IceSlicingObjectsAMD.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + 4C2BA0925DFDF55CAF2F736F /* Glacier2Swift.h in Headers */ = {isa = PBXBuildFile; fileRef = F082C6550B7B297C967623CB /* Glacier2Swift.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4C4B934D27D992C338C792B1 /* libIceDiscovery C++11 macOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AE08479167FADF662AD41FB6 /* libIceDiscovery C++11 macOS.a */; }; + 4C9AEB59E6EC27A16FFB3221 /* IncomingAsync.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 887AF44AB027F6D7F3BA5D34 /* IncomingAsync.cpp */; }; + 4C9C851614B4A6B7046C9109 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 870EAA4BC7FF0C331853C50F /* Foundation.framework */; }; + 4CAC33C2A1F9F719665D0DB7 /* Transceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6FDA009DD1E09F4AD8054EB9 /* Transceiver.cpp */; }; + 4CB6E2CF52490CC24B240C59 /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED07FE8864F33CBDEC73EA98 /* TestCommon.framework */; }; + 4CF0B8D0A7D2835AC4CC1346 /* InstrumentationI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DBC747062704608D240AE0FE /* InstrumentationI.cpp */; }; + 4CF9E41D9F3534CEFE02277C /* UserAccountMapper.ice in Sources */ = {isa = PBXBuildFile; fileRef = 6DFC6B655D6E3B27FFF53F55 /* UserAccountMapper.ice */; }; + 4D083E45D9D92E5EDB084EBB /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D41A319A7B3B147FDC8EA45 /* PromiseKit.framework */; }; + 4D17D4F49F4E88F2C40413BC /* RouterF.ice in Sources */ = {isa = PBXBuildFile; fileRef = D4205FB1980ACE50C8CC937D /* RouterF.ice */; }; + 4D199B02FF62DA6F2C677018 /* Test.ice in Sources */ = {isa = PBXBuildFile; fileRef = 50C14E2FBFE498ECE440356D /* Test.ice */; }; + 4D1FCAAC697DF43D03407210 /* Registry.ice in Sources */ = {isa = PBXBuildFile; fileRef = B716BD86823CBA85EFEE6513 /* Registry.ice */; }; + 4D2ABB3DFA3FDC32953DD121 /* Process.mm in Sources */ = {isa = PBXBuildFile; fileRef = C8F45B78B8F03318158A9D56 /* Process.mm */; }; + 4D74CBB8B12C803F03301210 /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D41A319A7B3B147FDC8EA45 /* PromiseKit.framework */; }; + 4DBAAFAEFA3C883CC9B8C70F /* Collocated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A19B0718445836901D562D6 /* Collocated.swift */; }; + 4E437742D8D03D13CBB3BEEF /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 63D913EF7A0370FCA4F0D76A /* PromiseKit.framework */; }; + 4EA2EFA909184BF57E4A8821 /* ObjectAdapter.ice in Sources */ = {isa = PBXBuildFile; fileRef = 3C06873D6A18B5AF06EA761B /* ObjectAdapter.ice */; }; + 4EAA256AAA98DF58F1E673C0 /* FileUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EEA3F903D78E2993FA6F98DD /* FileUtil.cpp */; }; + 4ED21D2ECD3A70421FB9DD3D /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A74A24CD7ED2FBFECB9FED97 /* Cocoa.framework */; }; + 4EEBFCEDE749188E755A8480 /* IceTimeout.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 652F819A999ABAB56CFC4A89 /* IceTimeout.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + 4F0A7B64AF64B5358A45ECEE /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 622CA373CF127B6E7D1CF2C6 /* TestCommon.framework */; }; + 4F0EA1B64CAD65766A64B03A /* Server.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2720E37C8DAA9D7FD5B5216D /* Server.swift */; }; + 4F197D85E7E66A6660146FDF /* Client.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAF1350F67CE8D3A4348F3E9 /* Client.swift */; }; + 4F215DB352B5198C36B9A858 /* SystemdJournalI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BD08E0917CB9C3B366951D3 /* SystemdJournalI.cpp */; }; + 4F36CD93277C18F9891C92BA /* FileParser.ice in Sources */ = {isa = PBXBuildFile; fileRef = 3B8082664AA4B6D0685DAD08 /* FileParser.ice */; }; + 4F4554B117F7470488857CCA /* Controller.ice in Sources */ = {isa = PBXBuildFile; fileRef = B575236D078DC87353F74B3B /* Controller.ice */; }; + 4F48E8C0EC30D4C1ECC1930B /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAD5CB65C9E749E09CE7AAEA /* Ice.framework */; }; + 4F4FAE8F3AB1B270A0C106E3 /* Client.swift in Sources */ = {isa = PBXBuildFile; fileRef = D82FDA737E3962604D757B26 /* Client.swift */; }; + 4FB58E90DE9A41CAC7C87895 /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 63D913EF7A0370FCA4F0D76A /* PromiseKit.framework */; }; + 4FC1554C1005AA727A9AA74D /* Convert.mm in Sources */ = {isa = PBXBuildFile; fileRef = AE4F9A2DBEDA32DCB3E60CD1 /* Convert.mm */; }; + 4FCF7E7D9DDDDA88B9F91B09 /* TestI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2062C5FD342B207E6E7A831E /* TestI.swift */; }; + 4FF58213C642678204BD0BDF /* Client.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1714B9E2F7542EBF1F7C50DA /* Client.swift */; }; + 503516A7A146442AD1441BDB /* Client.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64F6FC1409B86A503C498833 /* Client.swift */; }; + 504CFBADDBF2915A5B357C4C /* Process.ice in Sources */ = {isa = PBXBuildFile; fileRef = 1010042EF9CEC31FC0AFD485 /* Process.ice */; }; + 50B543BF29499BE7BE039ED4 /* Test.ice in Sources */ = {isa = PBXBuildFile; fileRef = 8A5C9E0BB881BCF4F6F0FA8F /* Test.ice */; }; + 50BBC6ABA9A4EDB9C739BD41 /* IPEndpointI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1F9F2ADAF33F9B5F3499E01F /* IPEndpointI.cpp */; }; + 50F7163D97C2A7C693C9B5ED /* Glacier2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A7FBF20FA5074019E1952619 /* Glacier2.framework */; }; + 50FF73531C6BBA75568573AC /* Initialize.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C284BB2FB9EBB2B69001E4B1 /* Initialize.cpp */; }; + 511D649F3AFFF410E5D0CB36 /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED07FE8864F33CBDEC73EA98 /* TestCommon.framework */; }; + 511F6D1D114453414AAEFF71 /* ServantLocator.ice in Sources */ = {isa = PBXBuildFile; fileRef = CAABDEC1B20906FA83353809 /* ServantLocator.ice */; }; + 5128F3BCF9252D039A40B3E7 /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D41A319A7B3B147FDC8EA45 /* PromiseKit.framework */; }; + 51443C4B8A5CAA3659DC3963 /* UnsupportedAdminFacet.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9BB671D15F8523B6ABEE9F08 /* UnsupportedAdminFacet.mm */; }; + 516F6BB6A35BB4EB58214498 /* NetworkProxy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0C7C4954E6E427052EAA79D3 /* NetworkProxy.cpp */; }; + 519BB952870F0CA84FE20D75 /* IceOperations.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 65F79884355E2A0FE99ECB0D /* IceOperations.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + 51C4F416B113B3A672F60869 /* AllTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A3A28D3F77ACF9B59C9EE7F /* AllTests.swift */; }; + 51FEB5590829C3ED15D9D873 /* Client.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53E07E25DA43B3E8EB6E9D31 /* Client.swift */; }; + 52234637B71BBFE6E47BA998 /* BatchOneways.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67A8C3A32F38C280D5A32C12 /* BatchOneways.swift */; }; + 5235FF8FC3C88FE4A1458B80 /* SlicedData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8EC01BFFE83B9C38FC2EC096 /* SlicedData.swift */; }; + 5282E2A6C655E985C00FAB37 /* Client.swift in Sources */ = {isa = PBXBuildFile; fileRef = 822BAFEABECEDD0F2875C9A2 /* Client.swift */; }; + 52A453FB0AF6205567BD4497 /* WSConnector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 37FCE112FA57F8D0E2547946 /* WSConnector.cpp */; }; + 52EC1AC098B5A5905F91B146 /* Collocated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 219515F6DF3BA8B09B2AF09A /* Collocated.swift */; }; + 5313289E3C96422E3AE27DEA /* LocalExceptionFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A4E1C14022C9EAEC8AB771C /* LocalExceptionFactory.swift */; }; + 536A0971C82DEDD58AE39B0A /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A74A24CD7ED2FBFECB9FED97 /* Cocoa.framework */; }; + 5391BAF5A6B58CEEE12EEE37 /* PluginI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8971D2300FEA21980DEB02D9 /* PluginI.cpp */; }; + 53B26396C7E01A51829D1738 /* FactoryTable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B14DACBDF514B9BD2FC934DA /* FactoryTable.cpp */; }; + 53B9D57AAB98250D387DE09F /* Server.swift in Sources */ = {isa = PBXBuildFile; fileRef = D26ED3329E8CC06679C2F30D /* Server.swift */; }; + 5415E34F248D5BD76EC6F21C /* Client.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91A7E4C4039CC1B374674571 /* Client.swift */; }; + 545D160D4C8401AC81EDB199 /* AllTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E183236587AED966063E0A3 /* AllTests.swift */; }; + 549632510F55EB65F2929D79 /* Server.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAA4A859A9283C6D0B233CAE /* Server.swift */; }; + 54D9686EAE8FAEC0FD791A28 /* OutputStream.swift in Sources */ = {isa = PBXBuildFile; fileRef = 48F4EF698C0373A8B76A2663 /* OutputStream.swift */; }; + 54FAB63222FA8E0C8309EBFF /* TestI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8EA814FAFAE21BEA08FDE9D1 /* TestI.swift */; }; + 551B6FDE64F4FC45AD5AC44F /* Collocated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 219515F6DF3BA8B09B2AF09A /* Collocated.swift */; }; + 554DDDFA9143C89B533457AE /* ServerPrivateAMD.ice in Sources */ = {isa = PBXBuildFile; fileRef = 298A2BAAE7678208C78D1A2C /* ServerPrivateAMD.ice */; }; + 556A809A85FC84A62C3E6D94 /* ThreadPool.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4DA840989579096474F7A7C8 /* ThreadPool.cpp */; }; + 556EA7DE34216B7709BAB660 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A74A24CD7ED2FBFECB9FED97 /* Cocoa.framework */; }; + 55BFF3A89DA5293672474A71 /* Client.swift in Sources */ = {isa = PBXBuildFile; fileRef = D37E67061387971945F490E0 /* Client.swift */; }; + 55CC49454A5231962381E7B8 /* Server.swift in Sources */ = {isa = PBXBuildFile; fileRef = C62FA99000CCECFFFBB3FFC3 /* Server.swift */; }; + 55F0EE774650208E931D1626 /* Properties.ice in Sources */ = {isa = PBXBuildFile; fileRef = 4A796EC75AE3F3A95CF44FF5 /* Properties.ice */; }; + 5605E4BA3102EBFDA83E9868 /* IceInfo.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = CAAF3F145A79FCDEC66BAB27 /* IceInfo.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + 5607D35FFF9352260DD3ABA6 /* IceBinding.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = B902634E3013F0F2161FF426 /* IceBinding.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + 5643CBF2AFE561F3683CBFBF /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D41A319A7B3B147FDC8EA45 /* PromiseKit.framework */; }; + 5663BD12D4CCA16C9E776431 /* Test.ice in Sources */ = {isa = PBXBuildFile; fileRef = 9BBC2ACFB110C84DC4C862D6 /* Test.ice */; }; + 5679DCA440FDA5E5D2580808 /* CountDownLatch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 300ACD38E0CCC3978AACB703 /* CountDownLatch.cpp */; }; + 56824B7B1FDCB6B72AAB53BB /* SliceInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92B681D8A5D3A17094255E4A /* SliceInfo.swift */; }; + 56AAF03AE429CD6C278DA510 /* EndpointTypes.ice in Sources */ = {isa = PBXBuildFile; fileRef = A6D1E38568D7656F13F57D5A /* EndpointTypes.ice */; }; + 57A7F8A69EA4A03EF83F3E41 /* Identity.ice in Sources */ = {isa = PBXBuildFile; fileRef = 3C5E7B57B4BF54ECEA2E7644 /* Identity.ice */; }; + 57B07AB2245B951AEEB5E07A /* AllTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 067C85F35976F4DEF23B57DB /* AllTests.swift */; }; + 57B22896EECBD24C68893AD6 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A74A24CD7ED2FBFECB9FED97 /* Cocoa.framework */; }; + 57CF5F21D32E018865CF525A /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 63D913EF7A0370FCA4F0D76A /* PromiseKit.framework */; }; + 57D3BF94BB46CA8E1D816E2B /* IceStorm.ice in Sources */ = {isa = PBXBuildFile; fileRef = A0C05CB1065C9BC36847B733 /* IceStorm.ice */; }; + 582B82EAD403DACF681ECD58 /* Communicator.ice in Sources */ = {isa = PBXBuildFile; fileRef = A46ED6C2DA9BB2B842766CCF /* Communicator.ice */; }; + 58D8C01D2312F61667F445A8 /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAD5CB65C9E749E09CE7AAEA /* Ice.framework */; }; + 58E2DA6DB454480795B2D51C /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C7C5BFE9B16BF237E7782A4F /* Ice.framework */; }; + 592F2C9D6D7EC25258AB39D1 /* AllTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A7FAB4CC1E0F31A6C450E57 /* AllTests.swift */; }; + 598EFAEF2A03A35F64A4928C /* Server.swift in Sources */ = {isa = PBXBuildFile; fileRef = FB43A00D955B0F7E08FDD3DA /* Server.swift */; }; + 59D3F28DE359935FF8C71F01 /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 622CA373CF127B6E7D1CF2C6 /* TestCommon.framework */; }; + 59DE85167CF3FEF96E5F046B /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A74A24CD7ED2FBFECB9FED97 /* Cocoa.framework */; }; + 5A61980801E4A4F72C41CB83 /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D41A319A7B3B147FDC8EA45 /* PromiseKit.framework */; }; + 5A870025C9BD4B44A093FE9D /* ObjectPrx.mm in Sources */ = {isa = PBXBuildFile; fileRef = C7F5F0B0B745C16310D6682D /* ObjectPrx.mm */; }; + 5AAEC639875C0F5E8A0780D2 /* LocalExceptionFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A4E1C14022C9EAEC8AB771C /* LocalExceptionFactory.swift */; }; + 5AD0DCE6240D4BDD39F54FF5 /* UdpConnector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A66926ED2CACE6A4FA7B5C66 /* UdpConnector.cpp */; }; + 5B16CF583CF07545C4912E03 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 870EAA4BC7FF0C331853C50F /* Foundation.framework */; }; + 5B2C9AC715B8900E7DA275C7 /* AllTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3BF5A14B208DEAECF5A412C8 /* AllTests.swift */; }; + 5C2DC71443437944BB6F7B5C /* TestAMDI.swift in Sources */ = {isa = PBXBuildFile; fileRef = AABD6035B79B6852EBF6A460 /* TestAMDI.swift */; }; + 5C83116DFB0015897E3174B6 /* IceProxy.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 4420FAEFE57B79BB5E834D56 /* IceProxy.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + 5C97D9809BC1659981752BA5 /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D41A319A7B3B147FDC8EA45 /* PromiseKit.framework */; }; + 5CF6E1C0D7C7B74A41905FE2 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 870EAA4BC7FF0C331853C50F /* Foundation.framework */; }; + 5CFAA092BAD3304558EF7491 /* InputUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B516C25EE2AD4AA989A0C717 /* InputUtil.cpp */; }; + 5D125A14DF1161A4286CFA6B /* ProcessF.ice in Sources */ = {isa = PBXBuildFile; fileRef = C724C0FEBE2CAFBA08989FB2 /* ProcessF.ice */; }; + 5DB33DB72F162E3B9AAEE803 /* libIceLocatorDiscovery C++11 iOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 6A685447CC038C3FC379393F /* libIceLocatorDiscovery C++11 iOS.a */; }; + 5E30CB29C8D764331A449536 /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED07FE8864F33CBDEC73EA98 /* TestCommon.framework */; }; + 5E46C0F29156BFAF06209FAD /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 63D913EF7A0370FCA4F0D76A /* PromiseKit.framework */; }; + 5E4F4C13FCB879E06823EDC9 /* WSConnector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 37FCE112FA57F8D0E2547946 /* WSConnector.cpp */; }; + 5E5A410E1CB83E626F3669BB /* Test.ice in Sources */ = {isa = PBXBuildFile; fileRef = 472A966BEFE38D2EF99832A1 /* Test.ice */; }; + 5E8086DBEC03B567EF8D04FD /* LookupI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FB44DA5C88EAA290CACFCFA8 /* LookupI.cpp */; }; + 5F3F57CB6D2B1F09CE21D13E /* ThreadException.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8F81AF5DE3734BFCFACFC594 /* ThreadException.cpp */; }; + 5F5414DC8A5D4B131A4E73DD /* LocalObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6CDAF82F7706588F392E7300 /* LocalObject.cpp */; }; + 5F54A0AA4140D73DE6B5FD12 /* IceProxy.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = AE912DDABEFC64751F3ACF12 /* IceProxy.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + 5F8FB4DA29D4A3FE1642B697 /* AllTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDDEF36D017621261C2520D4 /* AllTests.swift */; }; + 5FC0F414D022FDD849DE0674 /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D41A319A7B3B147FDC8EA45 /* PromiseKit.framework */; }; + 5FEF525C8F50BABE052AC2AE /* RemoteLogger.ice in Sources */ = {isa = PBXBuildFile; fileRef = 523B9454C940E0D81E8047AF /* RemoteLogger.ice */; }; + 5FF91E481D7ECC810B9BAD53 /* Session.ice in Sources */ = {isa = PBXBuildFile; fileRef = E20AE7CD58914DDA97A83C88 /* Session.ice */; }; + 6009DBD9F0EEACD989516C02 /* libIceIAP C++11 iOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2F2305815DDDCF67ED01341E /* libIceIAP C++11 iOS.a */; }; + 6009F305F55EAE280CCA07A7 /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED07FE8864F33CBDEC73EA98 /* TestCommon.framework */; }; + 6024B382677A0B28FF0B2417 /* ClassResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3CF8C8D7F56018E4B14BE90 /* ClassResolver.swift */; }; + 602D99DEA96EDEEBF738619D /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAD5CB65C9E749E09CE7AAEA /* Ice.framework */; }; + 602F919083A006A14F973273 /* Value.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B131399750F43672CA389DF5 /* Value.cpp */; }; + 608AC87C538A0ED4FE0CBDCB /* Server.swift in Sources */ = {isa = PBXBuildFile; fileRef = B9856CF3C6B1280A9EB49EA8 /* Server.swift */; }; + 6094E8C3EB03DA47FBDFFF34 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2AEA4760C61467A43EAE6051 /* UIKit.framework */; }; + 6096CB9B2B68E6C0393FCC93 /* IceInvoke.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 431588ED0E80F0264A83FA35 /* IceInvoke.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + 60B467253C55EDE975E78CEA /* InputStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B38AE066B39786410748F40 /* InputStream.cpp */; }; + 60DC99088471F3DCE7AAE1BD /* ServerPrivateAMD.ice in Sources */ = {isa = PBXBuildFile; fileRef = AD4098EC310F90065F58E268 /* ServerPrivateAMD.ice */; }; + 6100019FC210186DDB824614 /* PluginI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8971D2300FEA21980DEB02D9 /* PluginI.cpp */; }; + 612AEC796457B50C8A8CB078 /* TestI.swift in Sources */ = {isa = PBXBuildFile; fileRef = F1D9A1622A7CDA70227F3E60 /* TestI.swift */; }; + 6196BA6D88574835CE5A66CB /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 870EAA4BC7FF0C331853C50F /* Foundation.framework */; }; + 61B37448B215A87446A7A30E /* RouterInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 71F7CDB885CFFA255B8704DA /* RouterInfo.cpp */; }; + 61BF1349924F9B274DA828F4 /* TestI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 260E00176AE3729587786A64 /* TestI.swift */; }; + 61D99EF9C8FC814621B8E601 /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 63D913EF7A0370FCA4F0D76A /* PromiseKit.framework */; }; + 61E8DAB4557F7FE2BBAC0059 /* ImplicitContextF.ice in Sources */ = {isa = PBXBuildFile; fileRef = 6B0972F4B9891E7569954312 /* ImplicitContextF.ice */; }; + 62BDBAF06542E5D46903B7CE /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C7C5BFE9B16BF237E7782A4F /* Ice.framework */; }; + 62E7DBBCD8ACC6E9C8E9DD0D /* IceAdmin.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = E2778EFD3BDF060F7D28FA43 /* IceAdmin.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + 637D443B11DBB33D4517E2A7 /* ConnectionRequestHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 71F686B1842EE0F0668A7ADC /* ConnectionRequestHandler.cpp */; }; + 6384AB03874F8E0CD99C1F26 /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D41A319A7B3B147FDC8EA45 /* PromiseKit.framework */; }; + 63CEB3047967C55AE7BA4F32 /* IceSlicingExceptionsAMD.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 9D4151C3144AD1696BC226C1 /* IceSlicingExceptionsAMD.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + 63E25B128628B1C174EE8988 /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAD5CB65C9E749E09CE7AAEA /* Ice.framework */; }; + 646D91733A4D08712E9D554B /* ConnectionInfo.ice in Sources */ = {isa = PBXBuildFile; fileRef = 251C120660145DCD5FB6FB5B /* ConnectionInfo.ice */; }; + 64B592B618D4B70E0C669F6C /* Router.ice in Sources */ = {isa = PBXBuildFile; fileRef = D010B56A525D084DFD68EAC7 /* Router.ice */; }; + 64EFF71A150817E11D820BE9 /* AllTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2BA911AA1849C456055BD6AD /* AllTests.swift */; }; + 659B355C5F280786F631BE96 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A74A24CD7ED2FBFECB9FED97 /* Cocoa.framework */; }; + 661958CE17A1B212547DD231 /* IceOptionalAMD.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = CD79CFE2812A7B6899EE5178 /* IceOptionalAMD.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + 6626D76E627AE62AF5E4254D /* Client.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8BEAE2C49D0B45FB5BA67DC /* Client.swift */; }; + 663980C66A49D81E4C73F463 /* libIceSSL C++11 macOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E07B1A3C2B4A1C3215D88E4F /* libIceSSL C++11 macOS.a */; }; + 664D01E1B6E4F0B89DC13D72 /* Server.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9FE14B8B35538CF444B87FB /* Server.swift */; }; + 66A562F1BC64BA7BA3082BD0 /* Session.ice in Sources */ = {isa = PBXBuildFile; fileRef = E20AE7CD58914DDA97A83C88 /* Session.ice */; }; + 66D6EA78E241EA02D548D7C8 /* Collocated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F87AF0E3A8122C0FC3E3285 /* Collocated.swift */; }; + 66EABDB0C3E73BFEEDEA939A /* BatchOnewaysAMI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92B5906332A66BA58B0EFA97 /* BatchOnewaysAMI.swift */; }; + 673D9553F3BA6F52B298E9B0 /* AllTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3CDBED8B141B3FE3A6AB8E2 /* AllTests.swift */; }; + 67417F5726A96BAE4D210690 /* ConnectionFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F3616E470DCD0FDC827CB001 /* ConnectionFactory.cpp */; }; + 68129D1BF2809A1F2BFF5F8A /* Test.ice in Sources */ = {isa = PBXBuildFile; fileRef = 0FA0AD77AB4A762782979AA4 /* Test.ice */; }; + 6817A1CACF24FF743DAA50B9 /* RouterF.ice in Sources */ = {isa = PBXBuildFile; fileRef = D4205FB1980ACE50C8CC937D /* RouterF.ice */; }; + 6829B3EF213B36B32479AE63 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A74A24CD7ED2FBFECB9FED97 /* Cocoa.framework */; }; + 69301D084823E78DE5E7600B /* libIceSSL C++11 iOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4ECA873E5993DD4D031920B7 /* libIceSSL C++11 iOS.a */; }; + 695DF9D1E2B739FE5C89576A /* StringUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA64C24E633066EA27760C88 /* StringUtil.cpp */; }; + 6962AF95205DE0970459BC46 /* Reference.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E325A4076B7D2F2EF9D33266 /* Reference.cpp */; }; + 697927485283FD54A69E06E5 /* ImplicitContextF.ice in Sources */ = {isa = PBXBuildFile; fileRef = 6B0972F4B9891E7569954312 /* ImplicitContextF.ice */; }; + 69A613620753010D4C7784F5 /* Process.ice in Sources */ = {isa = PBXBuildFile; fileRef = 1010042EF9CEC31FC0AFD485 /* Process.ice */; }; + 69CA7AFD93E0A74A6793AB77 /* TestI.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8818172CC090594D16C576F /* TestI.swift */; }; + 6A15DA51E4735BC529DAFDA2 /* ConnectionF.ice in Sources */ = {isa = PBXBuildFile; fileRef = 828B38E787FC8723C83D4919 /* ConnectionF.ice */; }; + 6A19493DA30C55136603FD22 /* TraceUtil.mm in Sources */ = {isa = PBXBuildFile; fileRef = 6F67B6869ECDEBB8425E91EB /* TraceUtil.mm */; }; + 6A4BF76C9DE975198692DBA7 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 870EAA4BC7FF0C331853C50F /* Foundation.framework */; }; + 6A7CA305A3D666C861930F02 /* Shared.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2429536C7D00CC9A6F571069 /* Shared.cpp */; }; + 6AF332D62AA38D0F57B22202 /* EndpointInfoFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = D14B4626FA64A1D3308CF7F9 /* EndpointInfoFactory.swift */; }; + 6AFCC43337E5EB26816824ED /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 63D913EF7A0370FCA4F0D76A /* PromiseKit.framework */; }; + 6B1F3F9F830EEA2F18C82454 /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 622CA373CF127B6E7D1CF2C6 /* TestCommon.framework */; }; + 6B3CF5EFA06ABA6FA02B3F8E /* ReferenceFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8D0B27B694C3EE943904522E /* ReferenceFactory.cpp */; }; + 6B605EBF542480A469A6675B /* AdminFacetFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7447E13620612CE478F173E4 /* AdminFacetFactory.swift */; }; + 6B66EC20115DFE12727A149D /* PropertiesAdmin.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1F5791426E16A8B3C5402DBA /* PropertiesAdmin.mm */; }; + 6B84B920125EBA7C77567B67 /* EndpointTypes.ice in Sources */ = {isa = PBXBuildFile; fileRef = A6D1E38568D7656F13F57D5A /* EndpointTypes.ice */; }; + 6B8CA9647DE9323520604BD8 /* TestAMD.ice in Sources */ = {isa = PBXBuildFile; fileRef = 0C6868C9BFC9BCAA965A5D1C /* TestAMD.ice */; }; + 6BA063BE944C4E0739EFA264 /* Test.ice in Sources */ = {isa = PBXBuildFile; fileRef = 2C465C527F495510572EE063 /* Test.ice */; }; + 6C07A974D2C91C8C66346173 /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 622CA373CF127B6E7D1CF2C6 /* TestCommon.framework */; }; + 6C09EC64DB5D55FAA0D423FD /* Service.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 44A5BD8A0819F6426E07866F /* Service.cpp */; }; + 6C10B844C0C956D9B50D6E9F /* Test.ice in Sources */ = {isa = PBXBuildFile; fileRef = 3B85A3BA1C4E1813167238B1 /* Test.ice */; }; + 6C25E89E6678CEEC1637E6C2 /* RecMutex.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ECC5EC846C89881FB2C4772A /* RecMutex.cpp */; }; + 6C36DEDA6799ABA53BC3AFFC /* Endpoint.ice in Sources */ = {isa = PBXBuildFile; fileRef = CEDF515DDF519A53EF31E84C /* Endpoint.ice */; }; + 6C536537263B26C2832DDEF0 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 870EAA4BC7FF0C331853C50F /* Foundation.framework */; }; + 6CCFF40D49FB56958A6A86B0 /* AllTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80B853408ED79054E6964CD6 /* AllTests.swift */; }; + 6D2FC3E081CD97D1555F5240 /* CertificateI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FE7B04C969E7050D512F2D2C /* CertificateI.cpp */; }; + 6D652909B779AAF0F4B4D888 /* Metrics.ice in Sources */ = {isa = PBXBuildFile; fileRef = 038D248253FFFD10F4AB2F27 /* Metrics.ice */; }; + 6D7F94E4CBEDD6C4341775BA /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 622CA373CF127B6E7D1CF2C6 /* TestCommon.framework */; }; + 6D8895D0251982887EE7944D /* IceEnums.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = A56C1DEC107F647E8C622C2E /* IceEnums.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + 6DFB1EBF5818B4EAB7ECD787 /* EndpointFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 933618455164E19AE790AD98 /* EndpointFactory.cpp */; }; + 6E4CEA885B8C06FEA28BF72C /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED07FE8864F33CBDEC73EA98 /* TestCommon.framework */; }; + 6E6B3F1AAFDDE04D4F1DCA2A /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A74A24CD7ED2FBFECB9FED97 /* Cocoa.framework */; }; + 6E6F617F64725625A1270CE6 /* AllTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6743B765683A9B925F99D1A9 /* AllTests.swift */; }; + 6E730C7CF2F0EFEBB5C53B1B /* ConnectionInfo.ice in Sources */ = {isa = PBXBuildFile; fileRef = 251C120660145DCD5FB6FB5B /* ConnectionInfo.ice */; }; + 6EBA6989B042BC80A4EF7163 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE2B43189A6D49AF626F7DA1 /* AppDelegate.swift */; }; + 6EC92CF0764545FF2B62956C /* Instrumentation.ice in Sources */ = {isa = PBXBuildFile; fileRef = DAEA5CA5740117C6BC42907B /* Instrumentation.ice */; }; + 6EE715E5515B2CB696CB0AFA /* TestI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 811F0B562E73A9C2AAEE013E /* TestI.swift */; }; + 6F2C0EDB12BA10940528DDF6 /* IconvStringConverter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 49301C14A9D200E30F8D1B51 /* IconvStringConverter.cpp */; }; + 6F3D1CB96C862E4F6914A703 /* Metrics.ice in Sources */ = {isa = PBXBuildFile; fileRef = 038D248253FFFD10F4AB2F27 /* Metrics.ice */; }; + 6F68B67F93F60FD6BFD63BA5 /* OptionalFormat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 69F24D683B72432659C41F5E /* OptionalFormat.swift */; }; + 6F7B3A0F5193763E9DCC6464 /* ConnectionInfoF.ice in Sources */ = {isa = PBXBuildFile; fileRef = C2362DD1D9852CFEEBAED065 /* ConnectionInfoF.ice */; }; + 6F9F0B61EE226E2666F4A5F2 /* Connection.mm in Sources */ = {isa = PBXBuildFile; fileRef = 366C5D3266D9C6C5D60E338C /* Connection.mm */; }; + 6FF956171BA9E2F342F32BCC /* TestAMDI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52CCEBC401EF280F0E87AB1D /* TestAMDI.swift */; }; + 70107528CA1D74A5B039F716 /* TestI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85A108B0EC561AA0BF6C2FCD /* TestI.swift */; }; + 703DB76D7039FB94251EE761 /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C7C5BFE9B16BF237E7782A4F /* Ice.framework */; }; + 70ADA831C1C5C210340B7A52 /* Admin.ice in Sources */ = {isa = PBXBuildFile; fileRef = 71A96FD335DA471AC7150A42 /* Admin.ice */; }; + 70DACA9BD5065DC68F95369A /* ServerAMD.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1CE9F19AF6637FFEE12A205 /* ServerAMD.swift */; }; + 70E37120D2BA4A4C6DF74756 /* IceSlicingExceptions.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = BD3914845D38EA92426A1C87 /* IceSlicingExceptions.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + 71222475A073579658EE98CB /* IceSlicingObjectsAMD.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = E316B5856061FE815785CB34 /* IceSlicingObjectsAMD.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + 712BF910D2B4C4517E3AD6D2 /* PropertiesI.swift in Sources */ = {isa = PBXBuildFile; fileRef = C329F45DB1FD9E70F37C7823 /* PropertiesI.swift */; }; + 7178C08E2172BAB299EDCDB9 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 870EAA4BC7FF0C331853C50F /* Foundation.framework */; }; + 71B24597A087E92089831760 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 870EAA4BC7FF0C331853C50F /* Foundation.framework */; }; + 71BEAB0D45B7BE4086E29F29 /* FileParser.ice in Sources */ = {isa = PBXBuildFile; fileRef = 3B8082664AA4B6D0685DAD08 /* FileParser.ice */; }; + 71C1398BB355540ADD88F160 /* IceStormSwift.h in Headers */ = {isa = PBXBuildFile; fileRef = F418D0D53F5E126F2F44C0C7 /* IceStormSwift.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 71D1F940DF91A2A26122EC68 /* CertificateI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FE7B04C969E7050D512F2D2C /* CertificateI.cpp */; }; + 71DF2A8B89806ADA307C0795 /* ObserverHelper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3721236531620DBCBEB39D41 /* ObserverHelper.cpp */; }; + 71E1A8532021DA4EACB824D5 /* LoggerI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5C45004277123EDCA7BCA6A0 /* LoggerI.cpp */; }; + 72070D52D233C5A9281C6D73 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 870EAA4BC7FF0C331853C50F /* Foundation.framework */; }; + 725F4F302F3170E9E7345D66 /* AllTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B7F934610D941B81F304A45 /* AllTests.swift */; }; + 72B2A12C05437FFA7A247A95 /* TestCommon.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 622CA373CF127B6E7D1CF2C6 /* TestCommon.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + 72B2C464EC9672BA5424475F /* Connection.ice in Sources */ = {isa = PBXBuildFile; fileRef = D6292E700118F4E42B326819 /* Connection.ice */; }; + 72E045BE45E0CBBF36E73674 /* Process.ice in Sources */ = {isa = PBXBuildFile; fileRef = 1010042EF9CEC31FC0AFD485 /* Process.ice */; }; + 734B0692BD6D1C72B3DA084C /* IceDefaultValue.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 881E8ED1F550ABA8F7A59DA1 /* IceDefaultValue.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + 735F789552BD9520573AD89E /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAD5CB65C9E749E09CE7AAEA /* Ice.framework */; }; + 736805DBE7EC658C8445E5FA /* IceOptional.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 1090D6FDA9BED7FA1022BF1E /* IceOptional.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + 736FF44FB057118FC48F16DC /* FacetMap.ice in Sources */ = {isa = PBXBuildFile; fileRef = 5E8B177E95BA2D07DCEFDA1D /* FacetMap.ice */; }; + 737C68396B303FDB46A86AD3 /* Locator.ice in Sources */ = {isa = PBXBuildFile; fileRef = 2D0747ED96A227648F3E66B2 /* Locator.ice */; }; + 739296210BB6901740BF55D8 /* IceExceptionsAMD.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 276F78A06FC75374D7EA1EA0 /* IceExceptionsAMD.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + 73ADAC124BC4F1ACCED2C11A /* EndpointFactoryManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8F7EB4BD53C8878A62DB683A /* EndpointFactoryManager.cpp */; }; + 7442D1A85F5BB7F0E28BC813 /* PropertiesAdmin.ice in Sources */ = {isa = PBXBuildFile; fileRef = 2288D724247415182EE9EED7 /* PropertiesAdmin.ice */; }; + 7458F2B38AE7A3BE562877E0 /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAD5CB65C9E749E09CE7AAEA /* Ice.framework */; }; + 748001715EC2DBD0F861065C /* InstrumentationF.ice in Sources */ = {isa = PBXBuildFile; fileRef = 90EFB1CE1C4B06CB3795BA7B /* InstrumentationF.ice */; }; + 75091471F123616ED861328B /* Test.ice in Sources */ = {isa = PBXBuildFile; fileRef = 4A352B2A5341FAB967856ADF /* Test.ice */; }; + 752820FB35AB5199840AB02C /* EndpointInfo.ice in Sources */ = {isa = PBXBuildFile; fileRef = FB3C559B17046F98ED28C5E3 /* EndpointInfo.ice */; }; + 752A78750F102386AE7A3A61 /* ControllerI.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8DEBAADD0B077756913BC0B /* ControllerI.swift */; }; + 7552C7DECFF4E57E4011CF74 /* RetryQueue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ED2B0C01FC9F33222506FD38 /* RetryQueue.cpp */; }; + 7556CE6C496FFE7551749F3F /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED07FE8864F33CBDEC73EA98 /* TestCommon.framework */; }; + 756520CA5CAFBD8F5E7E0802 /* TestI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44516D401491DBD4538B5906 /* TestI.swift */; }; + 762E01F569A5FF5CC23DE9F4 /* IceExceptions.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = A3DE7F634444B01AE61627AF /* IceExceptions.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + 7631251651B3779E01F1C924 /* NativePropertiesAdmin.swift in Sources */ = {isa = PBXBuildFile; fileRef = B405F0A79A60C68C7D5FA6B6 /* NativePropertiesAdmin.swift */; }; + 766FCB8EBA8556D204DBB398 /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D41A319A7B3B147FDC8EA45 /* PromiseKit.framework */; }; + 76CB1FD2A00322F3E359E634 /* Connector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C06D8D06675BAF6E05DCBC8D /* Connector.cpp */; }; + 76E46DEAD8F0E40EEF87E15E /* ObjectAdapterI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4943D90E215EA7F001876C5B /* ObjectAdapterI.swift */; }; + 7717D18EBF31682E681A09C3 /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = D13112E740E095792FAEB984 /* main.swift */; }; + 77F8B2EE84BBB39C6EE1E034 /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C7C5BFE9B16BF237E7782A4F /* Ice.framework */; }; + 7802D481AC74B804AAE0628F /* Properties.ice in Sources */ = {isa = PBXBuildFile; fileRef = 4A796EC75AE3F3A95CF44FF5 /* Properties.ice */; }; + 7833830A8977C394236E3789 /* Metrics.ice in Sources */ = {isa = PBXBuildFile; fileRef = 038D248253FFFD10F4AB2F27 /* Metrics.ice */; }; + 789E0A7DAB2AC4D06984BE2C /* AllTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58F11EF594018BDA48E2462F /* AllTests.swift */; }; + 78A0A3ECBC976096141EB5A9 /* Client.swift in Sources */ = {isa = PBXBuildFile; fileRef = CAFF8224F16416487A770A39 /* Client.swift */; }; + 78C540B138FF5472375778E9 /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 622CA373CF127B6E7D1CF2C6 /* TestCommon.framework */; }; + 78D602F8C0B7F22E8DC68A7B /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED07FE8864F33CBDEC73EA98 /* TestCommon.framework */; }; + 7986B86A2F2FE940ED8ED6E1 /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 63D913EF7A0370FCA4F0D76A /* PromiseKit.framework */; }; + 79CFFE190D403FD872C555F8 /* ConnectionInfoF.ice in Sources */ = {isa = PBXBuildFile; fileRef = C2362DD1D9852CFEEBAED065 /* ConnectionInfoF.ice */; }; + 7A8AE539388B038C63648969 /* Client.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7992CA6EAF2AB4E48B3D2CF8 /* Client.swift */; }; + 7AAD0C1D4E6910E763F2B98F /* Test.ice in Sources */ = {isa = PBXBuildFile; fileRef = EB02E1C1762AA015913AF071 /* Test.ice */; }; + 7AD2F93AF42DA619A4397A05 /* Client.swift in Sources */ = {isa = PBXBuildFile; fileRef = D82FDA737E3962604D757B26 /* Client.swift */; }; + 7AF309B19BDED2A302FCD17F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 870EAA4BC7FF0C331853C50F /* Foundation.framework */; }; + 7AFEA1E29CBF0B9537735D09 /* UdpTransceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CF988BCAAC25BA3D04487165 /* UdpTransceiver.cpp */; }; + 7B2E17D63F1E14FAD4F3071E /* ClientPrivate.ice in Sources */ = {isa = PBXBuildFile; fileRef = 0C5C3C16DE4B7DE056FFC7DD /* ClientPrivate.ice */; }; + 7B405208E85F7EEB02A6F5FA /* Oneways.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF3F99A20C0C32083637ECBA /* Oneways.swift */; }; + 7B425A2330D538AFDC72C3C4 /* Plugin.ice in Sources */ = {isa = PBXBuildFile; fileRef = 4915A6FBAF6FEB632CFA7415 /* Plugin.ice */; }; + 7BF6FD90EFBD365BAACEB5F5 /* Router.ice in Sources */ = {isa = PBXBuildFile; fileRef = D010B56A525D084DFD68EAC7 /* Router.ice */; }; + 7C122F8F5FF5F386B7979917 /* TestAMDI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 594A5893311594ABA84DDE2E /* TestAMDI.swift */; }; + 7C1CEF47029DF7C68531CCC3 /* ServerPrivateAMD.ice in Sources */ = {isa = PBXBuildFile; fileRef = 298A2BAAE7678208C78D1A2C /* ServerPrivateAMD.ice */; }; + 7C212DBE98D5C38A5C94FA24 /* Server.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AEBC064E6B609DA87301145 /* Server.swift */; }; + 7C47A2F289EE8C5B96CEED90 /* Properties.mm in Sources */ = {isa = PBXBuildFile; fileRef = 65314D334B73B7733B0F9D65 /* Properties.mm */; }; + 7CE33B9CA6DB5A9306A77CBE /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 63D913EF7A0370FCA4F0D76A /* PromiseKit.framework */; }; + 7D4244581C14997214F8C6A3 /* TestI.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD6AE2FCE004CAB6C3E812A2 /* TestI.swift */; }; + 7D4318A3E025C195FD895715 /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C7C5BFE9B16BF237E7782A4F /* Ice.framework */; }; + 7D67F533D4FF72774872EE43 /* Properties.ice in Sources */ = {isa = PBXBuildFile; fileRef = 4A796EC75AE3F3A95CF44FF5 /* Properties.ice */; }; + 7DC14E0499B9973FDDB079B4 /* SecureTransportEngine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4D775F15581ED90C5BF0EE05 /* SecureTransportEngine.cpp */; }; + 7DC1E34AC15810DB16B0E07C /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C7C5BFE9B16BF237E7782A4F /* Ice.framework */; }; + 7E1EF352BDB791A380BADF3A /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAD5CB65C9E749E09CE7AAEA /* Ice.framework */; }; + 7EBF4A2531C083AA753C685A /* Client.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF2E3A220AC9E9A060DB583D /* Client.swift */; }; + 7EC4A99947DB3AA55E8407A7 /* Test.ice in Sources */ = {isa = PBXBuildFile; fileRef = 81DDF0548E42CFB37B7CD4C4 /* Test.ice */; }; + 7F406C6D7ED99031DC99A7A4 /* ConnectionInfo.ice in Sources */ = {isa = PBXBuildFile; fileRef = 251C120660145DCD5FB6FB5B /* ConnectionInfo.ice */; }; + 7F535B80DA419AB8A5A03A2C /* SecureTransportUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6129E466F70D4E4A399A8E9E /* SecureTransportUtil.cpp */; }; + 7FA26E6B4603B73F45AE5007 /* Client.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5FEAC4680FEC7C7B72A4D8D0 /* Client.swift */; }; + 7FB7F2E1B615DC5A1A6F482B /* AllTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95B6991B5CF369BEF354B351 /* AllTests.swift */; }; + 7FB99ECE268712E36B7B53E6 /* ClientPrivate.ice in Sources */ = {isa = PBXBuildFile; fileRef = 0C5C3C16DE4B7DE056FFC7DD /* ClientPrivate.ice */; }; + 801E59CEA3CEE160729B3FB3 /* TestI.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBAE3F2B1229BBA66D21BABF /* TestI.swift */; }; + 804601C12B4DCF8E2962419A /* TestAMD.ice in Sources */ = {isa = PBXBuildFile; fileRef = 97BB271A8188770DE5EE5B74 /* TestAMD.ice */; }; + 80478388702B52A7CAB1004F /* Timer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 691D4FAE09254013CDF14460 /* Timer.cpp */; }; + 80489A9181F3EFC1FBE3C63B /* IceUtil.mm in Sources */ = {isa = PBXBuildFile; fileRef = 03B19351ED5C7121B2A4A39E /* IceUtil.mm */; }; + 80581DA89E19746857EF4C89 /* Client.swift in Sources */ = {isa = PBXBuildFile; fileRef = 632FF48F5F20042AE238ECC6 /* Client.swift */; }; + 8062048D087502A5E6E44F54 /* RouterF.ice in Sources */ = {isa = PBXBuildFile; fileRef = 6709AE92A21F7B4AA66E804F /* RouterF.ice */; }; + 810C6BC3873156BD3160FAEA /* Base64.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D1904D537D8689AA15D64A62 /* Base64.cpp */; }; + 815FE5DA79FF747CBD55369F /* Test.ice in Sources */ = {isa = PBXBuildFile; fileRef = 51E73D7AFEB64D2A351E19B8 /* Test.ice */; }; + 81951EFBCF6AFA70E508784F /* AllTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 189E3ED7C7335F42F131CAE4 /* AllTests.swift */; }; + 81CEAEB60E6B5F2FC1CA966B /* SliceChecksumDict.ice in Sources */ = {isa = PBXBuildFile; fileRef = 463459FB7D8F704FD77898C4 /* SliceChecksumDict.ice */; }; + 81D2BCF1FA22A2D1CFE00B32 /* Server.swift in Sources */ = {isa = PBXBuildFile; fileRef = 007AC5018F40F695098F6B05 /* Server.swift */; }; + 8207516B2FA51F6FCE0C42BF /* EndpointF.ice in Sources */ = {isa = PBXBuildFile; fileRef = 31D2324E9514306729E2C600 /* EndpointF.ice */; }; + 8228BD42AA5A25AC6E87D187 /* SSLInfo.ice in Sources */ = {isa = PBXBuildFile; fileRef = 47241080E5C1C81B6F322C3A /* SSLInfo.ice */; }; + 8260860CB12C8EC8A3FA06F0 /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C7C5BFE9B16BF237E7782A4F /* Ice.framework */; }; + 8282A2CFB899B21538391DC8 /* SlicedData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 85A9DD97447DA62B03DD75B9 /* SlicedData.cpp */; }; + 8290741F20C410FF4AFD1A9E /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 622CA373CF127B6E7D1CF2C6 /* TestCommon.framework */; }; + 8293738748B5C99D3F2242E9 /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C7C5BFE9B16BF237E7782A4F /* Ice.framework */; }; + 82948E7AAA13ECE7BD6B2DF0 /* AllTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D5180800465FD5D453E63A6 /* AllTests.swift */; }; + 8296C9B7C6A6EFF8AC71E731 /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAD5CB65C9E749E09CE7AAEA /* Ice.framework */; }; + 82B147E53A6A1B26D83AED95 /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C7C5BFE9B16BF237E7782A4F /* Ice.framework */; }; + 82CB458EC25B0D7016BBCB69 /* AllTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E1A635F482FAF37FB9C9FA5 /* AllTests.swift */; }; + 82F367187335A7186BBB4A4D /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C7C5BFE9B16BF237E7782A4F /* Ice.framework */; }; + 8317C8C456A6E3EEE423C17F /* AllTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDDEF36D017621261C2520D4 /* AllTests.swift */; }; + 833B8E079FBEE002618FF5E2 /* ConnectionF.ice in Sources */ = {isa = PBXBuildFile; fileRef = 828B38E787FC8723C83D4919 /* ConnectionF.ice */; }; + 8374A1E756FC4199EB747D37 /* ConnectionInfo.ice in Sources */ = {isa = PBXBuildFile; fileRef = 865B104EF3F6EDED00ED2754 /* ConnectionInfo.ice */; }; + 8440CFF5937793683F5B8E1F /* Selector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 453895616D7087BC3656F550 /* Selector.cpp */; }; + 8480D0E872A2C04C2D5BC30F /* Initialize.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C284BB2FB9EBB2B69001E4B1 /* Initialize.cpp */; }; + 84D4AA4F315D5EB64044D6D9 /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D41A319A7B3B147FDC8EA45 /* PromiseKit.framework */; }; + 84EF9CF799CC859BF3F546E1 /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED07FE8864F33CBDEC73EA98 /* TestCommon.framework */; }; + 84FAB5CF6544CF7654634891 /* Test.ice in Sources */ = {isa = PBXBuildFile; fileRef = 8A5C9E0BB881BCF4F6F0FA8F /* Test.ice */; }; + 85260B1BAA3C3A090CCF322F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 870EAA4BC7FF0C331853C50F /* Foundation.framework */; }; + 858663DD2376A3A1958E3C2F /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 622CA373CF127B6E7D1CF2C6 /* TestCommon.framework */; }; + 862C4E66B85E3ECF4A1521CC /* SliceInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92B681D8A5D3A17094255E4A /* SliceInfo.swift */; }; + 8654AAE1C07FF10C18E089D6 /* ServantLocatorI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81B7B64819E414CA3B2A2EE1 /* ServantLocatorI.swift */; }; + 86809D246C88517A3F6A3890 /* Endpoint.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9B2225BF2C6D5186590EAE48 /* Endpoint.mm */; }; + 86B70C52CCA873564E80DD2A /* Server.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16E86B74195482C819014115 /* Server.swift */; }; + 86D41F23A527D64B2C4187DD /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A74A24CD7ED2FBFECB9FED97 /* Cocoa.framework */; }; + 86E9FE7CF8A67D4094F8C15C /* Server.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29DCEF1F0D3756A0B2657EF3 /* Server.swift */; }; + 87101CEFB8D326A7FBF2CF51 /* TestI.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBAE3F2B1229BBA66D21BABF /* TestI.swift */; }; + 8731649E5AF2C80585387869 /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C7C5BFE9B16BF237E7782A4F /* Ice.framework */; }; + 878653A47C4AFA3DA2AD6970 /* Router.ice in Sources */ = {isa = PBXBuildFile; fileRef = B497B16BCF0F6A55224FFDB0 /* Router.ice */; }; + 87A73CC0117A10B57A847CB7 /* Router.ice in Sources */ = {isa = PBXBuildFile; fileRef = B497B16BCF0F6A55224FFDB0 /* Router.ice */; }; + 87BEB96248BAE545D255536C /* TestI.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD6AE2FCE004CAB6C3E812A2 /* TestI.swift */; }; + 87E1796B9EE2FA728DB4A7B2 /* ObjectAdapterI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B5C9BA809A1302EC50A6E99 /* ObjectAdapterI.cpp */; }; + 881E80BE4D93AF2D69E9D540 /* Clash.ice in Sources */ = {isa = PBXBuildFile; fileRef = 13D302603E36BF30FF10F7D0 /* Clash.ice */; }; + 888F1ACE25CF32F29BB854E9 /* IceEnums.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 0D1C059D4BA5E01CB0ADFBB4 /* IceEnums.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + 89196C3343A05B724A057DAD /* ImplicitContext.ice in Sources */ = {isa = PBXBuildFile; fileRef = 4C1E574FCAD6BE4FD30AAEF9 /* ImplicitContext.ice */; }; + 896D746CB2DF64AF41A2FECB /* Connector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C06D8D06675BAF6E05DCBC8D /* Connector.cpp */; }; + 89BEC7E895F43E38C321F17B /* ServerAMD.swift in Sources */ = {isa = PBXBuildFile; fileRef = B923D26B7ACBD6A753291EF2 /* ServerAMD.swift */; }; + 89C4ADD39592781BEF5C7C06 /* Server.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CFD4B7164DA1D8892FBBA97 /* Server.swift */; }; + 8A169B84739D2F9FF8FC87AD /* Time.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BFBAEAB4EA096824A6EC790D /* Time.cpp */; }; + 8A4E2D7C5856755FDE340FF5 /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 63D913EF7A0370FCA4F0D76A /* PromiseKit.framework */; }; + 8B13A5EB8AD8D9494BDC2ADE /* PluginFacade.ice in Sources */ = {isa = PBXBuildFile; fileRef = 6FFA737E371CC954F700F596 /* PluginFacade.ice */; }; + 8B2F6A920D423DB3E9272CD9 /* ServantLocatorF.ice in Sources */ = {isa = PBXBuildFile; fileRef = A373F10D83CCD608A39E3835 /* ServantLocatorF.ice */; }; + 8B6406CE4AAC4A8487627FCC /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C7C5BFE9B16BF237E7782A4F /* Ice.framework */; }; + 8B69E85502B7E4CA12359F4D /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 63D913EF7A0370FCA4F0D76A /* PromiseKit.framework */; }; + 8B7FA1C907BA9E87BB19FD7A /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 622CA373CF127B6E7D1CF2C6 /* TestCommon.framework */; }; + 8B9CAD919655934C047AD80E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 870EAA4BC7FF0C331853C50F /* Foundation.framework */; }; + 8BE12B44A43BA5372393CA7B /* InputStream.swift in Sources */ = {isa = PBXBuildFile; fileRef = 911798EC58B6007855943BCB /* InputStream.swift */; }; + 8BEF31A45F463E473E9D4B90 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 870EAA4BC7FF0C331853C50F /* Foundation.framework */; }; + 8C38404A0612603410A3A8FE /* BlobjectAsync.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0290A48F7C23A5D1DDAD3AC1 /* BlobjectAsync.swift */; }; + 8C3F66D108C0E934A1382B57 /* UnknownSlicedValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8902EE450DF3A87D4781F048 /* UnknownSlicedValue.swift */; }; + 8C863CF9C7AA5000EAF7D40A /* Twoways.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67DDFF09213CF8A855D0B4AD /* Twoways.swift */; }; + 8C8E5292824134178FDC78ED /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED07FE8864F33CBDEC73EA98 /* TestCommon.framework */; }; + 8CF3759C7256686F4ECC007B /* Protocol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D1AD8A96BB32FF7809DC6633 /* Protocol.cpp */; }; + 8D057CA16BD9526346EAB822 /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED07FE8864F33CBDEC73EA98 /* TestCommon.framework */; }; + 8D56486B473522E645D69765 /* Test.ice in Sources */ = {isa = PBXBuildFile; fileRef = 1B17AE9C3FC4801EE0862F7C /* Test.ice */; }; + 8DC9025489BEF2487C2F5734 /* Client.swift in Sources */ = {isa = PBXBuildFile; fileRef = D37E67061387971945F490E0 /* Client.swift */; }; + 8DF3B87B9D092675497D4219 /* Connector.mm in Sources */ = {isa = PBXBuildFile; fileRef = 52F7D69A485A017B07B8AD31 /* Connector.mm */; }; + 8E03693DEC23701338163475 /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 622CA373CF127B6E7D1CF2C6 /* TestCommon.framework */; }; + 8E77EA72AB3765E81EFF2716 /* IceScope.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = D3EDEB5642C2CD4B0494A7E1 /* IceScope.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + 8E7F7A35615E19366178CECD /* TestI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 756F0C35DE3CC240831BE50C /* TestI.swift */; }; + 8E884AA4A0FFDEAE1C69C536 /* Metrics.ice in Sources */ = {isa = PBXBuildFile; fileRef = 038D248253FFFD10F4AB2F27 /* Metrics.ice */; }; + 8E8CC6E805E88F33C69866C8 /* SliceChecksums.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AC62CFA712B929BDCEBCFB6B /* SliceChecksums.cpp */; }; + 8E904C680D817A0A95E2F3CE /* AllTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 737728F65186B1B6E7C4D3CA /* AllTests.swift */; }; + 8E964F3DACBE978862F34FEE /* IceBinding.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = EB0FE3041559F39854E345D2 /* IceBinding.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + 8EB5D214C134F6A55688AC8C /* TestAMD.ice in Sources */ = {isa = PBXBuildFile; fileRef = C00D91287CDA6E27D20C9D3A /* TestAMD.ice */; }; + 8ED66F8FEF1F6649227B911C /* TcpAcceptor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D732E2E9FBBA59C3AABBF754 /* TcpAcceptor.cpp */; }; + 8F142B8D24C102CC58D52386 /* AllTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BAEABBFF7FB0FB8BF7953AD0 /* AllTests.swift */; }; + 8F26F3F88C26D3B635AFD9F8 /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D41A319A7B3B147FDC8EA45 /* PromiseKit.framework */; }; + 8F2E90D8BCB77B541C80D214 /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 63D913EF7A0370FCA4F0D76A /* PromiseKit.framework */; }; + 8F582E5D902956EA60956356 /* IceTimeout.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 510DBF2E39A80486AC1E8ADB /* IceTimeout.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + 8F8FF9B637157B7A27DBC7B6 /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED07FE8864F33CBDEC73EA98 /* TestCommon.framework */; }; + 8FBA62A93748A6FB19AF24AE /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C7C5BFE9B16BF237E7782A4F /* Ice.framework */; }; + 8FD77B93B37B5CEDD1B365A9 /* Proxy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7605F07734AEBCA7AF79DDE5 /* Proxy.cpp */; }; + 8FF381BC2F390D9F8C387ECF /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 63D913EF7A0370FCA4F0D76A /* PromiseKit.framework */; }; + 902EDE4A3367389B473A207D /* IceLocation.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 40E19608103D6C861DE753D1 /* IceLocation.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + 903FFBE08504828BD7170B02 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A74A24CD7ED2FBFECB9FED97 /* Cocoa.framework */; }; + 9068EF83D1AB9147D0C0CC8C /* IceUdp.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 31F3F7F8FC3116D9134C7D81 /* IceUdp.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + 90AE016C11083EE0C82DF159 /* BlobjectFacade.mm in Sources */ = {isa = PBXBuildFile; fileRef = E4FC64A9E74B4DBB9C9A057C /* BlobjectFacade.mm */; }; + 90AE1AE1E1A015A4B0AD3A89 /* TestAMD.ice in Sources */ = {isa = PBXBuildFile; fileRef = CE5804052FC5A96D221B8803 /* TestAMD.ice */; }; + 90B8A5497FE4A13C9B0F0EA5 /* Client.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAF1350F67CE8D3A4348F3E9 /* Client.swift */; }; + 90C0D0B653B21376C3EC5221 /* ServantLocatorI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81B7B64819E414CA3B2A2EE1 /* ServantLocatorI.swift */; }; + 90CB5BD15D8E665E71213FC8 /* Client.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0A305D5937C66216F11CF05 /* Client.swift */; }; + 90EB201396CE6388F6656751 /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAD5CB65C9E749E09CE7AAEA /* Ice.framework */; }; + 90F8A98AFA2D1F259DBD38D7 /* ObjectFactory.ice in Sources */ = {isa = PBXBuildFile; fileRef = 00BB2BF06851445F36D214CC /* ObjectFactory.ice */; }; + 9115E061CAAA1563B2222D34 /* Endpoint.ice in Sources */ = {isa = PBXBuildFile; fileRef = CEDF515DDF519A53EF31E84C /* Endpoint.ice */; }; + 91558ABD0D796D04ED3A6ABA /* SHA1.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4771A7DB0DD97F7601FBE649 /* SHA1.cpp */; }; + 916715DA8664AE85F441A57B /* Test.ice in Sources */ = {isa = PBXBuildFile; fileRef = 51E73D7AFEB64D2A351E19B8 /* Test.ice */; }; + 9182A3EE4ABF58E0BEF936D1 /* AllTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38BFB7678058CA1EF051EC45 /* AllTests.swift */; }; + 92324A8D3D4F9197D56623AF /* Instrumentation.ice in Sources */ = {isa = PBXBuildFile; fileRef = DAEA5CA5740117C6BC42907B /* Instrumentation.ice */; }; + 92530902D41DEB7AD9D9758C /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 63D913EF7A0370FCA4F0D76A /* PromiseKit.framework */; }; + 92559FD2CDD8C2CB0D1F65E4 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A74A24CD7ED2FBFECB9FED97 /* Cocoa.framework */; }; + 927032EBA2B1F40DC8487E63 /* Client.swift in Sources */ = {isa = PBXBuildFile; fileRef = CAFF8224F16416487A770A39 /* Client.swift */; }; + 928A899C3EAFD3259D77A4AE /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C7C5BFE9B16BF237E7782A4F /* Ice.framework */; }; + 92D939B7670E1DD3E9625AFF /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A74A24CD7ED2FBFECB9FED97 /* Cocoa.framework */; }; + 92D9ACFF43B9D501CBB63C4D /* IceStream.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = B1ABFBA6618639D0436D60A6 /* IceStream.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + 9305DB46B28E8E729A7119C9 /* EventHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B27746854547F83FD3400B1 /* EventHandler.cpp */; }; + 93AFBFEC80ABBDA5CAB51A8C /* ConnectionInfoF.ice in Sources */ = {isa = PBXBuildFile; fileRef = C2362DD1D9852CFEEBAED065 /* ConnectionInfoF.ice */; }; + 93BA0B3C27807F67B97CADA6 /* IceRetry.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 9C8A4C7448EF28DFB238F82D /* IceRetry.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + 93C77C6C27628580319C283C /* TestI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5084C1A132AC7CBADD433784 /* TestI.swift */; }; + 93C7E81353EEF247F3962543 /* Communicator.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2A825E2C1DC72FC2FC36D7BA /* Communicator.mm */; }; + 93FCFC220E1DB15B5607A83D /* Test.ice in Sources */ = {isa = PBXBuildFile; fileRef = A93A87F8B9860213E8240A72 /* Test.ice */; }; + 943AB310D41F6110D5403509 /* TestI.swift in Sources */ = {isa = PBXBuildFile; fileRef = F1D9A1622A7CDA70227F3E60 /* TestI.swift */; }; + 9465368AE598309A56B969C7 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 870EAA4BC7FF0C331853C50F /* Foundation.framework */; }; + 9483E80F3F4A2889E4969CE6 /* EndpointF.ice in Sources */ = {isa = PBXBuildFile; fileRef = 31D2324E9514306729E2C600 /* EndpointF.ice */; }; + 94EDE06AB53F88B15D15952A /* IceAmi.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = FFB017C2AB2174BF2CA9A97C /* IceAmi.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + 95329B737CA36A0BE38A03CD /* LoggerWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0BDC7ABB450D5DCFB59EBCB /* LoggerWrapper.swift */; }; + 9534BC69723BA50D6E4F9051 /* LocalException.ice in Sources */ = {isa = PBXBuildFile; fileRef = 030F29F231CBED0013A88C7B /* LocalException.ice */; }; + 955248EA6392CDF13EC13C50 /* TestI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 811F0B562E73A9C2AAEE013E /* TestI.swift */; }; + 95DD355FC2536BD349460D31 /* Client.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BB88B644528FB390A4A8135 /* Client.swift */; }; + 96061FF79BD52CE567BAA565 /* Logger.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1A5BA94BC27B8423B16532B7 /* Logger.mm */; }; + 9609B9E06CF45255304A6C49 /* LocatorInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48588A0FEC71B23F244B557F /* LocatorInfo.cpp */; }; + 967A22E037FCDADCF2D49AB7 /* CommunicatorF.ice in Sources */ = {isa = PBXBuildFile; fileRef = 1253B9777BCF966221D0C86F /* CommunicatorF.ice */; }; + 971F710A781358F5305F22F1 /* Server.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16E86B74195482C819014115 /* Server.swift */; }; + 973F141CE455CA2119C25248 /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAD5CB65C9E749E09CE7AAEA /* Ice.framework */; }; + 97A7275AC7365D50F90BDF91 /* Server.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6296F751356C58951A1119CF /* Server.swift */; }; + 97E7472656EB049051D43CD5 /* Collocated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F87AF0E3A8122C0FC3E3285 /* Collocated.swift */; }; + 98296B67F02DC475B219EBB5 /* BuiltinSequences.ice in Sources */ = {isa = PBXBuildFile; fileRef = FE64D8105AAAEB060E6FA33A /* BuiltinSequences.ice */; }; + 9950EF11DE2C24CA6C3B5295 /* Test.ice in Sources */ = {isa = PBXBuildFile; fileRef = 9F1C91EC749224042C8D36BB /* Test.ice */; }; + 99AF3D2AF2A9F18BAA2096CD /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A74A24CD7ED2FBFECB9FED97 /* Cocoa.framework */; }; + 99BF17F52FC25AC7F396CF1A /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D41A319A7B3B147FDC8EA45 /* PromiseKit.framework */; }; + 99D78D6FA84D5F11CC089730 /* Object.swift in Sources */ = {isa = PBXBuildFile; fileRef = C416308864EF7F37BD16EF96 /* Object.swift */; }; + 9A14E0C94C5EEF25C03F08DB /* Client.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7992CA6EAF2AB4E48B3D2CF8 /* Client.swift */; }; + 9A71491654FFEEB17023FA21 /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED07FE8864F33CBDEC73EA98 /* TestCommon.framework */; }; + 9AB32FD9C2646ACAFEB7FD0D /* Collocated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A19B0718445836901D562D6 /* Collocated.swift */; }; + 9ABB9C0E752D3012752968CC /* UdpTransceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CF988BCAAC25BA3D04487165 /* UdpTransceiver.cpp */; }; + 9ACD1E8099130F8CC27CE2E9 /* Test.ice in Sources */ = {isa = PBXBuildFile; fileRef = ED2FACB490C9A2EC5A501FB9 /* Test.ice */; }; + 9B2DFFE5EB15B108F30D0915 /* ImplicitContextI.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3E604B3B94EAAC2109E4D82 /* ImplicitContextI.swift */; }; + 9B5E2668C04862999733DDDE /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAD5CB65C9E749E09CE7AAEA /* Ice.framework */; }; + 9BE2C0ACD688691E7E409020 /* CountDownLatch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 300ACD38E0CCC3978AACB703 /* CountDownLatch.cpp */; }; + 9C06D28AA9895CD485F0B73B /* certs in Resources */ = {isa = PBXBuildFile; fileRef = 2C015EF6A0A8A9EEE016CF9F /* certs */; }; + 9C1EA8A782106DEC2C9DC104 /* Client.swift in Sources */ = {isa = PBXBuildFile; fileRef = 359279F78A2113594A1CF8A8 /* Client.swift */; }; + 9C285E575802C41F1AA533A4 /* Test.ice in Sources */ = {isa = PBXBuildFile; fileRef = E9040853D6AAE90134F12ED0 /* Test.ice */; }; + 9C4813DCA89FC4E87EA6D2A6 /* EndpointInfo.ice in Sources */ = {isa = PBXBuildFile; fileRef = FB3C559B17046F98ED28C5E3 /* EndpointInfo.ice */; }; + 9C4FD0A3E3F69C57B1EDA21E /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAD5CB65C9E749E09CE7AAEA /* Ice.framework */; }; + 9C73A24ED5297F2F2C3EA400 /* SliceChecksums.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AC62CFA712B929BDCEBCFB6B /* SliceChecksums.cpp */; }; + 9C75D5C1E5BABD42CBCF437F /* Test.ice in Sources */ = {isa = PBXBuildFile; fileRef = 52D7B25FF0A236B7B69B2B48 /* Test.ice */; }; + 9D01EE4DD908E7B5A1B79245 /* EndpointTypes.ice in Sources */ = {isa = PBXBuildFile; fileRef = A6D1E38568D7656F13F57D5A /* EndpointTypes.ice */; }; + 9D3615757B81A26C2445F7A9 /* Client.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B89423116A9D0059B0444DB /* Client.swift */; }; + 9D3FAB553BD6EB839E51838F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 870EAA4BC7FF0C331853C50F /* Foundation.framework */; }; + 9D5AAD7817CC09882672DB34 /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C7C5BFE9B16BF237E7782A4F /* Ice.framework */; }; + 9D66DF2D6A41A7293DB8E7B7 /* TestAMDI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84D759E6446D5F71CE241600 /* TestAMDI.swift */; }; + 9DBF6AFA41514D6CA9696830 /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 622CA373CF127B6E7D1CF2C6 /* TestCommon.framework */; }; + 9DE28D7CCA347C26D9A58546 /* Initialize.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BFDA8F3C438AF1F853497C0 /* Initialize.swift */; }; + 9DF2210E1F7DD17814868F92 /* PropertiesAdminI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14FABAAED2F701CC5D6E21C2 /* PropertiesAdminI.swift */; }; + 9E1BBEE1881CE45898C118AA /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 622CA373CF127B6E7D1CF2C6 /* TestCommon.framework */; }; + 9E1EC10BC9D455EB037A91AC /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D41A319A7B3B147FDC8EA45 /* PromiseKit.framework */; }; + 9EC43732C579C6A1457FCAA6 /* Server.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A1A8FEE7AB16055C7C60B15 /* Server.swift */; }; + 9EEF26F05181D34AEFCF6DF1 /* Process.mm in Sources */ = {isa = PBXBuildFile; fileRef = C8F45B78B8F03318158A9D56 /* Process.mm */; }; + 9F174518AD0D9F138558DEC0 /* TestAMD.ice in Sources */ = {isa = PBXBuildFile; fileRef = C00D91287CDA6E27D20C9D3A /* TestAMD.ice */; }; + 9F324086BBE7C8BA08E6198D /* Protocol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D1AD8A96BB32FF7809DC6633 /* Protocol.cpp */; }; + 9F4FE503B03F3DD0A41C2C47 /* TestI.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA9CA8ABE0C8034574EE00F5 /* TestI.swift */; }; + 9F6B8F7B2A7074C47FC04A5A /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAD5CB65C9E749E09CE7AAEA /* Ice.framework */; }; + 9F84BE91EF951B50498893A7 /* AllTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94307650C0CD9D1D4B13D275 /* AllTests.swift */; }; + 9F851879E9A627089340C94B /* TestI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5084C1A132AC7CBADD433784 /* TestI.swift */; }; + 9F88D21C75E00AD868EBF425 /* ArgVector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F4BE441730E27358FD5FD7F9 /* ArgVector.cpp */; }; + A00A51BF861E7BD0905E5EEF /* AllTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94307650C0CD9D1D4B13D275 /* AllTests.swift */; }; + A027DEB34D2A5AE08D7546C7 /* EndpointI.mm in Sources */ = {isa = PBXBuildFile; fileRef = DE9F16504D23B3F58D7AF4CA /* EndpointI.mm */; }; + A0F1E181DB84DE1FCFD19F1F /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A74A24CD7ED2FBFECB9FED97 /* Cocoa.framework */; }; + A13A75687B50F9355CAD529E /* Client.swift in Sources */ = {isa = PBXBuildFile; fileRef = F166F176384EC5B63F51A139 /* Client.swift */; }; + A161EA8E1757FBC5D68B69DC /* LocalExceptionDescription.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBFCC3CB5A23A85DE6AE2607 /* LocalExceptionDescription.swift */; }; + A1629F176A5E2774C553FD0A /* Version.ice in Sources */ = {isa = PBXBuildFile; fileRef = B912CA6E0A1F10F0DF6E9E77 /* Version.ice */; }; + A1705E2DDBD274DF1EF80EF5 /* ObjectAdapterI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B5C9BA809A1302EC50A6E99 /* ObjectAdapterI.cpp */; }; + A1D7D32DE43F49C7AE392228 /* libIce C++11 iOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4D09012971D6D0CE7EAB4D44 /* libIce C++11 iOS.a */; }; + A21D71A242CF383C9CF03CE5 /* EndpointInfo.ice in Sources */ = {isa = PBXBuildFile; fileRef = FB3C559B17046F98ED28C5E3 /* EndpointInfo.ice */; }; + A23B290F3FC39D873B9743CE /* TestI.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8818172CC090594D16C576F /* TestI.swift */; }; + A2656E627CEB8C1CFC24D633 /* PropertiesAdminI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 70565ECB1A3515AB0C667598 /* PropertiesAdminI.cpp */; }; + A274A8E64E8C0752DDA9DE22 /* AcceptorI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 61643EA5813C280FBB5DCA70 /* AcceptorI.cpp */; }; + A2D141C00BEC64530F12F5B3 /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D41A319A7B3B147FDC8EA45 /* PromiseKit.framework */; }; + A33B313F1E99CE7769712206 /* TestCommon.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = ED07FE8864F33CBDEC73EA98 /* TestCommon.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + A344090C94E205038F1A42E9 /* Test.ice in Sources */ = {isa = PBXBuildFile; fileRef = C9B9DCE19FD35FC0F6AD1D4D /* Test.ice */; }; + A3775E9539C7C91B33E366DF /* TraceUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 23DBDAAC4E927BA973813A9E /* TraceUtil.cpp */; }; + A3AD02B0A5E41F0D4C0090D7 /* Client.swift in Sources */ = {isa = PBXBuildFile; fileRef = 42852A32ED4AE895BFAAA6CA /* Client.swift */; }; + A46BCE5B5B5647639CD2099E /* ConnectionInfoFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3056C5DA712F55A97B05A44 /* ConnectionInfoFactory.swift */; }; + A4C1C4F567CF140824F8B265 /* IceSwift.h in Headers */ = {isa = PBXBuildFile; fileRef = 4610D441D9493C0B21FEF581 /* IceSwift.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A4D1AD4FEEA398BE9C53B3E6 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 870EAA4BC7FF0C331853C50F /* Foundation.framework */; }; + A4D2895060CC261A1BFA9734 /* Client.swift in Sources */ = {isa = PBXBuildFile; fileRef = 918271702A341F61A3F4082C /* Client.swift */; }; + A4E5E6E77F6F458E1D72C496 /* Test.ice in Sources */ = {isa = PBXBuildFile; fileRef = A93A87F8B9860213E8240A72 /* Test.ice */; }; + A511501ABDA208A416C31901 /* PluginI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 574BF372E6E418E4C6ED09C1 /* PluginI.cpp */; }; + A585B90A5E47BDEB13C41C5F /* Metrics.ice in Sources */ = {isa = PBXBuildFile; fileRef = 7AB71501E16A76D0ADC74A14 /* Metrics.ice */; }; + A589C74CB63780D6603AE7A9 /* Collocated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 925CBA6473C1C2E94842EF0C /* Collocated.swift */; }; + A5984D4628F1319536311ABA /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED07FE8864F33CBDEC73EA98 /* TestCommon.framework */; }; + A62E6DCDE26EDAD67AF12604 /* ConnectionI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 79B384D87B697743242782A4 /* ConnectionI.cpp */; }; + A68C1BC7960FC884E2D1376A /* SlicedData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8EC01BFFE83B9C38FC2EC096 /* SlicedData.swift */; }; + A6B50494CF67F672EA1F3F24 /* LookupI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FB44DA5C88EAA290CACFCFA8 /* LookupI.cpp */; }; + A6C53DA685719DAC77545B98 /* Logger.ice in Sources */ = {isa = PBXBuildFile; fileRef = A7C655DD11BD41ED4C3D1E99 /* Logger.ice */; }; + A6D90B46E6BCEC345B576790 /* ConnectRequestHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 80DFB051092F5C0B9386E466 /* ConnectRequestHandler.cpp */; }; + A6FF773BDF6A0624BFF283F8 /* ObjectFactory.ice in Sources */ = {isa = PBXBuildFile; fileRef = 00BB2BF06851445F36D214CC /* ObjectFactory.ice */; }; + A74A787834229ACFAF304968 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 870EAA4BC7FF0C331853C50F /* Foundation.framework */; }; + A7BF56F7CF15C7F1918E2E52 /* LoggerF.ice in Sources */ = {isa = PBXBuildFile; fileRef = 7F2F45A4AF18D649F0885E9B /* LoggerF.ice */; }; + A7D79C2160E1690B1B355FE3 /* ObjectPrx.mm in Sources */ = {isa = PBXBuildFile; fileRef = C7F5F0B0B745C16310D6682D /* ObjectPrx.mm */; }; + A8004C0FF562C004722DA28E /* Process.ice in Sources */ = {isa = PBXBuildFile; fileRef = 1010042EF9CEC31FC0AFD485 /* Process.ice */; }; + A809FFB0B8C078098B22F387 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A74A24CD7ED2FBFECB9FED97 /* Cocoa.framework */; }; + A81DFD0B12ABA23D4771ED3D /* Object.swift in Sources */ = {isa = PBXBuildFile; fileRef = C416308864EF7F37BD16EF96 /* Object.swift */; }; + A85E11AB40B665E8D1AEEBEF /* PluginF.ice in Sources */ = {isa = PBXBuildFile; fileRef = 488A75C9C0C95733FE145F5A /* PluginF.ice */; }; + A8B6CFAB24460B2BDE7C58B7 /* ImplicitContext.ice in Sources */ = {isa = PBXBuildFile; fileRef = 4C1E574FCAD6BE4FD30AAEF9 /* ImplicitContext.ice */; }; + A8CCC4602948BC4C7B5503C0 /* DefaultsAndOverrides.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D54F27BBB79EC99E49FB8337 /* DefaultsAndOverrides.cpp */; }; + A90C6C367CC7904EF0DC177E /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED07FE8864F33CBDEC73EA98 /* TestCommon.framework */; }; + A9243EB153450F0DE53BA660 /* Server.swift in Sources */ = {isa = PBXBuildFile; fileRef = D4153C0A035AFF362A8D7A6E /* Server.swift */; }; + A967AB8FFE8972130A8CA8A6 /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAD5CB65C9E749E09CE7AAEA /* Ice.framework */; }; + A97771ADBEF1A6EDC22F9FC6 /* ServantLocator.ice in Sources */ = {isa = PBXBuildFile; fileRef = CAABDEC1B20906FA83353809 /* ServantLocator.ice */; }; + A9EAD36CD0E265BF5422B2EC /* IceStream.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 2AFD482C35C038A3328285CC /* IceStream.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + AA0294E00C2FE7652DD592C3 /* ImplicitContextI.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3E604B3B94EAAC2109E4D82 /* ImplicitContextI.swift */; }; + AA120F059C52079C902C1B8F /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAD5CB65C9E749E09CE7AAEA /* Ice.framework */; }; + AAC43E2826D7C8C775C07ADA /* TestI.swift in Sources */ = {isa = PBXBuildFile; fileRef = E662BDACBA5DA47F7B5E0D04 /* TestI.swift */; }; + AAC7BD7A4683A421BF72A737 /* IceSlicingObjects.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = F07BAE3EB07F426600EE9C4C /* IceSlicingObjects.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + AAE3866DFAB4450003968986 /* SliceFlags.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A368B3C0257A6AF1B876892 /* SliceFlags.swift */; }; + AB27AA516E177CA868CCEF8A /* BuiltinSequences.ice in Sources */ = {isa = PBXBuildFile; fileRef = FE64D8105AAAEB060E6FA33A /* BuiltinSequences.ice */; }; + AB2876F1070F5F007BF822CC /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 63D913EF7A0370FCA4F0D76A /* PromiseKit.framework */; }; + AB4BB965E090B3E55945BE33 /* Server.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BB5940A27038DF47F718AB3 /* Server.swift */; }; + AB9EEF334EBE6B5C8ABBC0C5 /* MetricsAdminI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3632C5F63AE7689F894CBC54 /* MetricsAdminI.cpp */; }; + ABBE6A3DAFFB6DF549C7D01B /* IPEndpointI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1F9F2ADAF33F9B5F3499E01F /* IPEndpointI.cpp */; }; + AC0B69FE480108291EB2124A /* Client.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1146EA738EEBF0E8643A7CD7 /* Client.swift */; }; + AC23434D9BCBD401F19681A8 /* WSEndpoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 375CE372A58028D41159AAA5 /* WSEndpoint.cpp */; }; + AC2DD04F7E028F89C6365B96 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A74A24CD7ED2FBFECB9FED97 /* Cocoa.framework */; }; + AC91AA266BF85CE025254520 /* ObjectAdapterFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 15F2E4CA99023797339779F0 /* ObjectAdapterFactory.cpp */; }; + AD0BFCFC01E600EE7A0B2DC8 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 870EAA4BC7FF0C331853C50F /* Foundation.framework */; }; + AD19E63990B7BE1D9358DBB7 /* TestI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07504CB28A77E27A13CD5553 /* TestI.swift */; }; + AD2319B690F6B21CB910F7E5 /* Communicator.ice in Sources */ = {isa = PBXBuildFile; fileRef = A46ED6C2DA9BB2B842766CCF /* Communicator.ice */; }; + AD2AC03AA21DAF4F6669F042 /* Client.swift in Sources */ = {isa = PBXBuildFile; fileRef = EEB80E71EB7BE144DED9D320 /* Client.swift */; }; + AD5AB6A52D6C9EB257C2D04C /* ProxyFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A5EE97F0338BD9EAD0DE1B10 /* ProxyFactory.cpp */; }; + AD613B0F2C16C825D4B5499C /* TrustManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5FE4A2CF0D4682384614B575 /* TrustManager.cpp */; }; + ADD6569B945D243B753160F6 /* TestI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05EB4357B9BD383A57728E3B /* TestI.swift */; }; + ADEE77EBBABADB12E97FCC20 /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 63D913EF7A0370FCA4F0D76A /* PromiseKit.framework */; }; + AE0EF2671CC51DC1710A086B /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED07FE8864F33CBDEC73EA98 /* TestCommon.framework */; }; + AE3C0F67BF8E4E9032C87F42 /* ServantLocatorF.ice in Sources */ = {isa = PBXBuildFile; fileRef = A373F10D83CCD608A39E3835 /* ServantLocatorF.ice */; }; + AE3CAE3A1F5504E58D02F1A8 /* Client.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91A7E4C4039CC1B374674571 /* Client.swift */; }; + AEAAD6DCB9BB84FE72E07E9E /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED07FE8864F33CBDEC73EA98 /* TestCommon.framework */; }; + AEB2FFCD134422D2EC0D378A /* Client.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C189898682F76F5B954526A /* Client.swift */; }; + AEE1EC2A3F2E53A79360847D /* Server.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93CD33F473CD961099A82773 /* Server.swift */; }; + AEFD42734D5DC29769433DE5 /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED07FE8864F33CBDEC73EA98 /* TestCommon.framework */; }; + AF0A218E4691DA35BD20B474 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 870EAA4BC7FF0C331853C50F /* Foundation.framework */; }; + AF7779DEDC41D17ABED0F025 /* Reference.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E325A4076B7D2F2EF9D33266 /* Reference.cpp */; }; + AFB439D96AECF5840AECBAC0 /* Exception.mm in Sources */ = {isa = PBXBuildFile; fileRef = 19231A4083CEDD81E52896EB /* Exception.mm */; }; + AFF30307E50DFE9E163C5D93 /* IconvStringConverter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 49301C14A9D200E30F8D1B51 /* IconvStringConverter.cpp */; }; + B04741B3EBC407C23184701D /* PropertiesF.ice in Sources */ = {isa = PBXBuildFile; fileRef = F57A0472503DA95892ED6B14 /* PropertiesF.ice */; }; + B048A06743619B09A0AEFD6A /* EndpointI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F96132367DF285FBBC548D6D /* EndpointI.cpp */; }; + B048ABD5E04694AE41279B73 /* FacetMap.ice in Sources */ = {isa = PBXBuildFile; fileRef = 5E8B177E95BA2D07DCEFDA1D /* FacetMap.ice */; }; + B059D05077DBE2076B836D77 /* LoggerF.ice in Sources */ = {isa = PBXBuildFile; fileRef = 7F2F45A4AF18D649F0885E9B /* LoggerF.ice */; }; + B08AA6E08D8637BE9D9EAEF1 /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D41A319A7B3B147FDC8EA45 /* PromiseKit.framework */; }; + B0C358210EE980C18A902EAF /* UnknownSlicedValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8902EE450DF3A87D4781F048 /* UnknownSlicedValue.swift */; }; + B1029866DFBA033EAFF3A472 /* OpaqueEndpointI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9AC2E1EE44058CE5096D663C /* OpaqueEndpointI.cpp */; }; + B1062E1B9BDEE598B473650A /* LoggerAdminI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 96A01B6D9C204DFF548C8D48 /* LoggerAdminI.cpp */; }; + B19BA4F6E443BD74DE0D588B /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAD5CB65C9E749E09CE7AAEA /* Ice.framework */; }; + B1D38B51204C62564018E52C /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED07FE8864F33CBDEC73EA98 /* TestCommon.framework */; }; + B1E863077DB39FB50DCCDCA5 /* ObjectAdapter.mm in Sources */ = {isa = PBXBuildFile; fileRef = C284F41389035557B72DC921 /* ObjectAdapter.mm */; }; + B2391CBC402E2E55C8F51E7C /* Cond.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FD05C8DE3492FA4593406C28 /* Cond.cpp */; }; + B255F941E152F865C6E30339 /* Server.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5DC688033A9F5344D4120EA9 /* Server.swift */; }; + B337EE7326BA19D34A7EE73C /* Test.ice in Sources */ = {isa = PBXBuildFile; fileRef = 472A966BEFE38D2EF99832A1 /* Test.ice */; }; + B35F1AAE24DD524FFEC2A740 /* ConnectionF.ice in Sources */ = {isa = PBXBuildFile; fileRef = 828B38E787FC8723C83D4919 /* ConnectionF.ice */; }; + B3746F4A950B960B70011143 /* ServantManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F62C515D81B4ECC1B8F7ECC2 /* ServantManager.cpp */; }; + B374A81C882FB9A2D9998686 /* ServantLocatorF.ice in Sources */ = {isa = PBXBuildFile; fileRef = A373F10D83CCD608A39E3835 /* ServantLocatorF.ice */; }; + B3BA06CE2BEDBF4F400FB941 /* TcpConnector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D9C3123B69C3917E0A365577 /* TcpConnector.cpp */; }; + B3BDDFC18CEDB47AD01F4E02 /* RemoteLogger.ice in Sources */ = {isa = PBXBuildFile; fileRef = 523B9454C940E0D81E8047AF /* RemoteLogger.ice */; }; + B3EF1EBCF891C8FDF3C46A70 /* UnsupportedAdminFacet.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9BB671D15F8523B6ABEE9F08 /* UnsupportedAdminFacet.mm */; }; + B40EEC8F3097A83F82206E95 /* TestAMDI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A8A24458E30DC80BCD1B434 /* TestAMDI.swift */; }; + B4114345FC2F2412DA28F9B5 /* Identity.ice in Sources */ = {isa = PBXBuildFile; fileRef = 3C5E7B57B4BF54ECEA2E7644 /* Identity.ice */; }; + B42409E28B853D363B40EA8B /* StreamEndpointI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7134B828724603F195A46A12 /* StreamEndpointI.cpp */; }; + B47A880D4E623F08EFB1B235 /* ConnectionI.swift in Sources */ = {isa = PBXBuildFile; fileRef = B69FB397DFE1E68FE87F0A52 /* ConnectionI.swift */; }; + B49EABE6CA5AD0911E9FC16B /* AllTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A7FAB4CC1E0F31A6C450E57 /* AllTests.swift */; }; + B4BF1FAE8BDCC9194F3FDC2B /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A74A24CD7ED2FBFECB9FED97 /* Cocoa.framework */; }; + B506652FDECE9CDC6CC7E509 /* BatchRequestQueue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8C011F62FA8756F9B88CB6E9 /* BatchRequestQueue.cpp */; }; + B5285AB65F75D6D1899ED35F /* Client.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C189898682F76F5B954526A /* Client.swift */; }; + B53282FBC297CAE847881427 /* EndpointInfo.ice in Sources */ = {isa = PBXBuildFile; fileRef = CE99BACF0BE149F69F2AFBFA /* EndpointInfo.ice */; }; + B53A93521592F0ECE9BB82EA /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAD5CB65C9E749E09CE7AAEA /* Ice.framework */; }; + B59A513DBD23712D26E14029 /* Assets.xcassets in Sources */ = {isa = PBXBuildFile; fileRef = B0B9EA5E559A15DBFE57A278 /* Assets.xcassets */; }; + B5B06F29860066079EF60978 /* TestI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88355021C7A31D08304EC1DA /* TestI.swift */; }; + B5B2A9B8B6191AC23C7BBBC8 /* Service.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 44A5BD8A0819F6426E07866F /* Service.cpp */; }; + B5CC2EE380409EECFFC62BFC /* IceAdapterDeactivation.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 52FF2F658D31F2A584C5CEC8 /* IceAdapterDeactivation.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + B5FA5423DEB7C1E7A569CC8B /* PluginFacade.ice in Sources */ = {isa = PBXBuildFile; fileRef = 6FFA737E371CC954F700F596 /* PluginFacade.ice */; }; + B603CD61A5042CF2474FC487 /* Key.ice in Sources */ = {isa = PBXBuildFile; fileRef = B16B5759917633FF3D305B78 /* Key.ice */; }; + B61D0D8AF61C44AFC3DF8714 /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED07FE8864F33CBDEC73EA98 /* TestCommon.framework */; }; + B6518FA8F55D0214A37C2D50 /* DynamicLibrary.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7EC016AF7C4C92CEE082A7B8 /* DynamicLibrary.cpp */; }; + B66C409ECE0FD6DA906A6388 /* AllTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6743B765683A9B925F99D1A9 /* AllTests.swift */; }; + B6734F9EF43EDB853AB9671F /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 622CA373CF127B6E7D1CF2C6 /* TestCommon.framework */; }; + B69D1512B4B754D93ED1C72F /* PluginI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D9CB1665FFC46CE91D4B9529 /* PluginI.cpp */; }; + B6B9595FF0BB44D8749A6C41 /* ServerPrivateAMD.ice in Sources */ = {isa = PBXBuildFile; fileRef = AD4098EC310F90065F58E268 /* ServerPrivateAMD.ice */; }; + B6B9FB7A79A2C88C4B06B073 /* Proxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 173315ECEF41B1A98A00B666 /* Proxy.swift */; }; + B6D66D7FE249EC682A7E004F /* PropertiesAdmin.ice in Sources */ = {isa = PBXBuildFile; fileRef = 2288D724247415182EE9EED7 /* PropertiesAdmin.ice */; }; + B6DC2394F0DB736BB6751758 /* Collocated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95D70577B75E2EF282CDA2F8 /* Collocated.swift */; }; + B71070BEF1C56AF5B5E4329B /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 622CA373CF127B6E7D1CF2C6 /* TestCommon.framework */; }; + B71DA4A44BDD6C9CF847E2C7 /* TwowaysAMI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 758E5A7716D74082A68175B3 /* TwowaysAMI.swift */; }; + B73330E7CA1FD5C37214D06C /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A74A24CD7ED2FBFECB9FED97 /* Cocoa.framework */; }; + B73AF4E022361F7D3EFDCB16 /* TestI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6EC50A5D5A8848770F31576D /* TestI.swift */; }; + B748CCD87EE9D9F3E023B28C /* Server.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E043CCAB631BD471DEF5B6E /* Server.swift */; }; + B76FEB2700DE8349A2567CE2 /* SecureTransportUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6129E466F70D4E4A399A8E9E /* SecureTransportUtil.cpp */; }; + B770CBEAF066581D82B75288 /* TestI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05EB4357B9BD383A57728E3B /* TestI.swift */; }; + B778653C3033E06DDF48E9DA /* Client.swift in Sources */ = {isa = PBXBuildFile; fileRef = 788A94FF26B608B7AC909F56 /* Client.swift */; }; + B7995A5E7329E8FF7F46404A /* AllTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01AA575CAE3319A28CD5E7F4 /* AllTests.swift */; }; + B864054CD4BA515A78F04A19 /* Buffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9245EE9385C60ACAD3398624 /* Buffer.cpp */; }; + B8B1A1EE6812CEB8EE69D2C2 /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAD5CB65C9E749E09CE7AAEA /* Ice.framework */; }; + B8B3BC297606287AA77DBBDB /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 622CA373CF127B6E7D1CF2C6 /* TestCommon.framework */; }; + B8E66C08C864FC497D65EA2B /* Client.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5FEAC4680FEC7C7B72A4D8D0 /* Client.swift */; }; + B930E12AD649DB9D791DD8CA /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 622CA373CF127B6E7D1CF2C6 /* TestCommon.framework */; }; + B93C9D08A73FB7E0A61EB328 /* RemoteLogger.ice in Sources */ = {isa = PBXBuildFile; fileRef = 523B9454C940E0D81E8047AF /* RemoteLogger.ice */; }; + B9A02492ACD4CA36B60C58F3 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 870EAA4BC7FF0C331853C50F /* Foundation.framework */; }; + BA560B85D0D2A35F405509A5 /* Mutex.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7FFDBAD738CBAEAE9919A32 /* Mutex.swift */; }; + BA6DCCFFAF6332BD70D0297C /* AllTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BE620CF9DE30EB5998991A5 /* AllTests.swift */; }; + BA7C8DFB343268372830B7E6 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 870EAA4BC7FF0C331853C50F /* Foundation.framework */; }; + BB02659CFBFC8A0DAB3561A0 /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D41A319A7B3B147FDC8EA45 /* PromiseKit.framework */; }; + BB7C9A733CE7E0FB0B7400B1 /* CommunicatorI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AE6B26C06804866E58A3741 /* CommunicatorI.swift */; }; + BBB69025B457EC2006D171E6 /* Network.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 63A7DA541926380531C3B8E8 /* Network.cpp */; }; + BBD8F160EC07351944FEC9E7 /* ServerPrivate.ice in Sources */ = {isa = PBXBuildFile; fileRef = 9633B57E8267287F48291029 /* ServerPrivate.ice */; }; + BC06DC8E342FFFD8342B33F9 /* Client.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BB88B644528FB390A4A8135 /* Client.swift */; }; + BC71C0B94CDF119759F30372 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A74A24CD7ED2FBFECB9FED97 /* Cocoa.framework */; }; + BCE2D7C7C43F34E5D87B934F /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C7C5BFE9B16BF237E7782A4F /* Ice.framework */; }; + BCFC1A990B25B2F212A2E6F0 /* AllTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBA8930E4AC4EAFC06311651 /* AllTests.swift */; }; + BD10E9FEC5521BCB2A2C2609 /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C7C5BFE9B16BF237E7782A4F /* Ice.framework */; }; + BD51056E6C09EF7EDE87C66B /* PropertiesI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 36EB098C8EE18A985488AFA7 /* PropertiesI.cpp */; }; + BDC25192E4B4781A26EC1277 /* Server.swift in Sources */ = {isa = PBXBuildFile; fileRef = FB43A00D955B0F7E08FDD3DA /* Server.swift */; }; + BDCAEA6ACC8CA744C0B7E76A /* ValueFactoryManagerI.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3B94C0C6FBAE34FC003740D /* ValueFactoryManagerI.swift */; }; + BDD58FC0CE760DC3D947BAD9 /* Timer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 691D4FAE09254013CDF14460 /* Timer.cpp */; }; + BDEA4C39D654452D17EA2527 /* Server.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41C22F57DF940B52BD56E3EB /* Server.swift */; }; + BDF2159E6EBDFFA80ACAF39A /* EndpointI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 438696C57A24E941A67A69B5 /* EndpointI.cpp */; }; + BE0E74ECEC7D652DF3D83F68 /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAD5CB65C9E749E09CE7AAEA /* Ice.framework */; }; + BE3044FD751678C0CBD8E364 /* StreamAcceptor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 674E773DF4B4DCDDA39F3DE8 /* StreamAcceptor.cpp */; }; + BE636B65DB612F9DB97B8822 /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C7C5BFE9B16BF237E7782A4F /* Ice.framework */; }; + BEA587FF48A6EF94C58F01E0 /* TestI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1423CA94EC8D93C8B70B8FB8 /* TestI.swift */; }; + BEB0A2C210A82C4A0EF69545 /* WSEndpoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 375CE372A58028D41159AAA5 /* WSEndpoint.cpp */; }; + BF77F7D67CAABA1FE6D5F50F /* ProtocolInstance.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1FD927676FD53EC5878D9266 /* ProtocolInstance.cpp */; }; + BF952642A81F755EEA5C4AD2 /* libIce C++11 macOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 763ACF31E2066730E340FCBA /* libIce C++11 macOS.a */; }; + BFA6AE1DC11376F2A64B09C9 /* PluginManagerI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5D7BC837A190E8C95AAD223D /* PluginManagerI.cpp */; }; + BFD86052A4B9501EC9C5F204 /* TestAMD.ice in Sources */ = {isa = PBXBuildFile; fileRef = B84880E6735245A23A60D634 /* TestAMD.ice */; }; + C0816E68324CC4346341D7A1 /* LaunchScreen.storyboard in Sources */ = {isa = PBXBuildFile; fileRef = A95701B4918767C88D3D5D7F /* LaunchScreen.storyboard */; }; + C0825C420B0340446F9E6FFA /* ValueFactory.ice in Sources */ = {isa = PBXBuildFile; fileRef = 020836068D73A79D4DCE6A0C /* ValueFactory.ice */; }; + C0A55EDF637D2B9BC40907F7 /* OSLogLoggerI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EDF8E5A8A5004B676A0BDF25 /* OSLogLoggerI.cpp */; }; + C1147F466747FE807E2DBC0C /* FactoryTableInit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE718247E5207FBE81F7C1CD /* FactoryTableInit.cpp */; }; + C129B21F50D609E3AA10E979 /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C7C5BFE9B16BF237E7782A4F /* Ice.framework */; }; + C15007417DF6EFA9CE6CD3DB /* SSLEngine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 34EE507084F1DAC1C42A3926 /* SSLEngine.cpp */; }; + C1C3B895E352E20AD255B4AC /* ClassResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3CF8C8D7F56018E4B14BE90 /* ClassResolver.swift */; }; + C1D0F3E087DE0D10B61D62D6 /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 63D913EF7A0370FCA4F0D76A /* PromiseKit.framework */; }; + C213A4DC1F9FF94521CDACFD /* AdminFacetFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7447E13620612CE478F173E4 /* AdminFacetFactory.swift */; }; + C2C3B4D7EEBD218FBD610EAC /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C7C5BFE9B16BF237E7782A4F /* Ice.framework */; }; + C2C6798F75E89091D592E17D /* IceUdp.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 46C6B15FA2B196879FD8EC27 /* IceUdp.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + C2D7BB68F2D12D32277849CC /* Server.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75E28A8A26A675D74CEE27DA /* Server.swift */; }; + C2F1CC1C8D147D58BDAC1C90 /* IceObjects.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 877C33F38770D875BE148A14 /* IceObjects.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + C3348B616AAD769B094B3C6F /* Selector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 453895616D7087BC3656F550 /* Selector.cpp */; }; + C3399E137C776C910747E3BB /* ServerAMD.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E0E2C9A3037DEACC7BB5C8D /* ServerAMD.swift */; }; + C33C394F5D01418D23748BF9 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0031328AFD096A32F886C239 /* Security.framework */; }; + C34A5D0003A785FA587C6FEC /* AllTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49D14E803C9664FE2638C3A5 /* AllTests.swift */; }; + C37E53F1EDF2CC7DF3ABADD3 /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 622CA373CF127B6E7D1CF2C6 /* TestCommon.framework */; }; + C4315D2423B14D2D8E755534 /* ObjectAdapter.ice in Sources */ = {isa = PBXBuildFile; fileRef = 3C06873D6A18B5AF06EA761B /* ObjectAdapter.ice */; }; + C440A3996F5BB066DADEC3B6 /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 63D913EF7A0370FCA4F0D76A /* PromiseKit.framework */; }; + C45AC5DF4085D41B1F1900C1 /* Clash.ice in Sources */ = {isa = PBXBuildFile; fileRef = 13D302603E36BF30FF10F7D0 /* Clash.ice */; }; + C45CF9B624FBC3151A5F6131 /* CommunicatorF.ice in Sources */ = {isa = PBXBuildFile; fileRef = 1253B9777BCF966221D0C86F /* CommunicatorF.ice */; }; + C48F2403CA3BA0E75204A81E /* Instance.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ADBFAB5D4E295192C5DA5D3D /* Instance.cpp */; }; + C5159068A48261BDA2836154 /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAD5CB65C9E749E09CE7AAEA /* Ice.framework */; }; + C576D44F9D324CE414B1A49A /* Thread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C429BA52E5200E492155ADFB /* Thread.cpp */; }; + C5C9BB33F18E381BE1AA92B6 /* Test.ice in Sources */ = {isa = PBXBuildFile; fileRef = 9BBC2ACFB110C84DC4C862D6 /* Test.ice */; }; + C5E54400A8F2F03D41B0ADB4 /* Plugin.ice in Sources */ = {isa = PBXBuildFile; fileRef = 4915A6FBAF6FEB632CFA7415 /* Plugin.ice */; }; + C5EBA2C3CFCDD0B4D05EC66B /* StringConverterPlugin.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CCB7DD0A81B767D953903000 /* StringConverterPlugin.cpp */; }; + C5F68321A95A14D6499933A6 /* WSTransceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B5C1917BF4210D0F739E5084 /* WSTransceiver.cpp */; }; + C602E98027E2BA03AA5ACD5F /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED07FE8864F33CBDEC73EA98 /* TestCommon.framework */; }; + C6D91F455776D85F216BC2ED /* ConnectionI.swift in Sources */ = {isa = PBXBuildFile; fileRef = B69FB397DFE1E68FE87F0A52 /* ConnectionI.swift */; }; + C797DA61BF1FDAD566C0FB25 /* MutexProtocol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9245071A4DE8D8E016961500 /* MutexProtocol.cpp */; }; + C7D97113E9F0D2DBB37FA8FD /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 622CA373CF127B6E7D1CF2C6 /* TestCommon.framework */; }; + C859C5EE6D93C054B41EEC22 /* Plugin.ice in Sources */ = {isa = PBXBuildFile; fileRef = 4915A6FBAF6FEB632CFA7415 /* Plugin.ice */; }; + C8D45DE2C05F4A99CFEAAA78 /* TestI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88355021C7A31D08304EC1DA /* TestI.swift */; }; + C8D9961559B0BF48CB37F7D6 /* Server.swift in Sources */ = {isa = PBXBuildFile; fileRef = D26ED3329E8CC06679C2F30D /* Server.swift */; }; + C8ED38CDD2CB6C9310004A3F /* ClientPrivate.ice in Sources */ = {isa = PBXBuildFile; fileRef = 10838D30B80697B9DDBA31D3 /* ClientPrivate.ice */; }; + C9075386C8734CD4851E987C /* ProxyFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A5EE97F0338BD9EAD0DE1B10 /* ProxyFactory.cpp */; }; + C90841CD0224B0CF74543DA9 /* ArgVector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F4BE441730E27358FD5FD7F9 /* ArgVector.cpp */; }; + C979BCC1921DAE4EBC2230CE /* BatchRequestQueue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8C011F62FA8756F9B88CB6E9 /* BatchRequestQueue.cpp */; }; + C9843CF4FC0367B3B8ABCD61 /* LoggerUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 65F012235FAE7A79FA922758 /* LoggerUtil.cpp */; }; + C9C17C0754EFFDBD7ED1EF8B /* FormatType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96F346F0305A06F0EFADF9BF /* FormatType.swift */; }; + CA726720358ED2EF89D2A1C8 /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 63D913EF7A0370FCA4F0D76A /* PromiseKit.framework */; }; + CA747A545A8EE6629F68DC5E /* Twoways.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67DDFF09213CF8A855D0B4AD /* Twoways.swift */; }; + CAABDA28D4BA95CBD2B8E6AB /* ServerAMD.swift in Sources */ = {isa = PBXBuildFile; fileRef = 037FD47584D12123792BDA88 /* ServerAMD.swift */; }; + CAF9592E7255F2E45103519A /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 63D913EF7A0370FCA4F0D76A /* PromiseKit.framework */; }; + CB1C1AF3CCA34FA2E49C4C6D /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C7C5BFE9B16BF237E7782A4F /* Ice.framework */; }; + CB951DA8DAE9867FEFBDAA00 /* Metrics.ice in Sources */ = {isa = PBXBuildFile; fileRef = 1AA2AE3927EBF4C6E252C140 /* Metrics.ice */; }; + CBA3B07FFB9D427717826DF7 /* certs in Resources */ = {isa = PBXBuildFile; fileRef = 2C015EF6A0A8A9EEE016CF9F /* certs */; }; + CBA9115D8EF52668B997E107 /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 63D913EF7A0370FCA4F0D76A /* PromiseKit.framework */; }; + CBA9ECA116410102129638BD /* Test.ice in Sources */ = {isa = PBXBuildFile; fileRef = B4D1E5A8A8C48DEC0A0155EC /* Test.ice */; }; + CBD3ADE1DDCCFD0CD77AEF6C /* Router.ice in Sources */ = {isa = PBXBuildFile; fileRef = B497B16BCF0F6A55224FFDB0 /* Router.ice */; }; + CBDAA9E1626D6E8B27E355FB /* InstrumentationF.ice in Sources */ = {isa = PBXBuildFile; fileRef = 90EFB1CE1C4B06CB3795BA7B /* InstrumentationF.ice */; }; + CC266D6F9FDF8CBC6CAE88AC /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D41A319A7B3B147FDC8EA45 /* PromiseKit.framework */; }; + CC808CD88901678086E38F9F /* Exception.mm in Sources */ = {isa = PBXBuildFile; fileRef = 19231A4083CEDD81E52896EB /* Exception.mm */; }; + CC9F27F4225AADC6D8FBF086 /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C7C5BFE9B16BF237E7782A4F /* Ice.framework */; }; + CCA19CECCA956EC81584313D /* AllTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBA8930E4AC4EAFC06311651 /* AllTests.swift */; }; + CCB53890A6B006005BEE9A00 /* Current.ice in Sources */ = {isa = PBXBuildFile; fileRef = 95A8E2FD4FB54E0EF0C4CADE /* Current.ice */; }; + CCCD001B05A56979E761F1F7 /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D41A319A7B3B147FDC8EA45 /* PromiseKit.framework */; }; + CCD6374D0088CB4E4060BE68 /* TestI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 340032EE1FA41DE5519F6FC1 /* TestI.swift */; }; + CD32888BA5C6112233F483A6 /* ProtocolPluginFacade.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A609B420DBC220683E3478A5 /* ProtocolPluginFacade.cpp */; }; + CD35C5B6BF215E123503EBBE /* ObjectAdapter.ice in Sources */ = {isa = PBXBuildFile; fileRef = 3C06873D6A18B5AF06EA761B /* ObjectAdapter.ice */; }; + CD424E5DEA0F488227CA7F86 /* Client.swift in Sources */ = {isa = PBXBuildFile; fileRef = F166F176384EC5B63F51A139 /* Client.swift */; }; + CD6D079F705F31CA133CFE3A /* Test.ice in Sources */ = {isa = PBXBuildFile; fileRef = 49C9CEFAD9C27035C47EFB73 /* Test.ice */; }; + CD98EC598459410E3BF69474 /* ProtocolPluginFacade.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A609B420DBC220683E3478A5 /* ProtocolPluginFacade.cpp */; }; + CDB467D814F5BC5EB800CC4A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 870EAA4BC7FF0C331853C50F /* Foundation.framework */; }; + CDC46E7D421DAE31D05671DF /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D41A319A7B3B147FDC8EA45 /* PromiseKit.framework */; }; + CDD1FAE8B83A23AF373D8C4C /* RequestHandlerFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 471CD416B83B542C8F7582AB /* RequestHandlerFactory.cpp */; }; + CE07EA7451F810329A28DF5C /* AllTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E1A635F482FAF37FB9C9FA5 /* AllTests.swift */; }; + CE1EF0EB6121162D1D31642E /* Connection.ice in Sources */ = {isa = PBXBuildFile; fileRef = D6292E700118F4E42B326819 /* Connection.ice */; }; + CE2C932A1ACF31F0501CB355 /* BuiltinSequences.ice in Sources */ = {isa = PBXBuildFile; fileRef = FE64D8105AAAEB060E6FA33A /* BuiltinSequences.ice */; }; + CE483CB090B41A6286D64F20 /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 622CA373CF127B6E7D1CF2C6 /* TestCommon.framework */; }; + CE59499E72129B5335F78831 /* TestAMDI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EBB3540198C53BCD831F20D /* TestAMDI.swift */; }; + CE6318F9E87BAE59007E25E9 /* TestI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 756F0C35DE3CC240831BE50C /* TestI.swift */; }; + CECC8AA351A36EDFD46914AD /* EndpointI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81788FBB3A77489D9F76FF0E /* EndpointI.swift */; }; + CEDFADCC7BE0E355F0CCF222 /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C7C5BFE9B16BF237E7782A4F /* Ice.framework */; }; + CF10CB5FBBC03CE5AD3D8DBE /* InputStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B38AE066B39786410748F40 /* InputStream.cpp */; }; + CF40CAF8D294FFFC56EE3722 /* OpaqueEndpointI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9AC2E1EE44058CE5096D663C /* OpaqueEndpointI.cpp */; }; + CF5F5A7A7E5F6C4A371B8091 /* SecureTransportPluginI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 586624A3F550C8253BF180DF /* SecureTransportPluginI.cpp */; }; + CF5FAAFEF98E4D493CB90713 /* AllTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38BFB7678058CA1EF051EC45 /* AllTests.swift */; }; + CF7B2085A2010076758D5C2C /* Logger.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1A5BA94BC27B8423B16532B7 /* Logger.mm */; }; + CFA19707B03AB69A7BF110FE /* Server.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41C22F57DF940B52BD56E3EB /* Server.swift */; }; + CFA683B9B090DD5CBBDD63F9 /* AllTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E183236587AED966063E0A3 /* AllTests.swift */; }; + CFC7118AAF10A1D5FBE3BE4C /* Util.swift in Sources */ = {isa = PBXBuildFile; fileRef = 851C3F8D55FA569B433B5FD5 /* Util.swift */; }; + CFD20216CA7515A33C9AB538 /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D41A319A7B3B147FDC8EA45 /* PromiseKit.framework */; }; + D02B662F0C47FE9E48EBF039 /* ValueFactoryManagerI.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3B94C0C6FBAE34FC003740D /* ValueFactoryManagerI.swift */; }; + D049595ADB83D16C4F0B3C43 /* Server.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C1B9082D7C66385A1F84BD7 /* Server.swift */; }; + D04B38BB70AD720FF1552234 /* CollocatedRequestHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B2E3B10FBA657C52E19BC44B /* CollocatedRequestHandler.cpp */; }; + D06E072BC06D54723E47AE55 /* IceExceptions.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = BA9B294D0E2DAB2D585F71E6 /* IceExceptions.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + D06EFF868D74B9306FE0D22C /* ConnectorI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 04BF7DE5C0E4114B7E131312 /* ConnectorI.cpp */; }; + D0CB75218E4FB420AA4C64F4 /* TestI.swift in Sources */ = {isa = PBXBuildFile; fileRef = E662BDACBA5DA47F7B5E0D04 /* TestI.swift */; }; + D0D6C65F00F894885310792B /* PluginI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D9CB1665FFC46CE91D4B9529 /* PluginI.cpp */; }; + D0E4225D745E9626F7613FFC /* Descriptor.ice in Sources */ = {isa = PBXBuildFile; fileRef = A2069630D4A927F86C4FBC80 /* Descriptor.ice */; }; + D1059BC659028A5F22837A15 /* UtilException.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BF1BCF9C50968F7FEB3324F6 /* UtilException.cpp */; }; + D15056EEFBFD97E2CE7E5057 /* ImplicitContextF.ice in Sources */ = {isa = PBXBuildFile; fileRef = 6B0972F4B9891E7569954312 /* ImplicitContextF.ice */; }; + D153C7D322A894AEEB1A89C8 /* TestAMD.ice in Sources */ = {isa = PBXBuildFile; fileRef = B84880E6735245A23A60D634 /* TestAMD.ice */; }; + D1A399FA2ADF5FCC1B211A0F /* Glacier2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4EF3778FE0BD6309950B7C0F /* Glacier2.framework */; }; + D1A5FD2DDD3BEB8A5C39E5C7 /* IceProperties.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 7DACE4CE00C90B00137CDD05 /* IceProperties.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + D1BB5FD37A0527CAAD1F3FE1 /* DispatchInterceptor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7AF9BF639398943A70F14231 /* DispatchInterceptor.cpp */; }; + D2051B9E813049B5BBF24BBC /* TcpTransceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2909D8FC93EDAC36BB8E7957 /* TcpTransceiver.cpp */; }; + D21CFB3C95D66603D2BB0702 /* Server.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6AE3AEEADC3C6C8E0FB3C93 /* Server.swift */; }; + D281500701F1BBF34D9B4783 /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D41A319A7B3B147FDC8EA45 /* PromiseKit.framework */; }; + D2AC776BC6022E14748AA1E6 /* IceOptional.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = C4F874AD5EA2585BEB2788BD /* IceOptional.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + D2BE0C5FCC73151733E481FE /* Server.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0946309162FAB019EF2B106F /* Server.swift */; }; + D2D0D3AF33FC4DA180E35200 /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED07FE8864F33CBDEC73EA98 /* TestCommon.framework */; }; + D2D99B339D6DF21E7F9FC79C /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 622CA373CF127B6E7D1CF2C6 /* TestCommon.framework */; }; + D2E59F673EE562CB04E8A960 /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D41A319A7B3B147FDC8EA45 /* PromiseKit.framework */; }; + D2F27A10D87596A49EE9EE60 /* ObjectFactory.ice in Sources */ = {isa = PBXBuildFile; fileRef = 00BB2BF06851445F36D214CC /* ObjectFactory.ice */; }; + D2F5694F12EBB23EB5A1DDA3 /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 63D913EF7A0370FCA4F0D76A /* PromiseKit.framework */; }; + D31B36E1A426DBA858A9D0E2 /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 622CA373CF127B6E7D1CF2C6 /* TestCommon.framework */; }; + D33B60D572410030B5DB6F7F /* Communicator.ice in Sources */ = {isa = PBXBuildFile; fileRef = A46ED6C2DA9BB2B842766CCF /* Communicator.ice */; }; + D37D192A024FA7595A232F9A /* HttpParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2F1656B63FFA16CE1CB8A8B5 /* HttpParser.cpp */; }; + D3A63F0888DF7F03715A38D4 /* AllTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58F11EF594018BDA48E2462F /* AllTests.swift */; }; + D3C3E3D3B52717218741E5AE /* FormatType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96F346F0305A06F0EFADF9BF /* FormatType.swift */; }; + D44AE2CA9832942F0903F621 /* Endpoint.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9B2225BF2C6D5186590EAE48 /* Endpoint.mm */; }; + D4558D79943AD6B71429B41A /* DynamicLibrary.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7EC016AF7C4C92CEE082A7B8 /* DynamicLibrary.cpp */; }; + D48543D36056084EB09C55D5 /* ObjectAdapter.ice in Sources */ = {isa = PBXBuildFile; fileRef = 3C06873D6A18B5AF06EA761B /* ObjectAdapter.ice */; }; + D4BFA8B08DCB4334DFB7E44D /* EndpointF.ice in Sources */ = {isa = PBXBuildFile; fileRef = 31D2324E9514306729E2C600 /* EndpointF.ice */; }; + D4C7CB694404F84ACAF6FE17 /* Server.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93CD33F473CD961099A82773 /* Server.swift */; }; + D5343E2A16548A11EE8A9E95 /* AllTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3CDBED8B141B3FE3A6AB8E2 /* AllTests.swift */; }; + D55CD451BD753C641225BE52 /* LoggerI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5C45004277123EDCA7BCA6A0 /* LoggerI.cpp */; }; + D59E1198863C8BF1DD5826C2 /* LoggerAdminI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 96A01B6D9C204DFF548C8D48 /* LoggerAdminI.cpp */; }; + D5C6D577ECDFAC2FFB6E2091 /* Test.ice in Sources */ = {isa = PBXBuildFile; fileRef = 50C14E2FBFE498ECE440356D /* Test.ice */; }; + D5DD65E75F40145089631728 /* IceAmi.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = EC4F7DC4FDFB8038EDA83A45 /* IceAmi.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + D5FD0793DAE372722CB1E62C /* UserAccountMapper.ice in Sources */ = {isa = PBXBuildFile; fileRef = 6DFC6B655D6E3B27FFF53F55 /* UserAccountMapper.ice */; }; + D69B59E0CD89B552A1D89F65 /* ServantManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A001D5976E7EBCEFED2B608 /* ServantManager.swift */; }; + D6A03A49AC62A8ABFB7B8F68 /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D41A319A7B3B147FDC8EA45 /* PromiseKit.framework */; }; + D6D201ABCAE22FA5830547AE /* Shared.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2429536C7D00CC9A6F571069 /* Shared.cpp */; }; + D6D6210548C1AA617404A57D /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAD5CB65C9E749E09CE7AAEA /* Ice.framework */; }; + D72B3E9A0AC151E20F01351F /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A74A24CD7ED2FBFECB9FED97 /* Cocoa.framework */; }; + D74F85D881F80F1D2F9BC718 /* ImplicitContextI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0A1C910BAD79CB90B4E3DC5 /* ImplicitContextI.cpp */; }; + D75D5118E74F92988F8D6455 /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 63D913EF7A0370FCA4F0D76A /* PromiseKit.framework */; }; + D7652F0FEAA676A4D7764A07 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6421091C6D40F11387EB3C9 /* ViewController.swift */; }; + D78ED2B922E0DA6581778305 /* TestI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 260E00176AE3729587786A64 /* TestI.swift */; }; + D7F5D39AFB9326C71F03138D /* CtrlCHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7F02FA98FF08CB088789D1C7 /* CtrlCHandler.cpp */; }; + D80B5EC632C9216669A33CB9 /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 63D913EF7A0370FCA4F0D76A /* PromiseKit.framework */; }; + D8310B7A2125E304CC8D39C2 /* LocatorI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 50FF32BF41290CD4BA39CB51 /* LocatorI.cpp */; }; + D8A53BBF3E074BE8B3B19BD9 /* Test.ice in Sources */ = {isa = PBXBuildFile; fileRef = 9F1C91EC749224042C8D36BB /* Test.ice */; }; + D8BB3861C360B8A229B7AA09 /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAD5CB65C9E749E09CE7AAEA /* Ice.framework */; }; + D8E1295C8A14C52F8DD11480 /* OnewaysAMI.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8BDCF3B69B2E86939F9A57A /* OnewaysAMI.swift */; }; + D9034D49282DC46A2903C15E /* ValueFactoryManagerI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E5D09858E9E4D6A34A94FEF /* ValueFactoryManagerI.cpp */; }; + D9373CB8FCF881F9112E7423 /* OutputStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FABD6EB0E182EA49D4B5766E /* OutputStream.cpp */; }; + D95BDCE671EA7347039F075C /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D41A319A7B3B147FDC8EA45 /* PromiseKit.framework */; }; + D9A3FAD5DFC57CF06B8085F4 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 870EAA4BC7FF0C331853C50F /* Foundation.framework */; }; + D9C4C6935F571833E7BCBA73 /* ConsoleUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 240904EAE20C44F684F837C6 /* ConsoleUtil.cpp */; }; + D9D865292AAD526E093CE75E /* AllTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2BA911AA1849C456055BD6AD /* AllTests.swift */; }; + DA294686E94A1EAD268E5EDB /* SecureTransportTransceiverI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A0AF0DCC30C5C540CE97CC4 /* SecureTransportTransceiverI.cpp */; }; + DA57AC8E673A528515612358 /* Client.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E755B18219308B2817FC9D3 /* Client.swift */; }; + DA6B37DE040DD778FBE5F704 /* LocatorI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 50FF32BF41290CD4BA39CB51 /* LocatorI.cpp */; }; + DAB4C3F45D91133CEE978F55 /* Identity.ice in Sources */ = {isa = PBXBuildFile; fileRef = 3C5E7B57B4BF54ECEA2E7644 /* Identity.ice */; }; + DAE9E08C575E18C9F278EB47 /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAD5CB65C9E749E09CE7AAEA /* Ice.framework */; }; + DB0470398468A17B63322463 /* IceObjects.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 1A71BC5C851C5EFD99C2216C /* IceObjects.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + DB6A51AE7279B949C96C5B63 /* TcpTransceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2909D8FC93EDAC36BB8E7957 /* TcpTransceiver.cpp */; }; + DBAAA12ACCC78CB0BADB3C13 /* ServerAMD.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E0E2C9A3037DEACC7BB5C8D /* ServerAMD.swift */; }; + DBB237E48AA9CD9BB57B8EAB /* IceLocation.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 3FBDEBDB8E0DAC4C18CF8225 /* IceLocation.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + DBCA14035C3233D303A1AE73 /* Test.ice in Sources */ = {isa = PBXBuildFile; fileRef = E9040853D6AAE90134F12ED0 /* Test.ice */; }; + DC1EF5DDBFAEECE120D6FF47 /* OptionalFormat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 69F24D683B72432659C41F5E /* OptionalFormat.swift */; }; + DC54C632154762C8E3961AA3 /* SliceFlags.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A368B3C0257A6AF1B876892 /* SliceFlags.swift */; }; + DC5F96D65C893836C550C166 /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C7C5BFE9B16BF237E7782A4F /* Ice.framework */; }; + DC60FD1331F6F96F47F266AD /* Identity.ice in Sources */ = {isa = PBXBuildFile; fileRef = 3C5E7B57B4BF54ECEA2E7644 /* Identity.ice */; }; + DC78D8C62CF5D31E463617A4 /* SlicedData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 85A9DD97447DA62B03DD75B9 /* SlicedData.cpp */; }; + DC7DA3588064686BF69F974B /* LocatorF.ice in Sources */ = {isa = PBXBuildFile; fileRef = 0324299CF5CA4E7302B4ACAC /* LocatorF.ice */; }; + DCC6F528E224819731AB4850 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 870EAA4BC7FF0C331853C50F /* Foundation.framework */; }; + DD8950903E38ED59CD455567 /* Server.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29DCEF1F0D3756A0B2657EF3 /* Server.swift */; }; + DD9513B7825BC1773B082AEE /* EndpointFactoryManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8F7EB4BD53C8878A62DB683A /* EndpointFactoryManager.cpp */; }; + DDE97BD8F342A06E03D0EACF /* SSLEngine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 34EE507084F1DAC1C42A3926 /* SSLEngine.cpp */; }; + DDEBA4CD5CC5FC970E32ACFF /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C7C5BFE9B16BF237E7782A4F /* Ice.framework */; }; + DDFA4931EB1234ABCCBAD854 /* StreamSocket.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A8B6138D4BA7EC05DBA41627 /* StreamSocket.cpp */; }; + DE078DB0B4482F4330681574 /* ThreadPool.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4DA840989579096474F7A7C8 /* ThreadPool.cpp */; }; + DE35A55B451C09A63056F780 /* LocalObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = CAFA154DBD50B9604A7A7C59 /* LocalObject.swift */; }; + DE6BB51BCFA6E7695CBA2CEA /* EndpointF.ice in Sources */ = {isa = PBXBuildFile; fileRef = 31D2324E9514306729E2C600 /* EndpointF.ice */; }; + DE82988643B9F7B575E199AF /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D41A319A7B3B147FDC8EA45 /* PromiseKit.framework */; }; + DEA44F6A0AB868FF2BFEAA5F /* ServerAMD.swift in Sources */ = {isa = PBXBuildFile; fileRef = 411D02DCD4129040E0C3C8F6 /* ServerAMD.swift */; }; + DEC041C6A42ECDFCF6463C45 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A74A24CD7ED2FBFECB9FED97 /* Cocoa.framework */; }; + DED925DFB0508C59A174F8B3 /* BatchOnewaysAMI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92B5906332A66BA58B0EFA97 /* BatchOnewaysAMI.swift */; }; + DF11AE70071867E2E7201E34 /* IceAcm.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = FCD76BA365CFA076EF297D33 /* IceAcm.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + DF48DDC8F5BE44C7F2700F0F /* Client.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53E07E25DA43B3E8EB6E9D31 /* Client.swift */; }; + DF7DB38B225B53CC5E40DA57 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 870EAA4BC7FF0C331853C50F /* Foundation.framework */; }; + DFCCB6820FC9EDF90E578FB8 /* Server.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9FE14B8B35538CF444B87FB /* Server.swift */; }; + E00A889D12C2BF5C9EB709DD /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED07FE8864F33CBDEC73EA98 /* TestCommon.framework */; }; + E07884BD1D162130CC9951F5 /* ConnectionInfo.ice in Sources */ = {isa = PBXBuildFile; fileRef = 865B104EF3F6EDED00ED2754 /* ConnectionInfo.ice */; }; + E078B63F168092ED1E29AD07 /* Blobject.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF89BCFE1E4D3CD34C34AAA6 /* Blobject.swift */; }; + E0B6E068ECC30F21B76F4DD1 /* Exception.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A98EBCF6F026FC4FF7AFD672 /* Exception.cpp */; }; + E0C01D24062418BE54318D9B /* PropertiesF.ice in Sources */ = {isa = PBXBuildFile; fileRef = F57A0472503DA95892ED6B14 /* PropertiesF.ice */; }; + E1320B4398C56859169F6BAE /* TestI.swift in Sources */ = {isa = PBXBuildFile; fileRef = AAB25D7258209D619F6376D1 /* TestI.swift */; }; + E17B2A5068393689A520D3B6 /* Client.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2031D6527EBCAC2258D6F59F /* Client.swift */; }; + E17F4BA619279E7CD782555F /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED07FE8864F33CBDEC73EA98 /* TestCommon.framework */; }; + E1B42CD5A640264FB00D079C /* EndpointInfo.ice in Sources */ = {isa = PBXBuildFile; fileRef = FB3C559B17046F98ED28C5E3 /* EndpointInfo.ice */; }; + E1C52CC83224353BBFD42E0D /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 622CA373CF127B6E7D1CF2C6 /* TestCommon.framework */; }; + E1CFECEBC391B31B74C724CA /* Object.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0AACB72D5FAFE6F7B85D0FC4 /* Object.cpp */; }; + E23361020151588840C90EEE /* IceRetry.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 581215CCF88E5C3BE65ECF1B /* IceRetry.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + E242C30394804807E1886C05 /* SysLoggerI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CFAAE2F5B1D4A3050CD17E97 /* SysLoggerI.cpp */; }; + E25C516DCDB15759FAEA4777 /* PromiseKit.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 63D913EF7A0370FCA4F0D76A /* PromiseKit.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + E28F7B5B9061C78BC0C7070C /* IceOperationsAMD.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = C1CC2963FE8AC9E7D4159212 /* IceOperationsAMD.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + E29FC2971C1A98E31416A103 /* Util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2581CADFB1C4EBF2F4EAD662 /* Util.cpp */; }; + E2A6646FC82F6F5425F62B62 /* IceSlicingObjects.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 2E31C452E06DF02A32D74158 /* IceSlicingObjects.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + E2B1766AFD0AFFCC24906198 /* IceGridSwift.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BA5B7ABB4CB0BF942935864 /* IceGridSwift.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E2D68EED7C54BF4D8BBAF9D7 /* Locator.ice in Sources */ = {isa = PBXBuildFile; fileRef = 2D0747ED96A227648F3E66B2 /* Locator.ice */; }; + E2E5DEA925171533E8C3AC88 /* Plugin.ice in Sources */ = {isa = PBXBuildFile; fileRef = 4915A6FBAF6FEB632CFA7415 /* Plugin.ice */; }; + E2F10511C234DE595075315D /* ReferenceFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8D0B27B694C3EE943904522E /* ReferenceFactory.cpp */; }; + E306589E9AF4443EFB1F8063 /* Random.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2EF912517FE2F9E06B375F87 /* Random.cpp */; }; + E348179A50D26C4DA8FCE102 /* IceSwift.h in Headers */ = {isa = PBXBuildFile; fileRef = 4610D441D9493C0B21FEF581 /* IceSwift.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E348A1E4272FB4E36AC8E764 /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 63D913EF7A0370FCA4F0D76A /* PromiseKit.framework */; }; + E3533DC78763C626AA57DE5F /* RouterF.ice in Sources */ = {isa = PBXBuildFile; fileRef = 6709AE92A21F7B4AA66E804F /* RouterF.ice */; }; + E36316690AD1BB71BBD327F6 /* ServantLocator.ice in Sources */ = {isa = PBXBuildFile; fileRef = CAABDEC1B20906FA83353809 /* ServantLocator.ice */; }; + E3D59F94B3519EFE6378B6E1 /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED07FE8864F33CBDEC73EA98 /* TestCommon.framework */; }; + E4091AB80B01CE002CB56E50 /* ImplicitContext.ice in Sources */ = {isa = PBXBuildFile; fileRef = 4C1E574FCAD6BE4FD30AAEF9 /* ImplicitContext.ice */; }; + E435BC0E41C7CF140D4C600A /* Locator.ice in Sources */ = {isa = PBXBuildFile; fileRef = 2D0747ED96A227648F3E66B2 /* Locator.ice */; }; + E4B88B9050A5B2C8B87C30DF /* Client.swift in Sources */ = {isa = PBXBuildFile; fileRef = 918271702A341F61A3F4082C /* Client.swift */; }; + E4E9040296A1F3A97D8F4FEA /* UdpConnector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A66926ED2CACE6A4FA7B5C66 /* UdpConnector.cpp */; }; + E5760FF8E34038AF8F79B906 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 870EAA4BC7FF0C331853C50F /* Foundation.framework */; }; + E5A4FC209F85E660EAEA21F9 /* Communicator.ice in Sources */ = {isa = PBXBuildFile; fileRef = A46ED6C2DA9BB2B842766CCF /* Communicator.ice */; }; + E5AE6B4B245605D048EB6AAC /* Server.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BB5940A27038DF47F718AB3 /* Server.swift */; }; + E5DDC56719403647F95713E5 /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D41A319A7B3B147FDC8EA45 /* PromiseKit.framework */; }; + E608DF14A2CE97C234B5988A /* ServantLocatorI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81B7B64819E414CA3B2A2EE1 /* ServantLocatorI.swift */; }; + E62788E0786FC8C20E8F8FBD /* Server.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CFD4B7164DA1D8892FBBA97 /* Server.swift */; }; + E65ACF9C238173AA3DD589C4 /* TestI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 401C8E9968EA1542A390134C /* TestI.swift */; }; + E680A322D275EAB392321E13 /* TestI.swift in Sources */ = {isa = PBXBuildFile; fileRef = C534C5979A7D8B4B3752F9BE /* TestI.swift */; }; + E6BD4B6E8F70808ADEB8D494 /* CommunicatorI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AE6B26C06804866E58A3741 /* CommunicatorI.swift */; }; + E6DD99F1CFFCC1EC030082B5 /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED07FE8864F33CBDEC73EA98 /* TestCommon.framework */; }; + E6FA59A37B298550E743AA78 /* Version.ice in Sources */ = {isa = PBXBuildFile; fileRef = B912CA6E0A1F10F0DF6E9E77 /* Version.ice */; }; + E71F32895E06E7F4478FD23A /* ProcessF.ice in Sources */ = {isa = PBXBuildFile; fileRef = C724C0FEBE2CAFBA08989FB2 /* ProcessF.ice */; }; + E7375234F20297C3B262C9F9 /* UdpEndpointI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6677DC4BA022BF3A4991609E /* UdpEndpointI.cpp */; }; + E73BF1CADB1E220174F754B1 /* Client.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64F6FC1409B86A503C498833 /* Client.swift */; }; + E77BA79FAFC5578026CCCC54 /* StringUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA64C24E633066EA27760C88 /* StringUtil.cpp */; }; + E7858833DF00D16DC1390215 /* WSAcceptor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7680CD444DA1821E2BBDDD9F /* WSAcceptor.cpp */; }; + E7A10292DCE7A05797F4AD12 /* Test.ice in Sources */ = {isa = PBXBuildFile; fileRef = B2F7E5D229333C92C6146AC4 /* Test.ice */; }; + E7A811EF66651879FF3D3932 /* StreamSocket.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A8B6138D4BA7EC05DBA41627 /* StreamSocket.cpp */; }; + E7B6475531861336F10C9855 /* ThreadException.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8F81AF5DE3734BFCFACFC594 /* ThreadException.cpp */; }; + E859AABE689A2CBA31815C32 /* TestAMD.ice in Sources */ = {isa = PBXBuildFile; fileRef = 1F6E970957A11B1AE6EF71DB /* TestAMD.ice */; }; + E85DFD44CC056CA3CE19ED4E /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D41A319A7B3B147FDC8EA45 /* PromiseKit.framework */; }; + E884C1142C542285159BF065 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 870EAA4BC7FF0C331853C50F /* Foundation.framework */; }; + E8FD99DCF9492C8C9D2C9D45 /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D41A319A7B3B147FDC8EA45 /* PromiseKit.framework */; }; + E9142FB3A8C7BE8F3D8C3E3D /* Key.ice in Sources */ = {isa = PBXBuildFile; fileRef = B16B5759917633FF3D305B78 /* Key.ice */; }; + E931934DCBD019B3AD6E35AB /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C7C5BFE9B16BF237E7782A4F /* Ice.framework */; }; + E95ECC274865156F682F1B60 /* Options.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A2C2BD4A7F4DE45077554C07 /* Options.cpp */; }; + E99679CB0F9EF41E13AA312B /* SSLInfo.ice in Sources */ = {isa = PBXBuildFile; fileRef = 47241080E5C1C81B6F322C3A /* SSLInfo.ice */; }; + E9EDE821468A972FD1423265 /* InputUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B516C25EE2AD4AA989A0C717 /* InputUtil.cpp */; }; + EA154A67A0DFDEC5901E64DC /* LocalObject.mm in Sources */ = {isa = PBXBuildFile; fileRef = F6AF11149756D4636F97B86E /* LocalObject.mm */; }; + EA3438F7CBD76ED4A28CACF9 /* Test.ice in Sources */ = {isa = PBXBuildFile; fileRef = 49C9CEFAD9C27035C47EFB73 /* Test.ice */; }; + EA45BAF5D0476A968AE85A29 /* Proxy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7605F07734AEBCA7AF79DDE5 /* Proxy.cpp */; }; + EA5FC43B473033F5B4B8FA06 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A74A24CD7ED2FBFECB9FED97 /* Cocoa.framework */; }; + EA7C75657DCEB3B5AA6182ED /* Base64.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D1904D537D8689AA15D64A62 /* Base64.cpp */; }; + EA823926488538F6496DBE42 /* IceSSLConfiguration.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = EF5E76091B28D91259A24A57 /* IceSSLConfiguration.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + EA88EE939CA30F09A72108FA /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A74A24CD7ED2FBFECB9FED97 /* Cocoa.framework */; }; + EAA15213C48C51F5908B6C73 /* ObjectAdapterI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4943D90E215EA7F001876C5B /* ObjectAdapterI.swift */; }; + EAC75541999D2D29F3BD295A /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 622CA373CF127B6E7D1CF2C6 /* TestCommon.framework */; }; + EAFE7B6E90B4E28210E23F20 /* IceStormSwift.h in Headers */ = {isa = PBXBuildFile; fileRef = F418D0D53F5E126F2F44C0C7 /* IceStormSwift.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EB3E54130E017A1F4191FA7E /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 622CA373CF127B6E7D1CF2C6 /* TestCommon.framework */; }; + EB660F2F1B497A90F4AC77D1 /* ConnectorI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 04BF7DE5C0E4114B7E131312 /* ConnectorI.cpp */; }; + EB76674F5A0027A5CF96C47C /* EndpointFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 933618455164E19AE790AD98 /* EndpointFactory.cpp */; }; + EB7EBAF12B550CB70076230B /* Client.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E755B18219308B2817FC9D3 /* Client.swift */; }; + EBB6BB023EE12E36BDE9B312 /* TestAMDI.swift in Sources */ = {isa = PBXBuildFile; fileRef = AABD6035B79B6852EBF6A460 /* TestAMDI.swift */; }; + EC878004575426FDC25F29E9 /* ConnectionFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F3616E470DCD0FDC827CB001 /* ConnectionFactory.cpp */; }; + ECA7EFDE949B4DF4A9F94045 /* TraceLevels.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 241813D9F10FFD0E31CED44C /* TraceLevels.cpp */; }; + ECAE97125274475653024076 /* Acceptor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BA596A7278E6A5BE268759B0 /* Acceptor.cpp */; }; + ECB9B4DD217E6144F794F0F1 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 870EAA4BC7FF0C331853C50F /* Foundation.framework */; }; + ECEFB59767FD00E78241E38E /* Test.ice in Sources */ = {isa = PBXBuildFile; fileRef = 0FA0AD77AB4A762782979AA4 /* Test.ice */; }; + ED3B059FE481DA09507CA347 /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 63D913EF7A0370FCA4F0D76A /* PromiseKit.framework */; }; + EDB01B97FB9837AA73391EEA /* Test.ice in Sources */ = {isa = PBXBuildFile; fileRef = 1B17AE9C3FC4801EE0862F7C /* Test.ice */; }; + EE056A55A5DC8CDCC8E66C16 /* Incoming.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18E3542529153EB181E880EF /* Incoming.swift */; }; + EE0F4B1C01AB7E9B3F379AD2 /* TestAMD.ice in Sources */ = {isa = PBXBuildFile; fileRef = 97BB271A8188770DE5EE5B74 /* TestAMD.ice */; }; + EE1019B8FD2D7B42A1E62BCA /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C7C5BFE9B16BF237E7782A4F /* Ice.framework */; }; + EE793F0EF681D01DC0651381 /* Logger.ice in Sources */ = {isa = PBXBuildFile; fileRef = A7C655DD11BD41ED4C3D1E99 /* Logger.ice */; }; + EE8109AD999481A1F77CA24C /* Oneways.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF3F99A20C0C32083637ECBA /* Oneways.swift */; }; + EEB28106B6A4B0276F7A516F /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED07FE8864F33CBDEC73EA98 /* TestCommon.framework */; }; + EEBAAF3FB8E57976D32B583A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 870EAA4BC7FF0C331853C50F /* Foundation.framework */; }; + EED43C947F3C3AA3D0CCC401 /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 63D913EF7A0370FCA4F0D76A /* PromiseKit.framework */; }; + EEDAFCB661A89A7CE301F85E /* AllTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49D14E803C9664FE2638C3A5 /* AllTests.swift */; }; + EF574EC9D5E4241C235505E0 /* CommunicatorF.ice in Sources */ = {isa = PBXBuildFile; fileRef = 1253B9777BCF966221D0C86F /* CommunicatorF.ice */; }; + EFCB85A84164A6029687ACE6 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A74A24CD7ED2FBFECB9FED97 /* Cocoa.framework */; }; + F00BB5DF9FAA09F8809FE458 /* IceDiscovery.ice in Sources */ = {isa = PBXBuildFile; fileRef = CD259FE076F39EEBA1958C54 /* IceDiscovery.ice */; }; + F01040E83454B9EE67B1CE19 /* Test.ice in Sources */ = {isa = PBXBuildFile; fileRef = 468C54FF89948C9D452F35C3 /* Test.ice */; }; + F0299CE966177686FE7E01F0 /* Metrics.ice in Sources */ = {isa = PBXBuildFile; fileRef = 7AB71501E16A76D0ADC74A14 /* Metrics.ice */; }; + F0506D00B7D4A93C9EA376CD /* DispatchInterceptor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7AF9BF639398943A70F14231 /* DispatchInterceptor.cpp */; }; + F06BA71DA044A01B73EBFB34 /* IceOperationsAMD.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = A9177E1CD1131BBB556DB172 /* IceOperationsAMD.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + F08880AB116C9B066A97A172 /* Current.ice in Sources */ = {isa = PBXBuildFile; fileRef = 95A8E2FD4FB54E0EF0C4CADE /* Current.ice */; }; + F094A468A7F849D3D26616CC /* Connection.ice in Sources */ = {isa = PBXBuildFile; fileRef = D6292E700118F4E42B326819 /* Connection.ice */; }; + F094B2AD3747FC38D7B4ADEE /* Test.ice in Sources */ = {isa = PBXBuildFile; fileRef = 468C54FF89948C9D452F35C3 /* Test.ice */; }; + F0E3E2CE73EF58A61D10DA71 /* Glacier2Swift.h in Headers */ = {isa = PBXBuildFile; fileRef = F082C6550B7B297C967623CB /* Glacier2Swift.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F0EFCD27C8167E3C6B1AED05 /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED07FE8864F33CBDEC73EA98 /* TestCommon.framework */; }; + F1C33ABC8C571417C321EAFA /* InstrumentationF.ice in Sources */ = {isa = PBXBuildFile; fileRef = 90EFB1CE1C4B06CB3795BA7B /* InstrumentationF.ice */; }; + F1C40512D22EF6C052307B1F /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 63D913EF7A0370FCA4F0D76A /* PromiseKit.framework */; }; + F1DBC0A7B3889ED0D0E0F0C1 /* Object.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0AACB72D5FAFE6F7B85D0FC4 /* Object.cpp */; }; + F1E5BB2600E197870F50F155 /* IceFacets.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 159667676124BA50280F0687 /* IceFacets.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + F234DA35494C35ECC3ED8474 /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAD5CB65C9E749E09CE7AAEA /* Ice.framework */; }; + F2C890111E8F0A4E1381EE68 /* RequestHandlerFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 471CD416B83B542C8F7582AB /* RequestHandlerFactory.cpp */; }; + F301A1C283F3B041D7E34ED9 /* LocalObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = CAFA154DBD50B9604A7A7C59 /* LocalObject.swift */; }; + F30E1666D7261C07F7151927 /* Test.ice in Sources */ = {isa = PBXBuildFile; fileRef = 2C465C527F495510572EE063 /* Test.ice */; }; + F365B55BEF85C45835E8BC2A /* Server.swift in Sources */ = {isa = PBXBuildFile; fileRef = 476F4FDDFCDE084B13E4F39A /* Server.swift */; }; + F3CF5296AFBED1ED60792F9A /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D41A319A7B3B147FDC8EA45 /* PromiseKit.framework */; }; + F3E0059C0B7E029B5C5E46F3 /* certs in Resources */ = {isa = PBXBuildFile; fileRef = F2500E02186D763BCC5F8462 /* certs */; }; + F3EA5D1C77E3A878C1EA962D /* AllTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BAEABBFF7FB0FB8BF7953AD0 /* AllTests.swift */; }; + F3FC57510F5E4F1D0F1A2B47 /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C7C5BFE9B16BF237E7782A4F /* Ice.framework */; }; + F4050BC7518FB9C22ACEDCE9 /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C7C5BFE9B16BF237E7782A4F /* Ice.framework */; }; + F41FCABFE56A38C3B8C67ED2 /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 622CA373CF127B6E7D1CF2C6 /* TestCommon.framework */; }; + F44B8F47C1D5F6BF6921E5B4 /* Test.ice in Sources */ = {isa = PBXBuildFile; fileRef = 6059450FB8C97A7BDFFE0334 /* Test.ice */; }; + F4F9DF62AA2FE1DDA204D14F /* RecMutex.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ECC5EC846C89881FB2C4772A /* RecMutex.cpp */; }; + F511BFBE2962D74D66BB8A23 /* ServerAMD.swift in Sources */ = {isa = PBXBuildFile; fileRef = 457E31EE594CC88F3A44A799 /* ServerAMD.swift */; }; + F567FAE9AE3D1D16DCF6A8DD /* Test.ice in Sources */ = {isa = PBXBuildFile; fileRef = 6059450FB8C97A7BDFFE0334 /* Test.ice */; }; + F5F50597A730B437D899DE8B /* TestAMDI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FEDB803435645F58EFFC661 /* TestAMDI.swift */; }; + F627C21F7A049B2498AF9443 /* AllTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A3A28D3F77ACF9B59C9EE7F /* AllTests.swift */; }; + F653196F236306F68B258D16 /* Client.swift in Sources */ = {isa = PBXBuildFile; fileRef = A91D5392ED5EE6A845F39DA3 /* Client.swift */; }; + F6616D2184259536C74BF8AC /* IceFacets.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 826497ACA601D39811A8CF36 /* IceFacets.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + F67C6737BB738401553D79CF /* SecureTransportEngine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4D775F15581ED90C5BF0EE05 /* SecureTransportEngine.cpp */; }; + F69C045CE1F4909C2BA28C64 /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAD5CB65C9E749E09CE7AAEA /* Ice.framework */; }; + F6DA8AE53A51E0147B510B37 /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED07FE8864F33CBDEC73EA98 /* TestCommon.framework */; }; + F71F3CF170E5A790F6ED2E3B /* Buffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9245EE9385C60ACAD3398624 /* Buffer.cpp */; }; + F7211770B3DE7E5712348E19 /* Server.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A1A8FEE7AB16055C7C60B15 /* Server.swift */; }; + F737271EACBBCA57F964BB0D /* SliceChecksumDict.ice in Sources */ = {isa = PBXBuildFile; fileRef = 463459FB7D8F704FD77898C4 /* SliceChecksumDict.ice */; }; + F745CC2C7469E661B231D522 /* SliceEscape.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = B0EC7FDB4F5FCF6C81624124 /* SliceEscape.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + F77819754B2D6816DEC132BB /* Client.swift in Sources */ = {isa = PBXBuildFile; fileRef = 632FF48F5F20042AE238ECC6 /* Client.swift */; }; + F79E1E2A08969F847891F24A /* EndpointInfoFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = D14B4626FA64A1D3308CF7F9 /* EndpointInfoFactory.swift */; }; + F7A9C9157BE70F320A216986 /* IceHold.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 3F54218F7DD6E867D382BC83 /* IceHold.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + F80153638A0AB4A94F271D91 /* Ice.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = EAD5CB65C9E749E09CE7AAEA /* Ice.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + F84A837E4BF6F89D2FFB4A09 /* ClientPrivate.ice in Sources */ = {isa = PBXBuildFile; fileRef = 10838D30B80697B9DDBA31D3 /* ClientPrivate.ice */; }; + F891773E44EBD73C572D2453 /* Server.swift in Sources */ = {isa = PBXBuildFile; fileRef = B9856CF3C6B1280A9EB49EA8 /* Server.swift */; }; + F90BE75822BAC37855FD0289 /* ProcessF.ice in Sources */ = {isa = PBXBuildFile; fileRef = C724C0FEBE2CAFBA08989FB2 /* ProcessF.ice */; }; + F933C7B50E71AA3B80BD5550 /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C7C5BFE9B16BF237E7782A4F /* Ice.framework */; }; + F9832EEB94851402D7B1C5EB /* TestCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 622CA373CF127B6E7D1CF2C6 /* TestCommon.framework */; }; + F98E34651E77EB2FCEF763FC /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 63D913EF7A0370FCA4F0D76A /* PromiseKit.framework */; }; + F9A33D6B31B1A53E0D787E9D /* Client.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8BEAE2C49D0B45FB5BA67DC /* Client.swift */; }; + F9AD157E7B432A7C94138F6B /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C7C5BFE9B16BF237E7782A4F /* Ice.framework */; }; + FA15135328B6A1461228F072 /* Collocated.swift in Sources */ = {isa = PBXBuildFile; fileRef = E797BF17140520C3290ABFDC /* Collocated.swift */; }; + FA2DA9981FE05E12EFB7297D /* Properties.mm in Sources */ = {isa = PBXBuildFile; fileRef = 65314D334B73B7733B0F9D65 /* Properties.mm */; }; + FA5242A27E5401D2CE644EEC /* Exception.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFE0D57F8DD001E75530856B /* Exception.swift */; }; + FA6C79BB9B9A24E7EB0F4DC2 /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAD5CB65C9E749E09CE7AAEA /* Ice.framework */; }; + FA904F7785FFB5FEE0FC7B02 /* Mutex.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7FFDBAD738CBAEAE9919A32 /* Mutex.swift */; }; + FAF36E98C1F18CCCC873BE56 /* Test.ice in Sources */ = {isa = PBXBuildFile; fileRef = EB02E1C1762AA015913AF071 /* Test.ice */; }; + FB1F69FAFC2685C632BFD136 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 870EAA4BC7FF0C331853C50F /* Foundation.framework */; }; + FB20D197A460753D47793E48 /* Communicator.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2A825E2C1DC72FC2FC36D7BA /* Communicator.mm */; }; + FB31778FE73AAA93BD7C9C97 /* ObjectFactory.ice in Sources */ = {isa = PBXBuildFile; fileRef = 00BB2BF06851445F36D214CC /* ObjectFactory.ice */; }; + FB43C16CD04823ADFAAA88D2 /* RegisterPluginsInit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2EB6DB1F8688EB1980F15640 /* RegisterPluginsInit.cpp */; }; + FBC8B32B7C9079BC8A11772E /* PropertiesI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 36EB098C8EE18A985488AFA7 /* PropertiesI.cpp */; }; + FBE2CF68467E20CDA7BCC55A /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D41A319A7B3B147FDC8EA45 /* PromiseKit.framework */; }; + FBEABB6958818B553B5F54D6 /* Client.swift in Sources */ = {isa = PBXBuildFile; fileRef = 788A94FF26B608B7AC909F56 /* Client.swift */; }; + FBECB69B0CA5A07CB92BEB8B /* Blobject.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF89BCFE1E4D3CD34C34AAA6 /* Blobject.swift */; }; + FBFEFCA12386355923D9787C /* Server.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AEBC064E6B609DA87301145 /* Server.swift */; }; + FC0A3921D5646C58A0214C0D /* PropertiesAdmin.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1F5791426E16A8B3C5402DBA /* PropertiesAdmin.mm */; }; + FC27B455E5CCB16667E6412A /* Test.ice in Sources */ = {isa = PBXBuildFile; fileRef = 457855F403B22BF39C75B16F /* Test.ice */; }; + FC519EA71C5B7294EDE44BBC /* Test.ice in Sources */ = {isa = PBXBuildFile; fileRef = B4D1E5A8A8C48DEC0A0155EC /* Test.ice */; }; + FC96865A8E1F329B5679EB2D /* TraceUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 23DBDAAC4E927BA973813A9E /* TraceUtil.cpp */; }; + FCB8A67BC3205C2C9D67018A /* Ice.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C7C5BFE9B16BF237E7782A4F /* Ice.framework */; }; + FCC595798F1E7CD5E248E665 /* Client.swift in Sources */ = {isa = PBXBuildFile; fileRef = 83CAC57033DE83BE309A182B /* Client.swift */; }; + FCFFBA5D919987DAAF2B306E /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A74A24CD7ED2FBFECB9FED97 /* Cocoa.framework */; }; + FD0217AFE2D9DDCB463A141A /* Client.swift in Sources */ = {isa = PBXBuildFile; fileRef = 83CAC57033DE83BE309A182B /* Client.swift */; }; + FD03FB6C2682B577B5213DD3 /* IceExceptionsAMD.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 24323E3AB8CD7D9D405EEE9A /* IceExceptionsAMD.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + FD7381B92F7FF0C8EB8E1083 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A74A24CD7ED2FBFECB9FED97 /* Cocoa.framework */; }; + FDA8AF747206FE5E33340C0F /* LoggerUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 65F012235FAE7A79FA922758 /* LoggerUtil.cpp */; }; + FDCDF3B610A3459A506F492B /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 63D913EF7A0370FCA4F0D76A /* PromiseKit.framework */; }; + FDF12300FE4512F28088A4BF /* Convert.mm in Sources */ = {isa = PBXBuildFile; fileRef = AE4F9A2DBEDA32DCB3E60CD1 /* Convert.mm */; }; + FDF7C0FEB093B497BD55A9EC /* PropertiesAdmin.ice in Sources */ = {isa = PBXBuildFile; fileRef = 2288D724247415182EE9EED7 /* PropertiesAdmin.ice */; }; + FE420ABD3743883EB8C0A073 /* HttpParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2F1656B63FFA16CE1CB8A8B5 /* HttpParser.cpp */; }; + FE5A115CEE232164BFF0363D /* PromiseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 63D913EF7A0370FCA4F0D76A /* PromiseKit.framework */; }; + FE5A614B6DA7EA5585420628 /* EndpointI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81788FBB3A77489D9F76FF0E /* EndpointI.swift */; }; + FE69D630CEBB0D3A2CA21EAB /* TcpConnector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D9C3123B69C3917E0A365577 /* TcpConnector.cpp */; }; + FE9ABA442B2FEAF197A8A5F4 /* StreamTransceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F710AFF41CDFAE9BFAFCF1AE /* StreamTransceiver.cpp */; }; + FEC662A85E2195E2AC2890BC /* TestAMD.ice in Sources */ = {isa = PBXBuildFile; fileRef = 300F8FB7BD45F093F4626D58 /* TestAMD.ice */; }; + FEC8798483B06F6AA646D350 /* IceOptionalAMD.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = F9C53C5323A0B0F56DD82A34 /* IceOptionalAMD.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + FEDD1CC595C4F136AEFB25E5 /* ProcessF.ice in Sources */ = {isa = PBXBuildFile; fileRef = C724C0FEBE2CAFBA08989FB2 /* ProcessF.ice */; }; + FEDEE16C6BA2564B41AAA519 /* AllTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BE620CF9DE30EB5998991A5 /* AllTests.swift */; }; + FEFC05E029F17386D3C15028 /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9C560837742F1536CD9077D5 /* CFNetwork.framework */; }; + FF6D412C846979421B6B6A3E /* OutgoingAsync.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 93F6B13E28C65453745EE726 /* OutgoingAsync.cpp */; }; + FFA77E0BB7058984E62CA106 /* IceSlicingExceptionsAMD.bundle in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = E7DFD245235F517B54CBF4C5 /* IceSlicingExceptionsAMD.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + FFD11263F199F7C2E70D4B95 /* ValueFactoryManagerI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E5D09858E9E4D6A34A94FEF /* ValueFactoryManagerI.cpp */; }; + FFF894BFFF469F10FDED53B8 /* libIceDiscovery C++11 iOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 496A08AE7826BC0BB1770B33 /* libIceDiscovery C++11 iOS.a */; }; +/* End PBXBuildFile section */ + +/* Begin PBXBuildRule section */ + 003B9501F7BB1905A5F86A2D /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*/Ice/*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice2Cpp Compiler for Ice/*.ice"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/Ice/$(INPUT_FILE_BASE).cpp", + "$(SYMROOT)/$(PLATFORM_NAME)/include/Ice/$(INPUT_FILE_BASE).h", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2cpp\" ]; then\n SLICE2CPP=\"$ICE_HOME/cpp/bin/slice2cpp\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2cpp\" ]; then\n SLICE2CPP=\"$SRCROOT/../cpp/bin/slice2cpp\"\nelif [ -f /usr/local/opt/slice2swift/libexec/bin/slice2cpp ]; then\n SLICE2CPP=/usr/local/opt/slice2swift/libexec/bin/slice2cpp\nelif [ -f /usr/local/bin/slice2cpp ]; then\n SLICE2CPP=/usr/local/bin/slice2cpp\nelse\n echo \"Failed to locate slice2cpp compiler\"\n exit 1\nfi\n\nBASENAME=$(basename -- \"$INPUT_FILE_PATH\")\nBASENAME=\"${BASENAME%.*}\"\nmkdir -p \"$DERIVED_FILE_DIR/Ice\"\n$SLICE2CPP -I\"$SRCROOT/../slice\" -D ICE_SWIFT --include-dir Ice --output-dir \"$DERIVED_FILE_DIR/Ice\" \"$INPUT_FILE_PATH\"\nmkdir -p \"$SYMROOT/$PLATFORM_NAME/include/Ice\"\nmv \"$DERIVED_FILE_DIR/Ice/$BASENAME.h\" \"$SYMROOT/$PLATFORM_NAME/include/Ice/$BASENAME.h\"\n"; + }; + 08C8EC677A55C41E43877953 /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + 0B80C32BD4D134DA0E971310 /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + 0E68F9302DC12DC520345FD0 /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + 0F83359CBEE409E20082E5B5 /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + 1A7A0D8945E651F6E13E2FC8 /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*/IceLocatorDiscovery/*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice2Cpp Compiler for IceLocatorDiscovery/*.ice"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/IceLocatorDiscovery/$(INPUT_FILE_BASE).cpp", + "$(SYMROOT)/$(PLATFORM_NAME)/include/IceLocatorDiscovery/$(INPUT_FILE_BASE).h", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2cpp\" ]; then\n SLICE2CPP=\"$ICE_HOME/cpp/bin/slice2cpp\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2cpp\" ]; then\n SLICE2CPP=\"$SRCROOT/../cpp/bin/slice2cpp\"\nelif [ -f /usr/local/opt/slice2swift/libexec/bin/slice2cpp ]; then\n SLICE2CPP=/usr/local/opt/slice2swift/libexec/bin/slice2cpp\nelif [ -f /usr/local/bin/slice2cpp ]; then\n SLICE2CPP=/usr/local/bin/slice2cpp\nelse\n echo \"Failed to locate slice2cpp compiler\"\n exit 1\nfi\n\nBASENAME=$(basename -- \"$INPUT_FILE_PATH\")\nBASENAME=\"${BASENAME%.*}\"\nmkdir -p \"$DERIVED_FILE_DIR/IceLocatorDiscovery\"\n$SLICE2CPP -I\"$SRCROOT/../slice\" -D ICE_SWIFT --include-dir IceLocatorDiscovery --output-dir \"$DERIVED_FILE_DIR/IceLocatorDiscovery\" \"$INPUT_FILE_PATH\"\nmkdir -p \"$SYMROOT/$PLATFORM_NAME/include/IceLocatorDiscovery\"\nmv \"$DERIVED_FILE_DIR/IceLocatorDiscovery/$BASENAME.h\" \"$SYMROOT/$PLATFORM_NAME/include/IceLocatorDiscovery/$BASENAME.h\"\n"; + }; + 1AB1839EABB1307C5A2A76B7 /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + 1D09C04D04D8820B9B01FCBC /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + 1F06297DE0CE11885D802518 /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + 1FB2645D9DE2245781BB5053 /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + 24A48ADB26FD93508A8F0BF4 /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + 25EA407582BC66F024E4AB0C /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*/IceSSL/*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice2Cpp Compiler for IceSSL/*.ice"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/IceSSL/$(INPUT_FILE_BASE).cpp", + "$(SYMROOT)/$(PLATFORM_NAME)/include/IceSSL/$(INPUT_FILE_BASE).h", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2cpp\" ]; then\n SLICE2CPP=\"$ICE_HOME/cpp/bin/slice2cpp\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2cpp\" ]; then\n SLICE2CPP=\"$SRCROOT/../cpp/bin/slice2cpp\"\nelif [ -f /usr/local/opt/slice2swift/libexec/bin/slice2cpp ]; then\n SLICE2CPP=/usr/local/opt/slice2swift/libexec/bin/slice2cpp\nelif [ -f /usr/local/bin/slice2cpp ]; then\n SLICE2CPP=/usr/local/bin/slice2cpp\nelse\n echo \"Failed to locate slice2cpp compiler\"\n exit 1\nfi\n\nBASENAME=$(basename -- \"$INPUT_FILE_PATH\")\nBASENAME=\"${BASENAME%.*}\"\nmkdir -p \"$DERIVED_FILE_DIR/IceSSL\"\n$SLICE2CPP -I\"$SRCROOT/../slice\" -D ICE_SWIFT --include-dir IceSSL --output-dir \"$DERIVED_FILE_DIR/IceSSL\" \"$INPUT_FILE_PATH\"\nmkdir -p \"$SYMROOT/$PLATFORM_NAME/include/IceSSL\"\nmv \"$DERIVED_FILE_DIR/IceSSL/$BASENAME.h\" \"$SYMROOT/$PLATFORM_NAME/include/IceSSL/$BASENAME.h\"\n"; + }; + 2743F08E3A7D0D1FE30AB887 /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + 2A12DF11B55CFDE8B87D9E24 /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*/IceSSL/*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler for IceSSL/*.ice"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/IceSSL_$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\nBASENAME=$(basename -- \"$INPUT_FILE_PATH\")\nBASENAME=\"${BASENAME%.*}\"\nmkdir -p \"$DERIVED_FILE_DIR/IceSSL\"\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR/IceSSL\" \"$INPUT_FILE_PATH\"\nmv \"$DERIVED_FILE_DIR/IceSSL/$BASENAME.swift\" \"$DERIVED_FILE_DIR/IceSSL_$BASENAME.swift\"\n"; + }; + 2A35C9838AA99D3AD0B5C00C /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + 2A5F3A16565D69D87C274592 /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + 3048174FC0CDBD348D720DF5 /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + 317E3B0BC589CF3C39C84BCF /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + 336EB607F5E9DA9ED6BF308D /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + 337809E4CD1F746E93FD29A7 /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + 391533FE09988882C6FE19E3 /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*/IceIAP/*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice2Cpp Compiler for IceIAP/*.ice"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/IceIAP/$(INPUT_FILE_BASE).cpp", + "$(SYMROOT)/$(PLATFORM_NAME)/include/IceIAP/$(INPUT_FILE_BASE).h", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2cpp\" ]; then\n SLICE2CPP=\"$ICE_HOME/cpp/bin/slice2cpp\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2cpp\" ]; then\n SLICE2CPP=\"$SRCROOT/../cpp/bin/slice2cpp\"\nelif [ -f /usr/local/opt/slice2swift/libexec/bin/slice2cpp ]; then\n SLICE2CPP=/usr/local/opt/slice2swift/libexec/bin/slice2cpp\nelif [ -f /usr/local/bin/slice2cpp ]; then\n SLICE2CPP=/usr/local/bin/slice2cpp\nelse\n echo \"Failed to locate slice2cpp compiler\"\n exit 1\nfi\n\nBASENAME=$(basename -- \"$INPUT_FILE_PATH\")\nBASENAME=\"${BASENAME%.*}\"\nmkdir -p \"$DERIVED_FILE_DIR/IceIAP\"\n$SLICE2CPP -I\"$SRCROOT/../slice\" -D ICE_SWIFT --include-dir IceIAP --output-dir \"$DERIVED_FILE_DIR/IceIAP\" \"$INPUT_FILE_PATH\"\nmkdir -p \"$SYMROOT/$PLATFORM_NAME/include/IceIAP\"\nmv \"$DERIVED_FILE_DIR/IceIAP/$BASENAME.h\" \"$SYMROOT/$PLATFORM_NAME/include/IceIAP/$BASENAME.h\"\n"; + }; + 3CF3596100C74A8696A0A02D /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + 43377FA3AE21810F3B100DE4 /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + 438B7ECD47FD3AA658D4E200 /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*/IceStorm/*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler for IceStorm/*.ice"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/IceStorm_$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\nBASENAME=$(basename -- \"$INPUT_FILE_PATH\")\nBASENAME=\"${BASENAME%.*}\"\nmkdir -p \"$DERIVED_FILE_DIR/IceStorm\"\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR/IceStorm\" \"$INPUT_FILE_PATH\"\nmv \"$DERIVED_FILE_DIR/IceStorm/$BASENAME.swift\" \"$DERIVED_FILE_DIR/IceStorm_$BASENAME.swift\"\n"; + }; + 4750F0B1306F32167C7443B4 /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + 4D81AE83B3E22C9A1F2AFA1D /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + 4EC6511509CEA16A1136462A /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + 52F9E387C3DAB41D8FF3D9FC /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*/Ice/*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler for Ice/*.ice"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/Ice_$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\nBASENAME=$(basename -- \"$INPUT_FILE_PATH\")\nBASENAME=\"${BASENAME%.*}\"\nmkdir -p \"$DERIVED_FILE_DIR/Ice\"\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR/Ice\" \"$INPUT_FILE_PATH\"\nmv \"$DERIVED_FILE_DIR/Ice/$BASENAME.swift\" \"$DERIVED_FILE_DIR/Ice_$BASENAME.swift\"\n"; + }; + 55B272056F98C4C6281D2208 /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + 56A69214C86CD4DFB671E225 /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*/IceSSL/*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice2Cpp Compiler for IceSSL/*.ice"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/IceSSL/$(INPUT_FILE_BASE).cpp", + "$(SYMROOT)/$(PLATFORM_NAME)/include/IceSSL/$(INPUT_FILE_BASE).h", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2cpp\" ]; then\n SLICE2CPP=\"$ICE_HOME/cpp/bin/slice2cpp\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2cpp\" ]; then\n SLICE2CPP=\"$SRCROOT/../cpp/bin/slice2cpp\"\nelif [ -f /usr/local/opt/slice2swift/libexec/bin/slice2cpp ]; then\n SLICE2CPP=/usr/local/opt/slice2swift/libexec/bin/slice2cpp\nelif [ -f /usr/local/bin/slice2cpp ]; then\n SLICE2CPP=/usr/local/bin/slice2cpp\nelse\n echo \"Failed to locate slice2cpp compiler\"\n exit 1\nfi\n\nBASENAME=$(basename -- \"$INPUT_FILE_PATH\")\nBASENAME=\"${BASENAME%.*}\"\nmkdir -p \"$DERIVED_FILE_DIR/IceSSL\"\n$SLICE2CPP -I\"$SRCROOT/../slice\" -D ICE_SWIFT --include-dir IceSSL --output-dir \"$DERIVED_FILE_DIR/IceSSL\" \"$INPUT_FILE_PATH\"\nmkdir -p \"$SYMROOT/$PLATFORM_NAME/include/IceSSL\"\nmv \"$DERIVED_FILE_DIR/IceSSL/$BASENAME.h\" \"$SYMROOT/$PLATFORM_NAME/include/IceSSL/$BASENAME.h\"\n"; + }; + 5909B744599C57B24067778A /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + 5C225EF103FE77A680D6BF5B /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + 5E72669125F43BC2FD4017BC /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*/Ice/*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler for Ice/*.ice"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/Ice_$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\nBASENAME=$(basename -- \"$INPUT_FILE_PATH\")\nBASENAME=\"${BASENAME%.*}\"\nmkdir -p \"$DERIVED_FILE_DIR/Ice\"\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR/Ice\" \"$INPUT_FILE_PATH\"\nmv \"$DERIVED_FILE_DIR/Ice/$BASENAME.swift\" \"$DERIVED_FILE_DIR/Ice_$BASENAME.swift\"\n"; + }; + 602F2D3A28A9EF642A5866CE /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + 6260A8F64B9A210FBBAB2897 /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + 6292329B2F6E00755334B2D9 /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + 62A1F89110329E68FE9E9A08 /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + 63DE5BE3DD93EE3C8080B978 /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + 64BA6853FCCD1F2E521EA64F /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + 67DDDD1F345F8F5C1CA13F1A /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + 69DC4FBED61811358DAEA05C /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*/IceDiscovery/*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice2Cpp Compiler for IceDiscovery/*.ice"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/IceDiscovery/$(INPUT_FILE_BASE).cpp", + "$(SYMROOT)/$(PLATFORM_NAME)/include/IceDiscovery/$(INPUT_FILE_BASE).h", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2cpp\" ]; then\n SLICE2CPP=\"$ICE_HOME/cpp/bin/slice2cpp\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2cpp\" ]; then\n SLICE2CPP=\"$SRCROOT/../cpp/bin/slice2cpp\"\nelif [ -f /usr/local/opt/slice2swift/libexec/bin/slice2cpp ]; then\n SLICE2CPP=/usr/local/opt/slice2swift/libexec/bin/slice2cpp\nelif [ -f /usr/local/bin/slice2cpp ]; then\n SLICE2CPP=/usr/local/bin/slice2cpp\nelse\n echo \"Failed to locate slice2cpp compiler\"\n exit 1\nfi\n\nBASENAME=$(basename -- \"$INPUT_FILE_PATH\")\nBASENAME=\"${BASENAME%.*}\"\nmkdir -p \"$DERIVED_FILE_DIR/IceDiscovery\"\n$SLICE2CPP -I\"$SRCROOT/../slice\" -D ICE_SWIFT --include-dir IceDiscovery --output-dir \"$DERIVED_FILE_DIR/IceDiscovery\" \"$INPUT_FILE_PATH\"\nmkdir -p \"$SYMROOT/$PLATFORM_NAME/include/IceDiscovery\"\nmv \"$DERIVED_FILE_DIR/IceDiscovery/$BASENAME.h\" \"$SYMROOT/$PLATFORM_NAME/include/IceDiscovery/$BASENAME.h\"\n"; + }; + 6B9D84578B5DD1714694A501 /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*/Glacier2/*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler for Glacier2/*.ice"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/Glacier2_$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\nBASENAME=$(basename -- \"$INPUT_FILE_PATH\")\nBASENAME=\"${BASENAME%.*}\"\nmkdir -p \"$DERIVED_FILE_DIR/Glacier2\"\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR/Glacier2\" \"$INPUT_FILE_PATH\"\nmv \"$DERIVED_FILE_DIR/Glacier2/$BASENAME.swift\" \"$DERIVED_FILE_DIR/Glacier2_$BASENAME.swift\"\n"; + }; + 6F146FF4E37F95875C708A2C /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + 72D468445B71798A23D9885C /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + 7351B9B9477073FAE6E0D26D /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + 737CEDF16303C5B23CF8A479 /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + 73CF6609FDDDF03E902ABD4A /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + 7416C9658917D3EC0285A9DF /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + 786A78B1B424C76C46C1D30A /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + 7BB869EFF6B0DCD0F33E59B0 /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*/IceGrid/*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler for IceGrid/*.ice"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/IceGrid_$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\nBASENAME=$(basename -- \"$INPUT_FILE_PATH\")\nBASENAME=\"${BASENAME%.*}\"\nmkdir -p \"$DERIVED_FILE_DIR/IceGrid\"\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR/IceGrid\" \"$INPUT_FILE_PATH\"\nmv \"$DERIVED_FILE_DIR/IceGrid/$BASENAME.swift\" \"$DERIVED_FILE_DIR/IceGrid_$BASENAME.swift\"\n"; + }; + 81678828C7636B74C219FEB5 /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*/Ice/*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice2Cpp Compiler for Ice/*.ice"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/Ice/$(INPUT_FILE_BASE).cpp", + "$(SYMROOT)/$(PLATFORM_NAME)/include/Ice/$(INPUT_FILE_BASE).h", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2cpp\" ]; then\n SLICE2CPP=\"$ICE_HOME/cpp/bin/slice2cpp\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2cpp\" ]; then\n SLICE2CPP=\"$SRCROOT/../cpp/bin/slice2cpp\"\nelif [ -f /usr/local/opt/slice2swift/libexec/bin/slice2cpp ]; then\n SLICE2CPP=/usr/local/opt/slice2swift/libexec/bin/slice2cpp\nelif [ -f /usr/local/bin/slice2cpp ]; then\n SLICE2CPP=/usr/local/bin/slice2cpp\nelse\n echo \"Failed to locate slice2cpp compiler\"\n exit 1\nfi\n\nBASENAME=$(basename -- \"$INPUT_FILE_PATH\")\nBASENAME=\"${BASENAME%.*}\"\nmkdir -p \"$DERIVED_FILE_DIR/Ice\"\n$SLICE2CPP -I\"$SRCROOT/../slice\" -D ICE_SWIFT --include-dir Ice --output-dir \"$DERIVED_FILE_DIR/Ice\" \"$INPUT_FILE_PATH\"\nmkdir -p \"$SYMROOT/$PLATFORM_NAME/include/Ice\"\nmv \"$DERIVED_FILE_DIR/Ice/$BASENAME.h\" \"$SYMROOT/$PLATFORM_NAME/include/Ice/$BASENAME.h\"\n"; + }; + 91158ECFD776B1FA7C42A567 /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + 922664450128B20CA5BB4D3B /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*/IceSSL/*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler for IceSSL/*.ice"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/IceSSL_$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\nBASENAME=$(basename -- \"$INPUT_FILE_PATH\")\nBASENAME=\"${BASENAME%.*}\"\nmkdir -p \"$DERIVED_FILE_DIR/IceSSL\"\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR/IceSSL\" \"$INPUT_FILE_PATH\"\nmv \"$DERIVED_FILE_DIR/IceSSL/$BASENAME.swift\" \"$DERIVED_FILE_DIR/IceSSL_$BASENAME.swift\"\n"; + }; + 9C0C4722090A4588D15EB573 /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + 9DAD6DCC3F20712E3CA4F381 /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + 9F81E60913C5CB43FED2D7A3 /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + A2220AF9E28856CFD4E719AB /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + A3F38100A564F74D54471274 /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + A62DB7E92FFBF4588AF5173B /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + A79C2B3BB4FA95353AEC6E3D /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + A93F3582D4B764D7F26063ED /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + AC2092C97612ACACCC55D262 /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + ACE4C1211E8B730867620E1C /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + B60F4122AD8E2C67BB5C225B /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + B6233EACC486248603BEB0BB /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + B75331B01C95682DDCD0B614 /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + B934FB66E26A024F01CC1443 /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*/IceIAP/*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler for IceIAP/*.ice"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/IceIAP_$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\nBASENAME=$(basename -- \"$INPUT_FILE_PATH\")\nBASENAME=\"${BASENAME%.*}\"\nmkdir -p \"$DERIVED_FILE_DIR/IceIAP\"\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR/IceIAP\" \"$INPUT_FILE_PATH\"\nmv \"$DERIVED_FILE_DIR/IceIAP/$BASENAME.swift\" \"$DERIVED_FILE_DIR/IceIAP_$BASENAME.swift\"\n"; + }; + B9533011D4B4CF68A50D3DCE /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + BE2B87E63C236651504D89F6 /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*/IceGrid/*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler for IceGrid/*.ice"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/IceGrid_$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\nBASENAME=$(basename -- \"$INPUT_FILE_PATH\")\nBASENAME=\"${BASENAME%.*}\"\nmkdir -p \"$DERIVED_FILE_DIR/IceGrid\"\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR/IceGrid\" \"$INPUT_FILE_PATH\"\nmv \"$DERIVED_FILE_DIR/IceGrid/$BASENAME.swift\" \"$DERIVED_FILE_DIR/IceGrid_$BASENAME.swift\"\n"; + }; + BE4B1AC7EA01314C2C60F5C6 /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*/Glacier2/*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler for Glacier2/*.ice"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/Glacier2_$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\nBASENAME=$(basename -- \"$INPUT_FILE_PATH\")\nBASENAME=\"${BASENAME%.*}\"\nmkdir -p \"$DERIVED_FILE_DIR/Glacier2\"\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR/Glacier2\" \"$INPUT_FILE_PATH\"\nmv \"$DERIVED_FILE_DIR/Glacier2/$BASENAME.swift\" \"$DERIVED_FILE_DIR/Glacier2_$BASENAME.swift\"\n"; + }; + C749A593CC0643D746976854 /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*/IceDiscovery/*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice2Cpp Compiler for IceDiscovery/*.ice"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/IceDiscovery/$(INPUT_FILE_BASE).cpp", + "$(SYMROOT)/$(PLATFORM_NAME)/include/IceDiscovery/$(INPUT_FILE_BASE).h", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2cpp\" ]; then\n SLICE2CPP=\"$ICE_HOME/cpp/bin/slice2cpp\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2cpp\" ]; then\n SLICE2CPP=\"$SRCROOT/../cpp/bin/slice2cpp\"\nelif [ -f /usr/local/opt/slice2swift/libexec/bin/slice2cpp ]; then\n SLICE2CPP=/usr/local/opt/slice2swift/libexec/bin/slice2cpp\nelif [ -f /usr/local/bin/slice2cpp ]; then\n SLICE2CPP=/usr/local/bin/slice2cpp\nelse\n echo \"Failed to locate slice2cpp compiler\"\n exit 1\nfi\n\nBASENAME=$(basename -- \"$INPUT_FILE_PATH\")\nBASENAME=\"${BASENAME%.*}\"\nmkdir -p \"$DERIVED_FILE_DIR/IceDiscovery\"\n$SLICE2CPP -I\"$SRCROOT/../slice\" -D ICE_SWIFT --include-dir IceDiscovery --output-dir \"$DERIVED_FILE_DIR/IceDiscovery\" \"$INPUT_FILE_PATH\"\nmkdir -p \"$SYMROOT/$PLATFORM_NAME/include/IceDiscovery\"\nmv \"$DERIVED_FILE_DIR/IceDiscovery/$BASENAME.h\" \"$SYMROOT/$PLATFORM_NAME/include/IceDiscovery/$BASENAME.h\"\n"; + }; + C8689F79F090ECAEB4F5A265 /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + C9A02F8C41309B27A94769B7 /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + CD14939EF065EE302AF7BE7C /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*/IceStorm/*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler for IceStorm/*.ice"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/IceStorm_$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\nBASENAME=$(basename -- \"$INPUT_FILE_PATH\")\nBASENAME=\"${BASENAME%.*}\"\nmkdir -p \"$DERIVED_FILE_DIR/IceStorm\"\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR/IceStorm\" \"$INPUT_FILE_PATH\"\nmv \"$DERIVED_FILE_DIR/IceStorm/$BASENAME.swift\" \"$DERIVED_FILE_DIR/IceStorm_$BASENAME.swift\"\n"; + }; + CF7FEBFE09B5FC9E9856FD30 /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + D15AD5ACBF21128690A18C67 /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + D5EB8445E119E6CA7818A5D0 /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + D6D287ED63E53D852C6076EF /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + D712923D7E3D556C101AD1D2 /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + DADE21C8D80DEF1A9172A712 /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + E47EF4FFFAAF5805E14117FB /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + E52CB52E61CAC0887F2EACB3 /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + EC7E98B0C8C4C0DEE9D8690D /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + ED28E40911C8A0394AA631CC /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + EEF682FA61A770A5B308FA2D /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + EF69AFC63539002AFED1096F /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + F12FF8ACBF5D08160F17CB56 /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + F29DE55533689D340C3D49A3 /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + F4D1F9E1E8C8A1857CA63843 /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + F4F297FE04E053F5DD67600E /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + F7F901033CD14D2826F9519E /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + F843308E9D7AD00BC93D1D71 /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + F8EE6D464C07D3BE49318C57 /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + FCCFFB48F510D0BA28EC5CC0 /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + FD3E1A21EC683FB5D6A89636 /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + FE074612270D2D01A4152AF8 /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; + FEB623AA03D1E2B3F7DA8AD7 /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*/IceLocatorDiscovery/*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice2Cpp Compiler for IceLocatorDiscovery/*.ice"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/IceLocatorDiscovery/$(INPUT_FILE_BASE).cpp", + "$(SYMROOT)/$(PLATFORM_NAME)/include/IceLocatorDiscovery/$(INPUT_FILE_BASE).h", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2cpp\" ]; then\n SLICE2CPP=\"$ICE_HOME/cpp/bin/slice2cpp\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2cpp\" ]; then\n SLICE2CPP=\"$SRCROOT/../cpp/bin/slice2cpp\"\nelif [ -f /usr/local/opt/slice2swift/libexec/bin/slice2cpp ]; then\n SLICE2CPP=/usr/local/opt/slice2swift/libexec/bin/slice2cpp\nelif [ -f /usr/local/bin/slice2cpp ]; then\n SLICE2CPP=/usr/local/bin/slice2cpp\nelse\n echo \"Failed to locate slice2cpp compiler\"\n exit 1\nfi\n\nBASENAME=$(basename -- \"$INPUT_FILE_PATH\")\nBASENAME=\"${BASENAME%.*}\"\nmkdir -p \"$DERIVED_FILE_DIR/IceLocatorDiscovery\"\n$SLICE2CPP -I\"$SRCROOT/../slice\" -D ICE_SWIFT --include-dir IceLocatorDiscovery --output-dir \"$DERIVED_FILE_DIR/IceLocatorDiscovery\" \"$INPUT_FILE_PATH\"\nmkdir -p \"$SYMROOT/$PLATFORM_NAME/include/IceLocatorDiscovery\"\nmv \"$DERIVED_FILE_DIR/IceLocatorDiscovery/$BASENAME.h\" \"$SYMROOT/$PLATFORM_NAME/include/IceLocatorDiscovery/$BASENAME.h\"\n"; + }; + FFC79856198B8E73392DC86B /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = "*.ice"; + fileType = pattern.proxy; + isEditable = 1; + name = "Slice Compiler"; + outputFiles = ( + "$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).swift", + ); + script = "if [ -f \"$ICE_HOME/cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$ICE_HOME/cpp/bin/slice2swift\"\nelif [ -f \"$SRCROOT/../cpp/bin/slice2swift\" ]; then\n SLICE2SWIFT=\"$SRCROOT/../cpp/bin/slice2swift\"\nelif [ -f /usr/local/bin/slice2swift ]; then\n SLICE2SWIFT=/usr/local/bin/slice2swift\nelse\n echo \"Failed to locate slice2swift compiler\"\n exit 1\nfi\n\n\"$SLICE2SWIFT\" -I\"$SRCROOT/../slice\" -I\"$INPUT_FILE_DIR\" --output-dir \"$DERIVED_FILE_DIR\" \"$INPUT_FILE_PATH\"\n"; + }; +/* End PBXBuildRule section */ + +/* Begin PBXContainerItemProxy section */ + 00CF74B38E229ADA7AE66A7A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = 8CA5088455BC6A8877F6585D; + remoteInfo = "IceServantLocatorAMD macOS"; + }; + 00FD89823C84AAAAD61694D1 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = 22F59FDE5EB8BF5D73B8AC27; + remoteInfo = "IceServantLocator iOS"; + }; + 0267E3820CCD6EA2414C2550 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = 8D0BD3C20FA17536D15BAA1F; + remoteInfo = "IceOperations iOS"; + }; + 08BAB59242DC4A13AA9C229D /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = 6AC0F4641FD881A3F9FDE7CC; + remoteInfo = "IceAdmin iOS"; + }; + 0CF53B19C4FF037D1940D9FE /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = EFC33EE48CCBB18EF56B0FC3; + remoteInfo = "IceExceptions macOS"; + }; + 0DA523C92BCC8C8D303DAB69 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = 48A44724482F53DB8836FA44; + remoteInfo = "IceSlicingExceptionsAMD macOS"; + }; + 13762457FD2AC5C9D8E00FE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = 5FBA2B46360A4138C56A793D; + remoteInfo = "IceScope macOS"; + }; + 1684F94FC9F2356709007005 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = B02741DA7E909B59FFEF2A32; + remoteInfo = "IceOperationsAMD iOS"; + }; + 1DD74438CFD549271568EDD5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = 2493729D7F7E9B76236AE7E5; + remoteInfo = "Ice C++11 macOS"; + }; + 1F94AA7511F39C25AE9AA6A2 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = 4FF834835F517C58332265C2; + remoteInfo = "IceAcm macOS"; + }; + 20F4B3CE9FE04FA4B68955E3 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = 5F293FDF6A695184C8A8372C; + remoteInfo = "IceEnums iOS"; + }; + 24BD41A3DE78A2CCCE44D242 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = 9C752DD36F100CB9CBBD0EF7; + remoteInfo = "IceAdapterDeactivation iOS"; + }; + 256F964C7089164917C4241C /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = 8570DC29A49AAFCC705FC566; + remoteInfo = "IceEnums macOS"; + }; + 286CC429AD8D1AA7065A04E7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = 31A765FCD292D8FF91A02483; + remoteInfo = "IceOptional macOS"; + }; + 28F852A81258223E19504B21 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = 657CC3DC1EE12800505DDDC9; + remoteInfo = "IceAmi macOS"; + }; + 299E7F5DE222690386DA72F1 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = 4217D4CAD719BC666712429F; + remoteInfo = "IceDefaultServant iOS"; + }; + 29FF00FE59065850F898FE0B /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = 8172B0B43BFF7CD036F8AAF8; + remoteInfo = "IceUdp macOS"; + }; + 2C92247D23AFE94BCD076772 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = 9824CA3BDAE389C6BFE9724E; + remoteInfo = "IceObjects macOS"; + }; + 32521AB0FAC00F42D19CD11F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = 7ED2831E7D9351394B42F694; + remoteInfo = "IceFacets macOS"; + }; + 3608D8846AF1C5ABE5DEF5A6 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = F03BC2863420CAE44ADF6E43; + remoteInfo = "IceExceptions iOS"; + }; + 366295DEBDF44C91693D4214 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = 45F7C5838CC5BD1755605638; + remoteInfo = "IceLocation iOS"; + }; + 38DB4C8A42B9976E01B83CA7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = A0BFE78E710B0B1240650735; + remoteInfo = "IceProperties iOS"; + }; + 3B9ED2C806044886CD53D5F8 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = 45785A8A5F989B52F70FF09A; + remoteInfo = "Ice C++11 iOS"; + }; + 43450CFB6ABEE1790C6DAFA3 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = DA2903A145E256D0159DA978; + remoteInfo = "IceProxy macOS"; + }; + 467BD94340AF6DDCD91B5F9B /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = C52C439B2C3C7D798C1D14E6; + remoteInfo = "IceSSLConfiguration macOS"; + }; + 48D512B771BD4A1586C63E52 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = 36C60483DFECCC705AD9B224; + remoteInfo = "IceProxy iOS"; + }; + 4E1591364724982BABBA2884 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = C9ECE36CD6C3FDC548AE1395; + remoteInfo = "IceAdmin macOS"; + }; + 526D455DA264AE0DFD46C30B /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = 2493729D7F7E9B76236AE7E5; + remoteInfo = "Ice C++11 macOS"; + }; + 532D136EA151898DE402E1F8 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = C1A0392775F4A0ED6AB29083; + remoteInfo = "IceHold macOS"; + }; + 54F4B8F8F545574D7DF96047 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = F630FE1D71D3F9AE8117A44B; + remoteInfo = "IceProxyAMD macOS"; + }; + 5AA72E6FC288E2F71967BA25 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = 881250C6D8BE80DB29A0385B; + remoteInfo = "IceUdp iOS"; + }; + 5B87B813E9F7869AB89C9146 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = F7AB901D020B23C997BEFBF1; + remoteInfo = "IceInvoke macOS"; + }; + 6B3C4E2A3C1DAADC3874B8AB /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = 150A64F2FB99464CBB6A17B4; + remoteInfo = "IceSlicingObjectsAMD iOS"; + }; + 6BEA78D7E805D26DC0339DAB /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = 0F6C3879164CC37BCB92ED0D; + remoteInfo = "IceServantLocator macOS"; + }; + 6E0AE96B06D60FB4A0017FD1 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = 9EDC064A438ACAEEABFFCD28; + remoteInfo = "IceLocation macOS"; + }; + 73B9D63956F5A99EA1AD5490 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = A10509EA7E4240467A68D03B; + remoteInfo = "IceOptionalAMD macOS"; + }; + 73BF18F9465726BF4397BBC1 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = F8767CA4BDEADDE1A1884D5C; + remoteInfo = "IceInheritance iOS"; + }; + 76BE7FE30A0DCA65D277336F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = 8E3EA7797A22D89ACC8767DA; + remoteInfo = "IceSlicingObjects macOS"; + }; + 7957009F78337E524E7597C6 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = 9762E32D99613E83FD20D0D8; + remoteInfo = "IceInvoke iOS"; + }; + 7EB3341DFE6A56B54C2D6913 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = 256AB7445137457382972306; + remoteInfo = "IceInheritance macOS"; + }; + 845101AC6838DF46B97D53B9 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = F919A202D3CC004235B7961B; + remoteInfo = "IceOperations macOS"; + }; + 87536DF0C24D1226861BFE64 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = 57023FDC36B7ACF8AEB2B86F; + remoteInfo = "SliceEscape iOS"; + }; + 8C58F7447035B5AF70BED4DA /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = 45785A8A5F989B52F70FF09A; + remoteInfo = "Ice C++11 iOS"; + }; + 9478BD4DD5EFC51FD243F7B1 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = DEAC294186758C2289786E09; + remoteInfo = "SliceEscape macOS"; + }; + 999B4ED7F2E0794288A8607E /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = 314BF239BAEBB53CD4F547C7; + remoteInfo = "IceInfo macOS"; + }; + 99E6EC2B9A22B3A09D295CC8 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = 711F18EAD4D0F01FD488DC77; + remoteInfo = "IceRetry iOS"; + }; + 9ADB787A3F9DAB5DC5702E11 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = 2DCD382A1A9C114E838BCE05; + remoteInfo = "IceServantLocatorAMD iOS"; + }; + 9E2A558A617DAEBE679075FB /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = 68527026E5DA54703EEFFC18; + remoteInfo = "IceExceptionsAMD macOS"; + }; + 9EE5BAED84AD90EF7804015B /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = 5578B6E2AB09031CEEF966E5; + remoteInfo = "IceSlicingExceptions macOS"; + }; + 9FDE157618703DB028695B77 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = 94F774D983D7806C8B24980D; + remoteInfo = "IceHold iOS"; + }; + A3EDBACB1FDE9A47EB070AB6 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = 1797F20952E42DF66D6D33BF; + remoteInfo = "IceSlicingObjectsAMD macOS"; + }; + A7BFA014FE750224E3EA8C2B /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = E934D2880DF7299FD6830C1E; + remoteInfo = "IceRetry macOS"; + }; + AA5CDACE9AA5DA132BEA11E0 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = 8CDF569BE7FD7056CC64AEBD; + remoteInfo = "IceAcm iOS"; + }; + B039008BD687D2EE680D2ED4 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = D9A5192102BC772D79236B80; + remoteInfo = "IceDefaultValue iOS"; + }; + B14E88D1070DEF79F95C32A8 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = 84B57B17572B472DB9473F3A; + remoteInfo = "IceSlicingObjects iOS"; + }; + B509014C50BB26FC80432A1C /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = 11485B5FF929691A5833C99A; + remoteInfo = "IceExceptionsAMD iOS"; + }; + B5429F020C751AF57F2DC651 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = 2493729D7F7E9B76236AE7E5; + remoteInfo = "Ice C++11 macOS"; + }; + B6A3C3205C97135742CEA147 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = 88B4DDB0B9CC0F6E3EF41043; + remoteInfo = "IceScope iOS"; + }; + B7FC3068B34D369F9918B887 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = DAF8D0203D265E05C8E59904; + remoteInfo = "IceFacets iOS"; + }; + B92535D8BC867A2BA5F15091 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = DB5E14F78818BB1599DAB991; + remoteInfo = "IceAdapterDeactivation macOS"; + }; + BAEB4E16C1DF53D8C332D0BB /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = 45785A8A5F989B52F70FF09A; + remoteInfo = "Ice C++11 iOS"; + }; + BB7F9976E570A54D07EF8FF0 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = 9D14EA76CE6437452C395F6C; + remoteInfo = "IceSSLConfiguration iOS"; + }; + BD084DC3A41268A43E4F667F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = ABD61E830D609E366325ED4F; + remoteInfo = "IceInfo iOS"; + }; + C06A3F4C2D613D1F6E4913E1 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = DB262AF5F08B0E38FBED3EC9; + remoteInfo = "IceDefaultServant macOS"; + }; + C225C4741EB0CE4AF847162E /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = BB5F7AA59CB20B5A1FF0908F; + remoteInfo = "IceProxyAMD iOS"; + }; + C68C942B7B4409832DB35577 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = 5397CEC0325F0EE19F8A4376; + remoteInfo = "IceStream iOS"; + }; + C7775C223C87127895A89442 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = EE1DA5B2B5550B18C6EAEFC4; + remoteInfo = "IceBinding macOS"; + }; + C9F4DCB12E8B3E89B5481551 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = 74BF5B1E9E63F56637AF0C5C; + remoteInfo = "IceOperationsAMD macOS"; + }; + CD28A9F076E76390B0A8F11B /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = 236F633B019405F93C02FB55; + remoteInfo = "IceOptional iOS"; + }; + D31A7E3352E9493674FD2ABC /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = 5014B8DF208C7227AC852821; + remoteInfo = "IceOptionalAMD iOS"; + }; + D5A0BEF5C3CA3598C5A73F86 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = B40D564181E5D7DC364AC8AF; + remoteInfo = "IceTimeout macOS"; + }; + D687C04B238751AC26697671 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = CE781DFB6EA5764475DE56D1; + remoteInfo = "IceSlicingExceptions iOS"; + }; + D8EBB6E388D1BAA6C5E9E157 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = D393ADD0DC5B2DBF7615B695; + remoteInfo = "IceTimeout iOS"; + }; + D9AB5D0DBE63FA3707FEF416 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = 91E917098ED4D8FE96B582B1; + remoteInfo = "IceProperties macOS"; + }; + DD76C9A6CB80A663546FA506 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = AEDF86E2A1A75EBE97C06C0F; + remoteInfo = "IceAmi iOS"; + }; + E5B7650E7D1A7B8DB737DA2A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = 0E6EE25C3FEF764F7E917F19; + remoteInfo = "IceObjects iOS"; + }; + E96E03DF1A95C24CFDF4B36A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = 42BEFF63ED45F66D4DEB08F9; + remoteInfo = "IceDefaultValue macOS"; + }; + F06F755E560114922A5F4967 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = 45785A8A5F989B52F70FF09A; + remoteInfo = "Ice C++11 iOS"; + }; + F32E850AFF3E5A366204ABCD /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = 61C40BBD5F24B8422CF093CF; + remoteInfo = "IceSlicingExceptionsAMD iOS"; + }; + F43ABE214D312A15DF56B597 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = 49F81B65F4CF3D68A954EB61; + remoteInfo = "IceBinding iOS"; + }; + FE9C644EDE95DB0B769EB939 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B1E245C668955C328A61BFFC /* Project object */; + proxyType = 1; + remoteGlobalIDString = 25815E6D3B269988C01FB074; + remoteInfo = "IceStream macOS"; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 1F3D1C97FCFD19D7796A624E /* Copy Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + F80153638A0AB4A94F271D91 /* Ice.framework in Copy Frameworks */, + DF11AE70071867E2E7201E34 /* IceAcm.bundle in Copy Frameworks */, + 3BF080B95D70506691124BD2 /* IceAdapterDeactivation.bundle in Copy Frameworks */, + 4A77EBB59A89C3FC83D953E7 /* IceAdmin.bundle in Copy Frameworks */, + 94EDE06AB53F88B15D15952A /* IceAmi.bundle in Copy Frameworks */, + 8E964F3DACBE978862F34FEE /* IceBinding.bundle in Copy Frameworks */, + 376D8F51C0A8097D03BD8C4B /* IceDefaultServant.bundle in Copy Frameworks */, + 734B0692BD6D1C72B3DA084C /* IceDefaultValue.bundle in Copy Frameworks */, + 6D8895D0251982887EE7944D /* IceEnums.bundle in Copy Frameworks */, + 762E01F569A5FF5CC23DE9F4 /* IceExceptions.bundle in Copy Frameworks */, + FD03FB6C2682B577B5213DD3 /* IceExceptionsAMD.bundle in Copy Frameworks */, + F6616D2184259536C74BF8AC /* IceFacets.bundle in Copy Frameworks */, + F7A9C9157BE70F320A216986 /* IceHold.bundle in Copy Frameworks */, + 5605E4BA3102EBFDA83E9868 /* IceInfo.bundle in Copy Frameworks */, + 471C10DD00580B04DA210B15 /* IceInheritance.bundle in Copy Frameworks */, + 6096CB9B2B68E6C0393FCC93 /* IceInvoke.bundle in Copy Frameworks */, + 902EDE4A3367389B473A207D /* IceLocation.bundle in Copy Frameworks */, + DB0470398468A17B63322463 /* IceObjects.bundle in Copy Frameworks */, + 24B8B2FC969F4F461D8E0EB5 /* IceOperations.bundle in Copy Frameworks */, + F06BA71DA044A01B73EBFB34 /* IceOperationsAMD.bundle in Copy Frameworks */, + 736805DBE7EC658C8445E5FA /* IceOptional.bundle in Copy Frameworks */, + 661958CE17A1B212547DD231 /* IceOptionalAMD.bundle in Copy Frameworks */, + D1A5FD2DDD3BEB8A5C39E5C7 /* IceProperties.bundle in Copy Frameworks */, + 5C83116DFB0015897E3174B6 /* IceProxy.bundle in Copy Frameworks */, + 4AF5FE2188EC1DFE9D5C8DB0 /* IceProxyAMD.bundle in Copy Frameworks */, + 93BA0B3C27807F67B97CADA6 /* IceRetry.bundle in Copy Frameworks */, + 0BC19AB47F114C0F543ED202 /* IceScope.bundle in Copy Frameworks */, + 1D526D3AF12DD14972E093D4 /* IceServantLocator.bundle in Copy Frameworks */, + 0F2D41EF5125E610E1465AD6 /* IceServantLocatorAMD.bundle in Copy Frameworks */, + 70E37120D2BA4A4C6DF74756 /* IceSlicingExceptions.bundle in Copy Frameworks */, + 63CEB3047967C55AE7BA4F32 /* IceSlicingExceptionsAMD.bundle in Copy Frameworks */, + AAC7BD7A4683A421BF72A737 /* IceSlicingObjects.bundle in Copy Frameworks */, + 4C0433FF7209480B579DBDE3 /* IceSlicingObjectsAMD.bundle in Copy Frameworks */, + 381A32448D4F563BBD8F3B33 /* IceSSLConfiguration.bundle in Copy Frameworks */, + A9EAD36CD0E265BF5422B2EC /* IceStream.bundle in Copy Frameworks */, + 8F582E5D902956EA60956356 /* IceTimeout.bundle in Copy Frameworks */, + 9068EF83D1AB9147D0C0CC8C /* IceUdp.bundle in Copy Frameworks */, + 310B78C5656DB70A841C1B55 /* PromiseKit.framework in Copy Frameworks */, + F745CC2C7469E661B231D522 /* SliceEscape.bundle in Copy Frameworks */, + 72B2A12C05437FFA7A247A95 /* TestCommon.framework in Copy Frameworks */, + ); + name = "Copy Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + C7E0513EC35F13860EF88EE8 /* Copy Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + 25817D629469273EFCE386B6 /* Ice.framework in Copy Frameworks */, + 3E12E5A464EDD053036D8099 /* IceAcm.bundle in Copy Frameworks */, + B5CC2EE380409EECFFC62BFC /* IceAdapterDeactivation.bundle in Copy Frameworks */, + 62E7DBBCD8ACC6E9C8E9DD0D /* IceAdmin.bundle in Copy Frameworks */, + D5DD65E75F40145089631728 /* IceAmi.bundle in Copy Frameworks */, + 5607D35FFF9352260DD3ABA6 /* IceBinding.bundle in Copy Frameworks */, + 0CAD7608BE60D73111D098CF /* IceDefaultServant.bundle in Copy Frameworks */, + 2A88685405F115C51FD403E4 /* IceDefaultValue.bundle in Copy Frameworks */, + 888F1ACE25CF32F29BB854E9 /* IceEnums.bundle in Copy Frameworks */, + D06E072BC06D54723E47AE55 /* IceExceptions.bundle in Copy Frameworks */, + 739296210BB6901740BF55D8 /* IceExceptionsAMD.bundle in Copy Frameworks */, + F1E5BB2600E197870F50F155 /* IceFacets.bundle in Copy Frameworks */, + 43C7C992E113D507B347C41B /* IceHold.bundle in Copy Frameworks */, + 226BFF697F187F5A11C72142 /* IceInfo.bundle in Copy Frameworks */, + 0956C2267E4C66103CEDF72E /* IceInheritance.bundle in Copy Frameworks */, + 2BE1F5A1B3CF814B8D43913A /* IceInvoke.bundle in Copy Frameworks */, + DBB237E48AA9CD9BB57B8EAB /* IceLocation.bundle in Copy Frameworks */, + C2F1CC1C8D147D58BDAC1C90 /* IceObjects.bundle in Copy Frameworks */, + 519BB952870F0CA84FE20D75 /* IceOperations.bundle in Copy Frameworks */, + E28F7B5B9061C78BC0C7070C /* IceOperationsAMD.bundle in Copy Frameworks */, + D2AC776BC6022E14748AA1E6 /* IceOptional.bundle in Copy Frameworks */, + FEC8798483B06F6AA646D350 /* IceOptionalAMD.bundle in Copy Frameworks */, + 121C80D7AFBC0F464AC27839 /* IceProperties.bundle in Copy Frameworks */, + 5F54A0AA4140D73DE6B5FD12 /* IceProxy.bundle in Copy Frameworks */, + 24B3ACE69C5AC1AC45684F2B /* IceProxyAMD.bundle in Copy Frameworks */, + E23361020151588840C90EEE /* IceRetry.bundle in Copy Frameworks */, + 8E77EA72AB3765E81EFF2716 /* IceScope.bundle in Copy Frameworks */, + 303BA643841DF915FF75CA43 /* IceServantLocator.bundle in Copy Frameworks */, + 2AA97AFF0DA50397A7E1A7DD /* IceServantLocatorAMD.bundle in Copy Frameworks */, + 04B79F3883EF777D77A690B4 /* IceSlicingExceptions.bundle in Copy Frameworks */, + FFA77E0BB7058984E62CA106 /* IceSlicingExceptionsAMD.bundle in Copy Frameworks */, + E2A6646FC82F6F5425F62B62 /* IceSlicingObjects.bundle in Copy Frameworks */, + 71222475A073579658EE98CB /* IceSlicingObjectsAMD.bundle in Copy Frameworks */, + EA823926488538F6496DBE42 /* IceSSLConfiguration.bundle in Copy Frameworks */, + 92D9ACFF43B9D501CBB63C4D /* IceStream.bundle in Copy Frameworks */, + 4EEBFCEDE749188E755A8480 /* IceTimeout.bundle in Copy Frameworks */, + C2C6798F75E89091D592E17D /* IceUdp.bundle in Copy Frameworks */, + E25C516DCDB15759FAEA4777 /* PromiseKit.framework in Copy Frameworks */, + 3F0939B88429C6226E3D06A6 /* SliceEscape.bundle in Copy Frameworks */, + A33B313F1E99CE7769712206 /* TestCommon.framework in Copy Frameworks */, + ); + name = "Copy Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 0031328AFD096A32F886C239 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/Security.framework; sourceTree = DEVELOPER_DIR; }; + 007AC5018F40F695098F6B05 /* Server.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Server.swift; path = test/Ice/slicing/objects/Server.swift; sourceTree = "<group>"; }; + 00BB2BF06851445F36D214CC /* ObjectFactory.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = ObjectFactory.ice; path = ../slice/Ice/ObjectFactory.ice; sourceTree = "<group>"; }; + 00EB2CB2792EEC2158F75EEC /* Test.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = Test.ice; path = test/Ice/objects/Test.ice; sourceTree = "<group>"; }; + 01AA575CAE3319A28CD5E7F4 /* AllTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AllTests.swift; path = test/Ice/scope/AllTests.swift; sourceTree = "<group>"; }; + 020836068D73A79D4DCE6A0C /* ValueFactory.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = ValueFactory.ice; path = ../slice/Ice/ValueFactory.ice; sourceTree = "<group>"; }; + 0290A48F7C23A5D1DDAD3AC1 /* BlobjectAsync.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BlobjectAsync.swift; path = src/Ice/BlobjectAsync.swift; sourceTree = "<group>"; }; + 030F29F231CBED0013A88C7B /* LocalException.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = LocalException.ice; path = ../slice/Ice/LocalException.ice; sourceTree = "<group>"; }; + 0324299CF5CA4E7302B4ACAC /* LocatorF.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = LocatorF.ice; path = ../slice/Ice/LocatorF.ice; sourceTree = "<group>"; }; + 037FD47584D12123792BDA88 /* ServerAMD.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ServerAMD.swift; path = test/Ice/slicing/exceptions/ServerAMD.swift; sourceTree = "<group>"; }; + 038D248253FFFD10F4AB2F27 /* Metrics.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = Metrics.ice; path = ../slice/Ice/Metrics.ice; sourceTree = "<group>"; }; + 03B19351ED5C7121B2A4A39E /* IceUtil.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = IceUtil.mm; path = src/IceObjc/IceUtil.mm; sourceTree = "<group>"; }; + 03C4192F0524006FB342718D /* IceOperations.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceOperations.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 04BF7DE5C0E4114B7E131312 /* ConnectorI.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = ConnectorI.cpp; path = ../cpp/src/IceSSL/ConnectorI.cpp; sourceTree = "<group>"; }; + 056AD68493E2D83EBA27D71B /* IceProxyAMD.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceProxyAMD.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 05EB4357B9BD383A57728E3B /* TestI.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TestI.swift; path = test/Ice/invoke/TestI.swift; sourceTree = "<group>"; }; + 067C85F35976F4DEF23B57DB /* AllTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AllTests.swift; path = test/IceSSL/configuration/AllTests.swift; sourceTree = "<group>"; }; + 06D538137AA30E6A7A28C2A2 /* IceDefaultServant.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceDefaultServant.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 06F658397BEF3A330FDA4056 /* IceInheritance.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceInheritance.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 07504CB28A77E27A13CD5553 /* TestI.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TestI.swift; path = test/Ice/exceptions/TestI.swift; sourceTree = "<group>"; }; + 0946309162FAB019EF2B106F /* Server.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Server.swift; path = test/Ice/acm/Server.swift; sourceTree = "<group>"; }; + 0A0AF0DCC30C5C540CE97CC4 /* SecureTransportTransceiverI.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = SecureTransportTransceiverI.cpp; path = ../cpp/src/IceSSL/SecureTransportTransceiverI.cpp; sourceTree = "<group>"; }; + 0AACB72D5FAFE6F7B85D0FC4 /* Object.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Object.cpp; path = ../cpp/src/Ice/Object.cpp; sourceTree = "<group>"; }; + 0AEBC064E6B609DA87301145 /* Server.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Server.swift; path = test/Ice/proxy/Server.swift; sourceTree = "<group>"; }; + 0C189898682F76F5B954526A /* Client.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Client.swift; path = test/Ice/invoke/Client.swift; sourceTree = "<group>"; }; + 0C4A61DF34D8B6DA32B58EF3 /* IceProxyAMD.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceProxyAMD.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 0C5C3C16DE4B7DE056FFC7DD /* ClientPrivate.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = ClientPrivate.ice; path = test/Ice/slicing/objects/ClientPrivate.ice; sourceTree = "<group>"; }; + 0C6868C9BFC9BCAA965A5D1C /* TestAMD.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = TestAMD.ice; path = test/Ice/slicing/objects/TestAMD.ice; sourceTree = "<group>"; }; + 0C7C4954E6E427052EAA79D3 /* NetworkProxy.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = NetworkProxy.cpp; path = ../cpp/src/Ice/NetworkProxy.cpp; sourceTree = "<group>"; }; + 0D1C059D4BA5E01CB0ADFBB4 /* IceEnums.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceEnums.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 0D5180800465FD5D453E63A6 /* AllTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AllTests.swift; path = test/Ice/invoke/AllTests.swift; sourceTree = "<group>"; }; + 0E0E2C9A3037DEACC7BB5C8D /* ServerAMD.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ServerAMD.swift; path = test/Ice/optional/ServerAMD.swift; sourceTree = "<group>"; }; + 0FA0AD77AB4A762782979AA4 /* Test.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = Test.ice; path = test/Ice/operations/Test.ice; sourceTree = "<group>"; }; + 1010042EF9CEC31FC0AFD485 /* Process.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = Process.ice; path = ../slice/Ice/Process.ice; sourceTree = "<group>"; }; + 10838D30B80697B9DDBA31D3 /* ClientPrivate.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = ClientPrivate.ice; path = test/Ice/slicing/exceptions/ClientPrivate.ice; sourceTree = "<group>"; }; + 1090D6FDA9BED7FA1022BF1E /* IceOptional.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceOptional.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 1146EA738EEBF0E8643A7CD7 /* Client.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Client.swift; path = test/Ice/enums/Client.swift; sourceTree = "<group>"; }; + 1253B9777BCF966221D0C86F /* CommunicatorF.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = CommunicatorF.ice; path = ../slice/Ice/CommunicatorF.ice; sourceTree = "<group>"; }; + 13D302603E36BF30FF10F7D0 /* Clash.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = Clash.ice; path = test/Slice/escape/Clash.ice; sourceTree = "<group>"; }; + 1423CA94EC8D93C8B70B8FB8 /* TestI.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TestI.swift; path = test/Ice/objects/TestI.swift; sourceTree = "<group>"; }; + 14BC90C52DA9A3CAF39322CD /* PropertyNames.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = PropertyNames.cpp; path = ../cpp/src/Ice/PropertyNames.cpp; sourceTree = "<group>"; }; + 14FABAAED2F701CC5D6E21C2 /* PropertiesAdminI.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PropertiesAdminI.swift; path = src/Ice/PropertiesAdminI.swift; sourceTree = "<group>"; }; + 159667676124BA50280F0687 /* IceFacets.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceFacets.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 15F2E4CA99023797339779F0 /* ObjectAdapterFactory.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = ObjectAdapterFactory.cpp; path = ../cpp/src/Ice/ObjectAdapterFactory.cpp; sourceTree = "<group>"; }; + 162B14F0FA06A1425F10B585 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = Info.plist; path = src/IceGrid/Info.plist; sourceTree = "<group>"; }; + 163EB528D7D26A1820BD9E1A /* IceDefaultValue.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceDefaultValue.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 16E86B74195482C819014115 /* Server.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Server.swift; path = test/Ice/inheritance/Server.swift; sourceTree = "<group>"; }; + 1714B9E2F7542EBF1F7C50DA /* Client.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Client.swift; path = test/Ice/servantLocator/Client.swift; sourceTree = "<group>"; }; + 173315ECEF41B1A98A00B666 /* Proxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Proxy.swift; path = src/Ice/Proxy.swift; sourceTree = "<group>"; }; + 17D070013CAD1AF6D9C58593 /* TestI.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TestI.swift; path = test/Ice/hold/TestI.swift; sourceTree = "<group>"; }; + 189E3ED7C7335F42F131CAE4 /* AllTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AllTests.swift; path = test/Ice/exceptions/AllTests.swift; sourceTree = "<group>"; }; + 18E3542529153EB181E880EF /* Incoming.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Incoming.swift; path = src/Ice/Incoming.swift; sourceTree = "<group>"; }; + 19231A4083CEDD81E52896EB /* Exception.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = Exception.mm; path = src/IceObjc/Exception.mm; sourceTree = "<group>"; }; + 1A19B0718445836901D562D6 /* Collocated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Collocated.swift; path = test/Ice/facets/Collocated.swift; sourceTree = "<group>"; }; + 1A5BA94BC27B8423B16532B7 /* Logger.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = Logger.mm; path = src/IceObjc/Logger.mm; sourceTree = "<group>"; }; + 1A71BC5C851C5EFD99C2216C /* IceObjects.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceObjects.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 1A9F6B38C8BBFEF026210B08 /* Incoming.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Incoming.cpp; path = ../cpp/src/Ice/Incoming.cpp; sourceTree = "<group>"; }; + 1AA2AE3927EBF4C6E252C140 /* Metrics.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = Metrics.ice; path = ../slice/Glacier2/Metrics.ice; sourceTree = "<group>"; }; + 1B17AE9C3FC4801EE0862F7C /* Test.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = Test.ice; path = test/Ice/enums/Test.ice; sourceTree = "<group>"; }; + 1B27746854547F83FD3400B1 /* EventHandler.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = EventHandler.cpp; path = ../cpp/src/Ice/EventHandler.cpp; sourceTree = "<group>"; }; + 1B423B3D857D4D34E3AF6A6F /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = Info.plist; path = src/Glacier2/Info.plist; sourceTree = "<group>"; }; + 1DF68240A0F93CA79AB86926 /* CommunicatorI.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = CommunicatorI.cpp; path = ../cpp/src/Ice/CommunicatorI.cpp; sourceTree = "<group>"; }; + 1E5D09858E9E4D6A34A94FEF /* ValueFactoryManagerI.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = ValueFactoryManagerI.cpp; path = ../cpp/src/Ice/ValueFactoryManagerI.cpp; sourceTree = "<group>"; }; + 1F5791426E16A8B3C5402DBA /* PropertiesAdmin.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = PropertiesAdmin.mm; path = src/IceObjc/PropertiesAdmin.mm; sourceTree = "<group>"; }; + 1F6E970957A11B1AE6EF71DB /* TestAMD.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = TestAMD.ice; path = test/Ice/slicing/exceptions/TestAMD.ice; sourceTree = "<group>"; }; + 1F87AF0E3A8122C0FC3E3285 /* Collocated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Collocated.swift; path = test/Ice/ami/Collocated.swift; sourceTree = "<group>"; }; + 1F9F2ADAF33F9B5F3499E01F /* IPEndpointI.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = IPEndpointI.cpp; path = ../cpp/src/Ice/IPEndpointI.cpp; sourceTree = "<group>"; }; + 1FD927676FD53EC5878D9266 /* ProtocolInstance.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = ProtocolInstance.cpp; path = ../cpp/src/Ice/ProtocolInstance.cpp; sourceTree = "<group>"; }; + 2031D6527EBCAC2258D6F59F /* Client.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Client.swift; path = test/Ice/admin/Client.swift; sourceTree = "<group>"; }; + 2062C5FD342B207E6E7A831E /* TestI.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TestI.swift; path = test/Ice/enums/TestI.swift; sourceTree = "<group>"; }; + 20797F3B16BFB94F810D5EC4 /* Endpoint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Endpoint.h; path = src/IceObjc/Endpoint.h; sourceTree = "<group>"; }; + 219515F6DF3BA8B09B2AF09A /* Collocated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Collocated.swift; path = test/Ice/retry/Collocated.swift; sourceTree = "<group>"; }; + 2288D724247415182EE9EED7 /* PropertiesAdmin.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = PropertiesAdmin.ice; path = ../slice/Ice/PropertiesAdmin.ice; sourceTree = "<group>"; }; + 23DBDAAC4E927BA973813A9E /* TraceUtil.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = TraceUtil.cpp; path = ../cpp/src/Ice/TraceUtil.cpp; sourceTree = "<group>"; }; + 240904EAE20C44F684F837C6 /* ConsoleUtil.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = ConsoleUtil.cpp; path = ../cpp/src/IceUtil/ConsoleUtil.cpp; sourceTree = "<group>"; }; + 241813D9F10FFD0E31CED44C /* TraceLevels.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = TraceLevels.cpp; path = ../cpp/src/Ice/TraceLevels.cpp; sourceTree = "<group>"; }; + 2429536C7D00CC9A6F571069 /* Shared.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Shared.cpp; path = ../cpp/src/IceUtil/Shared.cpp; sourceTree = "<group>"; }; + 24323E3AB8CD7D9D405EEE9A /* IceExceptionsAMD.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceExceptionsAMD.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 24E1B6E96C21EC72DC064E34 /* IceAdmin.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceAdmin.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 251C120660145DCD5FB6FB5B /* ConnectionInfo.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = ConnectionInfo.ice; path = ../slice/IceSSL/ConnectionInfo.ice; sourceTree = "<group>"; }; + 25704AF884973FE91A8B6C29 /* Config.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Config.h; path = src/IceObjc/Config.h; sourceTree = "<group>"; }; + 2581CADFB1C4EBF2F4EAD662 /* Util.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Util.cpp; path = ../cpp/src/IceSSL/Util.cpp; sourceTree = "<group>"; }; + 260E00176AE3729587786A64 /* TestI.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TestI.swift; path = test/Ice/admin/TestI.swift; sourceTree = "<group>"; }; + 2720E37C8DAA9D7FD5B5216D /* Server.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Server.swift; path = test/Ice/exceptions/Server.swift; sourceTree = "<group>"; }; + 276F78A06FC75374D7EA1EA0 /* IceExceptionsAMD.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceExceptionsAMD.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 2856C294561B45DE0AAF3F61 /* ImplicitContext.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = ImplicitContext.mm; path = src/IceObjc/ImplicitContext.mm; sourceTree = "<group>"; }; + 2894B7D00F096E29676E30FA /* LoggerWrapperI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LoggerWrapperI.h; path = src/IceObjc/LoggerWrapperI.h; sourceTree = "<group>"; }; + 2909D8FC93EDAC36BB8E7957 /* TcpTransceiver.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = TcpTransceiver.cpp; path = ../cpp/src/Ice/TcpTransceiver.cpp; sourceTree = "<group>"; }; + 298A2BAAE7678208C78D1A2C /* ServerPrivateAMD.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = ServerPrivateAMD.ice; path = test/Ice/slicing/exceptions/ServerPrivateAMD.ice; sourceTree = "<group>"; }; + 29DCEF1F0D3756A0B2657EF3 /* Server.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Server.swift; path = test/Ice/operations/Server.swift; sourceTree = "<group>"; }; + 2A825E2C1DC72FC2FC36D7BA /* Communicator.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = Communicator.mm; path = src/IceObjc/Communicator.mm; sourceTree = "<group>"; }; + 2AEA4760C61467A43EAE6051 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; + 2AFD482C35C038A3328285CC /* IceStream.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceStream.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 2BA5B7ABB4CB0BF942935864 /* IceGridSwift.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IceGridSwift.h; path = src/IceGrid/IceGridSwift.h; sourceTree = "<group>"; }; + 2BA911AA1849C456055BD6AD /* AllTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AllTests.swift; path = test/Ice/servantLocator/AllTests.swift; sourceTree = "<group>"; }; + 2BC96422360316AF829DC82F /* AllTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AllTests.swift; path = test/Ice/proxy/AllTests.swift; sourceTree = "<group>"; }; + 2C015EF6A0A8A9EEE016CF9F /* certs */ = {isa = PBXFileReference; includeInIndex = 1; name = certs; path = test/IceSSL/configuration/../../../../cpp/test/IceSSL/certs; sourceTree = "<group>"; }; + 2C465C527F495510572EE063 /* Test.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = Test.ice; path = test/Ice/defaultValue/Test.ice; sourceTree = "<group>"; }; + 2D0747ED96A227648F3E66B2 /* Locator.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = Locator.ice; path = ../slice/Ice/Locator.ice; sourceTree = "<group>"; }; + 2E043CCAB631BD471DEF5B6E /* Server.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Server.swift; path = test/Ice/slicing/exceptions/Server.swift; sourceTree = "<group>"; }; + 2E31C452E06DF02A32D74158 /* IceSlicingObjects.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceSlicingObjects.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 2EB6DB1F8688EB1980F15640 /* RegisterPluginsInit.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = RegisterPluginsInit.cpp; path = ../cpp/src/Ice/RegisterPluginsInit.cpp; sourceTree = "<group>"; }; + 2EF912517FE2F9E06B375F87 /* Random.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Random.cpp; path = ../cpp/src/IceUtil/Random.cpp; sourceTree = "<group>"; }; + 2F1656B63FFA16CE1CB8A8B5 /* HttpParser.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = HttpParser.cpp; path = ../cpp/src/Ice/HttpParser.cpp; sourceTree = "<group>"; }; + 2F2305815DDDCF67ED01341E /* libIceIAP C++11 iOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libIceIAP C++11 iOS.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 2F414D5E99A36BE073766A95 /* Session.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = Session.ice; path = ../slice/IceGrid/Session.ice; sourceTree = "<group>"; }; + 2FDEB40857CC76910C985FA8 /* IceServantLocator.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceServantLocator.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 2FEDB803435645F58EFFC661 /* TestAMDI.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TestAMDI.swift; path = test/Ice/exceptions/TestAMDI.swift; sourceTree = "<group>"; }; + 300ACD38E0CCC3978AACB703 /* CountDownLatch.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = CountDownLatch.cpp; path = ../cpp/src/Ice/CountDownLatch.cpp; sourceTree = "<group>"; }; + 300F8FB7BD45F093F4626D58 /* TestAMD.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = TestAMD.ice; path = test/Ice/servantLocator/TestAMD.ice; sourceTree = "<group>"; }; + 303C14482E7E9485547E6FFD /* TestCommon.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TestCommon.swift; path = test/TestCommon/TestCommon.swift; sourceTree = "<group>"; }; + 309B6BAC2D50E248C757311C /* IceSSLConfiguration.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceSSLConfiguration.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 30A8323A18473C6280EC17C3 /* SliceEscape.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = SliceEscape.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 31D2324E9514306729E2C600 /* EndpointF.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = EndpointF.ice; path = ../slice/Ice/EndpointF.ice; sourceTree = "<group>"; }; + 31F3F7F8FC3116D9134C7D81 /* IceUdp.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceUdp.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 3294A580D3F62ABF8224BFCF /* IceSlicingObjectsAMD.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceSlicingObjectsAMD.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 33BEA73A90E6487D070027A9 /* TraceUtil.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TraceUtil.h; path = src/IceObjc/TraceUtil.h; sourceTree = "<group>"; }; + 340032EE1FA41DE5519F6FC1 /* TestI.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TestI.swift; path = test/Ice/location/TestI.swift; sourceTree = "<group>"; }; + 349E339D24666528C1729E54 /* LocalObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LocalObject.h; path = src/IceObjc/LocalObject.h; sourceTree = "<group>"; }; + 34EE507084F1DAC1C42A3926 /* SSLEngine.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = SSLEngine.cpp; path = ../cpp/src/IceSSL/SSLEngine.cpp; sourceTree = "<group>"; }; + 359279F78A2113594A1CF8A8 /* Client.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Client.swift; path = test/Ice/proxy/Client.swift; sourceTree = "<group>"; }; + 3632C5F63AE7689F894CBC54 /* MetricsAdminI.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = MetricsAdminI.cpp; path = ../cpp/src/Ice/MetricsAdminI.cpp; sourceTree = "<group>"; }; + 366C5D3266D9C6C5D60E338C /* Connection.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = Connection.mm; path = src/IceObjc/Connection.mm; sourceTree = "<group>"; }; + 36EB098C8EE18A985488AFA7 /* PropertiesI.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = PropertiesI.cpp; path = ../cpp/src/Ice/PropertiesI.cpp; sourceTree = "<group>"; }; + 370F2F863ADD7F42819C4498 /* IceAcm.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceAcm.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 3721236531620DBCBEB39D41 /* ObserverHelper.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = ObserverHelper.cpp; path = ../cpp/src/Ice/ObserverHelper.cpp; sourceTree = "<group>"; }; + 375CE372A58028D41159AAA5 /* WSEndpoint.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = WSEndpoint.cpp; path = ../cpp/src/Ice/WSEndpoint.cpp; sourceTree = "<group>"; }; + 37FCE112FA57F8D0E2547946 /* WSConnector.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = WSConnector.cpp; path = ../cpp/src/Ice/WSConnector.cpp; sourceTree = "<group>"; }; + 38BFB7678058CA1EF051EC45 /* AllTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AllTests.swift; path = test/Ice/objects/AllTests.swift; sourceTree = "<group>"; }; + 39F05C7B7976B9D17D483374 /* ObjectAdapterF.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = ObjectAdapterF.ice; path = ../slice/Ice/ObjectAdapterF.ice; sourceTree = "<group>"; }; + 3A8DE454A8DC3CD7065127F9 /* TestDriver.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = TestDriver.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 3B8082664AA4B6D0685DAD08 /* FileParser.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = FileParser.ice; path = ../slice/IceGrid/FileParser.ice; sourceTree = "<group>"; }; + 3B85A3BA1C4E1813167238B1 /* Test.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = Test.ice; path = test/Ice/adapterDeactivation/Test.ice; sourceTree = "<group>"; }; + 3BF5A14B208DEAECF5A412C8 /* AllTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AllTests.swift; path = test/Ice/admin/AllTests.swift; sourceTree = "<group>"; }; + 3C06873D6A18B5AF06EA761B /* ObjectAdapter.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = ObjectAdapter.ice; path = ../slice/Ice/ObjectAdapter.ice; sourceTree = "<group>"; }; + 3C5E7B57B4BF54ECEA2E7644 /* Identity.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = Identity.ice; path = ../slice/Ice/Identity.ice; sourceTree = "<group>"; }; + 3F54218F7DD6E867D382BC83 /* IceHold.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceHold.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 3FBDEBDB8E0DAC4C18CF8225 /* IceLocation.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceLocation.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 401C8E9968EA1542A390134C /* TestI.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TestI.swift; path = test/Ice/optional/TestI.swift; sourceTree = "<group>"; }; + 40E19608103D6C861DE753D1 /* IceLocation.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceLocation.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 411D02DCD4129040E0C3C8F6 /* ServerAMD.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ServerAMD.swift; path = test/Ice/servantLocator/ServerAMD.swift; sourceTree = "<group>"; }; + 41C22F57DF940B52BD56E3EB /* Server.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Server.swift; path = test/Ice/location/Server.swift; sourceTree = "<group>"; }; + 42852A32ED4AE895BFAAA6CA /* Client.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Client.swift; path = test/Ice/binding/Client.swift; sourceTree = "<group>"; }; + 431588ED0E80F0264A83FA35 /* IceInvoke.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceInvoke.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 4335CB8607C8285888A12365 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = Info.plist; path = src/IceStorm/Info.plist; sourceTree = "<group>"; }; + 438696C57A24E941A67A69B5 /* EndpointI.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = EndpointI.cpp; path = ../cpp/src/Ice/EndpointI.cpp; sourceTree = "<group>"; }; + 43B799F55C40A65843F88F0C /* BlobjectFacade.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BlobjectFacade.h; path = src/IceObjc/BlobjectFacade.h; sourceTree = "<group>"; }; + 4420FAEFE57B79BB5E834D56 /* IceProxy.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceProxy.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 44516D401491DBD4538B5906 /* TestI.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TestI.swift; path = test/Ice/slicing/exceptions/TestI.swift; sourceTree = "<group>"; }; + 44A5BD8A0819F6426E07866F /* Service.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Service.cpp; path = ../cpp/src/Ice/Service.cpp; sourceTree = "<group>"; }; + 44A837C5842979328742845D /* IceInfo.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceInfo.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 453895616D7087BC3656F550 /* Selector.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Selector.cpp; path = ../cpp/src/Ice/Selector.cpp; sourceTree = "<group>"; }; + 457855F403B22BF39C75B16F /* Test.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = Test.ice; path = test/Ice/hold/Test.ice; sourceTree = "<group>"; }; + 457E31EE594CC88F3A44A799 /* ServerAMD.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ServerAMD.swift; path = test/Ice/proxy/ServerAMD.swift; sourceTree = "<group>"; }; + 4610D441D9493C0B21FEF581 /* IceSwift.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IceSwift.h; path = src/Ice/IceSwift.h; sourceTree = "<group>"; }; + 463459FB7D8F704FD77898C4 /* SliceChecksumDict.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = SliceChecksumDict.ice; path = ../slice/Ice/SliceChecksumDict.ice; sourceTree = "<group>"; }; + 468C54FF89948C9D452F35C3 /* Test.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = Test.ice; path = test/Ice/info/Test.ice; sourceTree = "<group>"; }; + 46C6B15FA2B196879FD8EC27 /* IceUdp.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceUdp.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 471CD416B83B542C8F7582AB /* RequestHandlerFactory.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = RequestHandlerFactory.cpp; path = ../cpp/src/Ice/RequestHandlerFactory.cpp; sourceTree = "<group>"; }; + 47241080E5C1C81B6F322C3A /* SSLInfo.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = SSLInfo.ice; path = ../slice/Glacier2/SSLInfo.ice; sourceTree = "<group>"; }; + 472A966BEFE38D2EF99832A1 /* Test.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = Test.ice; path = test/Ice/slicing/objects/Test.ice; sourceTree = "<group>"; }; + 476F4FDDFCDE084B13E4F39A /* Server.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Server.swift; path = test/Ice/binding/Server.swift; sourceTree = "<group>"; }; + 4771A7DB0DD97F7601FBE649 /* SHA1.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = SHA1.cpp; path = ../cpp/src/Ice/SHA1.cpp; sourceTree = "<group>"; }; + 48588A0FEC71B23F244B557F /* LocatorInfo.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = LocatorInfo.cpp; path = ../cpp/src/Ice/LocatorInfo.cpp; sourceTree = "<group>"; }; + 488A75C9C0C95733FE145F5A /* PluginF.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = PluginF.ice; path = ../slice/Ice/PluginF.ice; sourceTree = "<group>"; }; + 48F4EF698C0373A8B76A2663 /* OutputStream.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = OutputStream.swift; path = src/Ice/OutputStream.swift; sourceTree = "<group>"; }; + 4915A6FBAF6FEB632CFA7415 /* Plugin.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = Plugin.ice; path = ../slice/Ice/Plugin.ice; sourceTree = "<group>"; }; + 49301C14A9D200E30F8D1B51 /* IconvStringConverter.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = IconvStringConverter.cpp; path = ../cpp/src/Ice/IconvStringConverter.cpp; sourceTree = "<group>"; }; + 4943D90E215EA7F001876C5B /* ObjectAdapterI.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ObjectAdapterI.swift; path = src/Ice/ObjectAdapterI.swift; sourceTree = "<group>"; }; + 496A08AE7826BC0BB1770B33 /* libIceDiscovery C++11 iOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libIceDiscovery C++11 iOS.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 49C9CEFAD9C27035C47EFB73 /* Test.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = Test.ice; path = test/IceSSL/configuration/Test.ice; sourceTree = "<group>"; }; + 49D14E803C9664FE2638C3A5 /* AllTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AllTests.swift; path = test/Ice/info/AllTests.swift; sourceTree = "<group>"; }; + 4A352B2A5341FAB967856ADF /* Test.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = Test.ice; path = test/Ice/location/Test.ice; sourceTree = "<group>"; }; + 4A368B3C0257A6AF1B876892 /* SliceFlags.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SliceFlags.swift; path = src/Ice/SliceFlags.swift; sourceTree = "<group>"; }; + 4A796EC75AE3F3A95CF44FF5 /* Properties.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = Properties.ice; path = ../slice/Ice/Properties.ice; sourceTree = "<group>"; }; + 4B299CAB121530EBB3DA7B2E /* IceInheritance.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceInheritance.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 4BB88B644528FB390A4A8135 /* Client.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Client.swift; path = test/Ice/properties/Client.swift; sourceTree = "<group>"; }; + 4BD08E0917CB9C3B366951D3 /* SystemdJournalI.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = SystemdJournalI.cpp; path = ../cpp/src/Ice/SystemdJournalI.cpp; sourceTree = "<group>"; }; + 4BFDA8F3C438AF1F853497C0 /* Initialize.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Initialize.swift; path = src/Ice/Initialize.swift; sourceTree = "<group>"; }; + 4C1E574FCAD6BE4FD30AAEF9 /* ImplicitContext.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = ImplicitContext.ice; path = ../slice/Ice/ImplicitContext.ice; sourceTree = "<group>"; }; + 4D09012971D6D0CE7EAB4D44 /* libIce C++11 iOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libIce C++11 iOS.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 4D775F15581ED90C5BF0EE05 /* SecureTransportEngine.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = SecureTransportEngine.cpp; path = ../cpp/src/IceSSL/SecureTransportEngine.cpp; sourceTree = "<group>"; }; + 4DA840989579096474F7A7C8 /* ThreadPool.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = ThreadPool.cpp; path = ../cpp/src/Ice/ThreadPool.cpp; sourceTree = "<group>"; }; + 4E755B18219308B2817FC9D3 /* Client.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Client.swift; path = test/Ice/facets/Client.swift; sourceTree = "<group>"; }; + 4EBB3540198C53BCD831F20D /* TestAMDI.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TestAMDI.swift; path = test/Ice/slicing/exceptions/TestAMDI.swift; sourceTree = "<group>"; }; + 4ECA873E5993DD4D031920B7 /* libIceSSL C++11 iOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libIceSSL C++11 iOS.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 4EF3778FE0BD6309950B7C0F /* Glacier2.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Glacier2.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 5084C1A132AC7CBADD433784 /* TestI.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TestI.swift; path = test/Ice/ami/TestI.swift; sourceTree = "<group>"; }; + 50C14E2FBFE498ECE440356D /* Test.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = Test.ice; path = test/Ice/admin/Test.ice; sourceTree = "<group>"; }; + 50FD9EEF66A361FB512D1A29 /* OutputStream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OutputStream.h; path = src/IceObjc/OutputStream.h; sourceTree = "<group>"; }; + 50FF32BF41290CD4BA39CB51 /* LocatorI.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = LocatorI.cpp; path = ../cpp/src/IceDiscovery/LocatorI.cpp; sourceTree = "<group>"; }; + 510DBF2E39A80486AC1E8ADB /* IceTimeout.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceTimeout.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 51E73D7AFEB64D2A351E19B8 /* Test.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = Test.ice; path = test/Ice/binding/Test.ice; sourceTree = "<group>"; }; + 523B9454C940E0D81E8047AF /* RemoteLogger.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = RemoteLogger.ice; path = ../slice/Ice/RemoteLogger.ice; sourceTree = "<group>"; }; + 52CCEBC401EF280F0E87AB1D /* TestAMDI.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TestAMDI.swift; path = test/Ice/operations/TestAMDI.swift; sourceTree = "<group>"; }; + 52D7B25FF0A236B7B69B2B48 /* Test.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = Test.ice; path = test/Ice/udp/Test.ice; sourceTree = "<group>"; }; + 52E6495C52AF1860B1907025 /* RequestHandler.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = RequestHandler.cpp; path = ../cpp/src/Ice/RequestHandler.cpp; sourceTree = "<group>"; }; + 52F7D69A485A017B07B8AD31 /* Connector.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = Connector.mm; path = ../cpp/src/IceIAP/Connector.mm; sourceTree = "<group>"; }; + 52FF2F658D31F2A584C5CEC8 /* IceAdapterDeactivation.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceAdapterDeactivation.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 5343855941902981A2906D7D /* AdminFacetFactory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AdminFacetFactory.h; path = src/IceObjc/AdminFacetFactory.h; sourceTree = "<group>"; }; + 53E07E25DA43B3E8EB6E9D31 /* Client.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Client.swift; path = test/Ice/slicing/exceptions/Client.swift; sourceTree = "<group>"; }; + 54D23B0AC8FD8C3CDB191076 /* Connection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Connection.h; path = src/IceObjc/Connection.h; sourceTree = "<group>"; }; + 54FBF62F717A8E7B3E7E34D9 /* IceAdapterDeactivation.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceAdapterDeactivation.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 5659A452A8240A244425F4FC /* UUID.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = UUID.cpp; path = ../cpp/src/IceUtil/UUID.cpp; sourceTree = "<group>"; }; + 56B83B797BCB69269ADCD3E3 /* IceLocatorDiscovery.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = IceLocatorDiscovery.ice; path = ../slice/IceLocatorDiscovery/IceLocatorDiscovery.ice; sourceTree = "<group>"; }; + 574BF372E6E418E4C6ED09C1 /* PluginI.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = PluginI.cpp; path = ../cpp/src/IceDiscovery/PluginI.cpp; sourceTree = "<group>"; }; + 581215CCF88E5C3BE65ECF1B /* IceRetry.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceRetry.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 586624A3F550C8253BF180DF /* SecureTransportPluginI.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = SecureTransportPluginI.cpp; path = ../cpp/src/IceSSL/SecureTransportPluginI.cpp; sourceTree = "<group>"; }; + 5876CCBAE6AAC096CB461F82 /* Transceiver.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = Transceiver.mm; path = ../cpp/src/IceIAP/Transceiver.mm; sourceTree = "<group>"; }; + 58F11EF594018BDA48E2462F /* AllTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AllTests.swift; path = test/Ice/hold/AllTests.swift; sourceTree = "<group>"; }; + 5947A3AA5EEBFF2631DACE41 /* Collocated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Collocated.swift; path = test/Ice/exceptions/Collocated.swift; sourceTree = "<group>"; }; + 594A5893311594ABA84DDE2E /* TestAMDI.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TestAMDI.swift; path = test/Ice/proxy/TestAMDI.swift; sourceTree = "<group>"; }; + 59CFAC2C8CBDBADDEA3321C2 /* ImplicitContext.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ImplicitContext.h; path = src/IceObjc/ImplicitContext.h; sourceTree = "<group>"; }; + 5A001D5976E7EBCEFED2B608 /* ServantManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ServantManager.swift; path = src/Ice/ServantManager.swift; sourceTree = "<group>"; }; + 5A8A24458E30DC80BCD1B434 /* TestAMDI.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TestAMDI.swift; path = test/Ice/servantLocator/TestAMDI.swift; sourceTree = "<group>"; }; + 5B7F934610D941B81F304A45 /* AllTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AllTests.swift; path = test/Ice/adapterDeactivation/AllTests.swift; sourceTree = "<group>"; }; + 5C45004277123EDCA7BCA6A0 /* LoggerI.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = LoggerI.cpp; path = ../cpp/src/Ice/LoggerI.cpp; sourceTree = "<group>"; }; + 5D244C8F931231B7714E673B /* AllTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AllTests.swift; path = test/Ice/operations/AllTests.swift; sourceTree = "<group>"; }; + 5D7BC837A190E8C95AAD223D /* PluginManagerI.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = PluginManagerI.cpp; path = ../cpp/src/Ice/PluginManagerI.cpp; sourceTree = "<group>"; }; + 5DC688033A9F5344D4120EA9 /* Server.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Server.swift; path = test/Ice/ami/Server.swift; sourceTree = "<group>"; }; + 5E8B177E95BA2D07DCEFDA1D /* FacetMap.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = FacetMap.ice; path = ../slice/Ice/FacetMap.ice; sourceTree = "<group>"; }; + 5FE4A2CF0D4682384614B575 /* TrustManager.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = TrustManager.cpp; path = ../cpp/src/IceSSL/TrustManager.cpp; sourceTree = "<group>"; }; + 5FEAC4680FEC7C7B72A4D8D0 /* Client.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Client.swift; path = test/Ice/ami/Client.swift; sourceTree = "<group>"; }; + 6059450FB8C97A7BDFFE0334 /* Test.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = Test.ice; path = test/Ice/stream/Test.ice; sourceTree = "<group>"; }; + 60D1641294029748233057E1 /* PermissionsVerifier.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = PermissionsVerifier.ice; path = ../slice/Glacier2/PermissionsVerifier.ice; sourceTree = "<group>"; }; + 6129E466F70D4E4A399A8E9E /* SecureTransportUtil.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = SecureTransportUtil.cpp; path = ../cpp/src/IceSSL/SecureTransportUtil.cpp; sourceTree = "<group>"; }; + 61643EA5813C280FBB5DCA70 /* AcceptorI.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = AcceptorI.cpp; path = ../cpp/src/IceSSL/AcceptorI.cpp; sourceTree = "<group>"; }; + 622CA373CF127B6E7D1CF2C6 /* TestCommon.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = TestCommon.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6296F751356C58951A1119CF /* Server.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Server.swift; path = test/Ice/info/Server.swift; sourceTree = "<group>"; }; + 6313F62859B19DC28BB6E1E0 /* IceStorm.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = IceStorm.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 632FF48F5F20042AE238ECC6 /* Client.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Client.swift; path = test/Ice/hold/Client.swift; sourceTree = "<group>"; }; + 63A7DA541926380531C3B8E8 /* Network.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Network.cpp; path = ../cpp/src/Ice/Network.cpp; sourceTree = "<group>"; }; + 63D913EF7A0370FCA4F0D76A /* PromiseKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = PromiseKit.framework; path = ../Carthage/Build/Mac/PromiseKit.framework; sourceTree = "<group>"; }; + 63FB631C2469790D2A77A6C1 /* IceServantLocator.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceServantLocator.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 64F6FC1409B86A503C498833 /* Client.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Client.swift; path = test/Ice/location/Client.swift; sourceTree = "<group>"; }; + 652F819A999ABAB56CFC4A89 /* IceTimeout.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceTimeout.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 65314D334B73B7733B0F9D65 /* Properties.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = Properties.mm; path = src/IceObjc/Properties.mm; sourceTree = "<group>"; }; + 65B38CB58578E951F9F8714B /* ObjectAdapter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ObjectAdapter.h; path = src/IceObjc/ObjectAdapter.h; sourceTree = "<group>"; }; + 65F012235FAE7A79FA922758 /* LoggerUtil.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = LoggerUtil.cpp; path = ../cpp/src/Ice/LoggerUtil.cpp; sourceTree = "<group>"; }; + 65F79884355E2A0FE99ECB0D /* IceOperations.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceOperations.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 6677DC4BA022BF3A4991609E /* UdpEndpointI.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = UdpEndpointI.cpp; path = ../cpp/src/Ice/UdpEndpointI.cpp; sourceTree = "<group>"; }; + 6709AE92A21F7B4AA66E804F /* RouterF.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = RouterF.ice; path = ../slice/Ice/RouterF.ice; sourceTree = "<group>"; }; + 6743B765683A9B925F99D1A9 /* AllTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AllTests.swift; path = test/Ice/enums/AllTests.swift; sourceTree = "<group>"; }; + 674E773DF4B4DCDDA39F3DE8 /* StreamAcceptor.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = StreamAcceptor.cpp; path = ../cpp/src/Ice/ios/StreamAcceptor.cpp; sourceTree = "<group>"; }; + 67A8C3A32F38C280D5A32C12 /* BatchOneways.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BatchOneways.swift; path = test/Ice/operations/BatchOneways.swift; sourceTree = "<group>"; }; + 67DDFF09213CF8A855D0B4AD /* Twoways.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Twoways.swift; path = test/Ice/operations/Twoways.swift; sourceTree = "<group>"; }; + 691D4FAE09254013CDF14460 /* Timer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Timer.cpp; path = ../cpp/src/Ice/Timer.cpp; sourceTree = "<group>"; }; + 69F24D683B72432659C41F5E /* OptionalFormat.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = OptionalFormat.swift; path = src/Ice/OptionalFormat.swift; sourceTree = "<group>"; }; + 6A1A8FEE7AB16055C7C60B15 /* Server.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Server.swift; path = test/Ice/servantLocator/Server.swift; sourceTree = "<group>"; }; + 6A685447CC038C3FC379393F /* libIceLocatorDiscovery C++11 iOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libIceLocatorDiscovery C++11 iOS.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 6B0972F4B9891E7569954312 /* ImplicitContextF.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = ImplicitContextF.ice; path = ../slice/Ice/ImplicitContextF.ice; sourceTree = "<group>"; }; + 6CDAF82F7706588F392E7300 /* LocalObject.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = LocalObject.cpp; path = ../cpp/src/Ice/LocalObject.cpp; sourceTree = "<group>"; }; + 6D41A319A7B3B147FDC8EA45 /* PromiseKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = PromiseKit.framework; path = ../Carthage/Build/iOS/PromiseKit.framework; sourceTree = "<group>"; }; + 6DFC6B655D6E3B27FFF53F55 /* UserAccountMapper.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = UserAccountMapper.ice; path = ../slice/IceGrid/UserAccountMapper.ice; sourceTree = "<group>"; }; + 6E1A635F482FAF37FB9C9FA5 /* AllTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AllTests.swift; path = test/Ice/optional/AllTests.swift; sourceTree = "<group>"; }; + 6EC50A5D5A8848770F31576D /* TestI.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TestI.swift; path = test/Ice/facets/TestI.swift; sourceTree = "<group>"; }; + 6EC8AC1A2176680E2BE40014 /* OutputUtil.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = OutputUtil.cpp; path = ../cpp/src/IceUtil/OutputUtil.cpp; sourceTree = "<group>"; }; + 6F67B6869ECDEBB8425E91EB /* TraceUtil.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = TraceUtil.mm; path = src/IceObjc/TraceUtil.mm; sourceTree = "<group>"; }; + 6FDA009DD1E09F4AD8054EB9 /* Transceiver.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Transceiver.cpp; path = ../cpp/src/Ice/Transceiver.cpp; sourceTree = "<group>"; }; + 6FFA737E371CC954F700F596 /* PluginFacade.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = PluginFacade.ice; path = ../slice/IceGrid/PluginFacade.ice; sourceTree = "<group>"; }; + 70565ECB1A3515AB0C667598 /* PropertiesAdminI.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = PropertiesAdminI.cpp; path = ../cpp/src/Ice/PropertiesAdminI.cpp; sourceTree = "<group>"; }; + 7134B828724603F195A46A12 /* StreamEndpointI.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = StreamEndpointI.cpp; path = ../cpp/src/Ice/ios/StreamEndpointI.cpp; sourceTree = "<group>"; }; + 719ADF19645404C64EA92692 /* TestI.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TestI.swift; path = test/Ice/inheritance/TestI.swift; sourceTree = "<group>"; }; + 71A96FD335DA471AC7150A42 /* Admin.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = Admin.ice; path = ../slice/IceGrid/Admin.ice; sourceTree = "<group>"; }; + 71F686B1842EE0F0668A7ADC /* ConnectionRequestHandler.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = ConnectionRequestHandler.cpp; path = ../cpp/src/Ice/ConnectionRequestHandler.cpp; sourceTree = "<group>"; }; + 71F7CDB885CFFA255B8704DA /* RouterInfo.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = RouterInfo.cpp; path = ../cpp/src/Ice/RouterInfo.cpp; sourceTree = "<group>"; }; + 720EA8CACCCFF1F133F8D2C0 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = Info.plist; path = test/TestCommon/Info.plist; sourceTree = "<group>"; }; + 72A5A83540F1CD36566EDF59 /* Notifications.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = Notifications.mm; path = ../cpp/src/Ice/ios/Notifications.mm; sourceTree = "<group>"; }; + 737728F65186B1B6E7C4D3CA /* AllTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AllTests.swift; path = test/Ice/ami/AllTests.swift; sourceTree = "<group>"; }; + 742CE6AFDC1FB7CC9737459B /* Exception.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Exception.h; path = src/IceObjc/Exception.h; sourceTree = "<group>"; }; + 7447E13620612CE478F173E4 /* AdminFacetFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AdminFacetFactory.swift; path = src/Ice/AdminFacetFactory.swift; sourceTree = "<group>"; }; + 7548DFA80BEDA74E4E959478 /* TcpEndpointI.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = TcpEndpointI.cpp; path = ../cpp/src/Ice/TcpEndpointI.cpp; sourceTree = "<group>"; }; + 756F0C35DE3CC240831BE50C /* TestI.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TestI.swift; path = test/Ice/operations/TestI.swift; sourceTree = "<group>"; }; + 758E5A7716D74082A68175B3 /* TwowaysAMI.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TwowaysAMI.swift; path = test/Ice/operations/TwowaysAMI.swift; sourceTree = "<group>"; }; + 75E28A8A26A675D74CEE27DA /* Server.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Server.swift; path = test/Ice/objects/Server.swift; sourceTree = "<group>"; }; + 7605F07734AEBCA7AF79DDE5 /* Proxy.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Proxy.cpp; path = ../cpp/src/Ice/Proxy.cpp; sourceTree = "<group>"; }; + 763ACF31E2066730E340FCBA /* libIce C++11 macOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libIce C++11 macOS.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 7680CD444DA1821E2BBDDD9F /* WSAcceptor.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = WSAcceptor.cpp; path = ../cpp/src/Ice/WSAcceptor.cpp; sourceTree = "<group>"; }; + 788A94FF26B608B7AC909F56 /* Client.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Client.swift; path = test/Ice/udp/Client.swift; sourceTree = "<group>"; }; + 7992CA6EAF2AB4E48B3D2CF8 /* Client.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Client.swift; path = test/Ice/timeout/Client.swift; sourceTree = "<group>"; }; + 79A4ABB901DBFB88FDC00658 /* ObjectPrx.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ObjectPrx.h; path = src/IceObjc/ObjectPrx.h; sourceTree = "<group>"; }; + 79B384D87B697743242782A4 /* ConnectionI.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = ConnectionI.cpp; path = ../cpp/src/Ice/ConnectionI.cpp; sourceTree = "<group>"; }; + 7AB71501E16A76D0ADC74A14 /* Metrics.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = Metrics.ice; path = ../slice/IceStorm/Metrics.ice; sourceTree = "<group>"; }; + 7AE6B26C06804866E58A3741 /* CommunicatorI.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CommunicatorI.swift; path = src/Ice/CommunicatorI.swift; sourceTree = "<group>"; }; + 7AF9BF639398943A70F14231 /* DispatchInterceptor.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = DispatchInterceptor.cpp; path = ../cpp/src/Ice/DispatchInterceptor.cpp; sourceTree = "<group>"; }; + 7BB5940A27038DF47F718AB3 /* Server.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Server.swift; path = test/Ice/adapterDeactivation/Server.swift; sourceTree = "<group>"; }; + 7C1B9082D7C66385A1F84BD7 /* Server.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Server.swift; path = test/Ice/enums/Server.swift; sourceTree = "<group>"; }; + 7CFD4B7164DA1D8892FBBA97 /* Server.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Server.swift; path = test/Ice/udp/Server.swift; sourceTree = "<group>"; }; + 7DACE4CE00C90B00137CDD05 /* IceProperties.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceProperties.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 7EC016AF7C4C92CEE082A7B8 /* DynamicLibrary.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = DynamicLibrary.cpp; path = ../cpp/src/Ice/DynamicLibrary.cpp; sourceTree = "<group>"; }; + 7F02FA98FF08CB088789D1C7 /* CtrlCHandler.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = CtrlCHandler.cpp; path = ../cpp/src/IceUtil/CtrlCHandler.cpp; sourceTree = "<group>"; }; + 7F2F45A4AF18D649F0885E9B /* LoggerF.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = LoggerF.ice; path = ../slice/Ice/LoggerF.ice; sourceTree = "<group>"; }; + 7FB3724BBA6C5D4D698ACB54 /* ServerAMD.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ServerAMD.swift; path = test/Ice/exceptions/ServerAMD.swift; sourceTree = "<group>"; }; + 802EA8B7D12327ACEC90091B /* Instance.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Instance.cpp; path = ../cpp/src/Ice/Instance.cpp; sourceTree = "<group>"; }; + 80B853408ED79054E6964CD6 /* AllTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AllTests.swift; path = test/Ice/udp/AllTests.swift; sourceTree = "<group>"; }; + 80DFB051092F5C0B9386E466 /* ConnectRequestHandler.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = ConnectRequestHandler.cpp; path = ../cpp/src/Ice/ConnectRequestHandler.cpp; sourceTree = "<group>"; }; + 811F0B562E73A9C2AAEE013E /* TestI.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TestI.swift; path = test/IceSSL/configuration/TestI.swift; sourceTree = "<group>"; }; + 81534B568DDF6C96DC83A047 /* Value.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Value.swift; path = src/Ice/Value.swift; sourceTree = "<group>"; }; + 81788FBB3A77489D9F76FF0E /* EndpointI.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EndpointI.swift; path = src/Ice/EndpointI.swift; sourceTree = "<group>"; }; + 81B7B64819E414CA3B2A2EE1 /* ServantLocatorI.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ServantLocatorI.swift; path = test/Ice/servantLocator/ServantLocatorI.swift; sourceTree = "<group>"; }; + 81DDF0548E42CFB37B7CD4C4 /* Test.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = Test.ice; path = test/Ice/proxy/Test.ice; sourceTree = "<group>"; }; + 822BAFEABECEDD0F2875C9A2 /* Client.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Client.swift; path = test/Ice/adapterDeactivation/Client.swift; sourceTree = "<group>"; }; + 825783EC43912BFE5482D5DF /* RFC2253.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = RFC2253.cpp; path = ../cpp/src/IceSSL/RFC2253.cpp; sourceTree = "<group>"; }; + 826497ACA601D39811A8CF36 /* IceFacets.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceFacets.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 828B38E787FC8723C83D4919 /* ConnectionF.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = ConnectionF.ice; path = ../slice/Ice/ConnectionF.ice; sourceTree = "<group>"; }; + 83CAC57033DE83BE309A182B /* Client.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Client.swift; path = test/Ice/acm/Client.swift; sourceTree = "<group>"; }; + 84CBE7EE8763343781E71AE8 /* PropertiesAdmin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PropertiesAdmin.h; path = src/IceObjc/PropertiesAdmin.h; sourceTree = "<group>"; }; + 84D759E6446D5F71CE241600 /* TestAMDI.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TestAMDI.swift; path = test/Ice/optional/TestAMDI.swift; sourceTree = "<group>"; }; + 851C3F8D55FA569B433B5FD5 /* Util.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Util.swift; path = src/Ice/Util.swift; sourceTree = "<group>"; }; + 85A108B0EC561AA0BF6C2FCD /* TestI.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TestI.swift; path = test/Ice/info/TestI.swift; sourceTree = "<group>"; }; + 85A9DD97447DA62B03DD75B9 /* SlicedData.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = SlicedData.cpp; path = ../cpp/src/Ice/SlicedData.cpp; sourceTree = "<group>"; }; + 85FDF41433ED94733E1BC813 /* ExternalAccessory.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ExternalAccessory.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/ExternalAccessory.framework; sourceTree = DEVELOPER_DIR; }; + 865B104EF3F6EDED00ED2754 /* ConnectionInfo.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = ConnectionInfo.ice; path = ../slice/IceIAP/ConnectionInfo.ice; sourceTree = "<group>"; }; + 870EAA4BC7FF0C331853C50F /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; + 877C33F38770D875BE148A14 /* IceObjects.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceObjects.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 881E8ED1F550ABA8F7A59DA1 /* IceDefaultValue.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceDefaultValue.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 88355021C7A31D08304EC1DA /* TestI.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TestI.swift; path = test/Ice/binding/TestI.swift; sourceTree = "<group>"; }; + 887AF44AB027F6D7F3BA5D34 /* IncomingAsync.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = IncomingAsync.cpp; path = ../cpp/src/Ice/IncomingAsync.cpp; sourceTree = "<group>"; }; + 8902EE450DF3A87D4781F048 /* UnknownSlicedValue.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UnknownSlicedValue.swift; path = src/Ice/UnknownSlicedValue.swift; sourceTree = "<group>"; }; + 89475D08DAA465BCAC6BF4D7 /* MetricsObserverI.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = MetricsObserverI.cpp; path = ../cpp/src/Ice/MetricsObserverI.cpp; sourceTree = "<group>"; }; + 8971D2300FEA21980DEB02D9 /* PluginI.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = PluginI.cpp; path = ../cpp/src/IceLocatorDiscovery/PluginI.cpp; sourceTree = "<group>"; }; + 8A5C9E0BB881BCF4F6F0FA8F /* Test.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = Test.ice; path = test/Ice/inheritance/Test.ice; sourceTree = "<group>"; }; + 8A7FAB4CC1E0F31A6C450E57 /* AllTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AllTests.swift; path = test/Ice/facets/AllTests.swift; sourceTree = "<group>"; }; + 8B38AE066B39786410748F40 /* InputStream.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = InputStream.cpp; path = ../cpp/src/Ice/InputStream.cpp; sourceTree = "<group>"; }; + 8B5C9BA809A1302EC50A6E99 /* ObjectAdapterI.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = ObjectAdapterI.cpp; path = ../cpp/src/Ice/ObjectAdapterI.cpp; sourceTree = "<group>"; }; + 8C011F62FA8756F9B88CB6E9 /* BatchRequestQueue.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = BatchRequestQueue.cpp; path = ../cpp/src/Ice/BatchRequestQueue.cpp; sourceTree = "<group>"; }; + 8D0B27B694C3EE943904522E /* ReferenceFactory.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = ReferenceFactory.cpp; path = ../cpp/src/Ice/ReferenceFactory.cpp; sourceTree = "<group>"; }; + 8DA84E31A161CE8E85A7771D /* IceUtil.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IceUtil.h; path = src/IceObjc/IceUtil.h; sourceTree = "<group>"; }; + 8EA814FAFAE21BEA08FDE9D1 /* TestI.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TestI.swift; path = test/Ice/timeout/TestI.swift; sourceTree = "<group>"; }; + 8EC01BFFE83B9C38FC2EC096 /* SlicedData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SlicedData.swift; path = src/Ice/SlicedData.swift; sourceTree = "<group>"; }; + 8F5CFDD336873528BE970BAD /* Main.storyboard */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.storyboard; name = Main.storyboard; path = test/TestDriver/iOS/Base.lproj/Main.storyboard; sourceTree = "<group>"; }; + 8F7EB4BD53C8878A62DB683A /* EndpointFactoryManager.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = EndpointFactoryManager.cpp; path = ../cpp/src/Ice/EndpointFactoryManager.cpp; sourceTree = "<group>"; }; + 8F81AF5DE3734BFCFACFC594 /* ThreadException.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = ThreadException.cpp; path = ../cpp/src/IceUtil/ThreadException.cpp; sourceTree = "<group>"; }; + 90EFB1CE1C4B06CB3795BA7B /* InstrumentationF.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = InstrumentationF.ice; path = ../slice/Ice/InstrumentationF.ice; sourceTree = "<group>"; }; + 9104FC83EEB1DB6A2D5A5427 /* StreamConnector.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = StreamConnector.cpp; path = ../cpp/src/Ice/ios/StreamConnector.cpp; sourceTree = "<group>"; }; + 911798EC58B6007855943BCB /* InputStream.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = InputStream.swift; path = src/Ice/InputStream.swift; sourceTree = "<group>"; }; + 918271702A341F61A3F4082C /* Client.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Client.swift; path = test/Ice/defaultServant/Client.swift; sourceTree = "<group>"; }; + 9188C130AAD5F8B048DC36FF /* ServerPrivate.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = ServerPrivate.ice; path = test/Ice/slicing/exceptions/ServerPrivate.ice; sourceTree = "<group>"; }; + 91A7E4C4039CC1B374674571 /* Client.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Client.swift; path = test/Ice/optional/Client.swift; sourceTree = "<group>"; }; + 9245071A4DE8D8E016961500 /* MutexProtocol.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = MutexProtocol.cpp; path = ../cpp/src/IceUtil/MutexProtocol.cpp; sourceTree = "<group>"; }; + 9245EE9385C60ACAD3398624 /* Buffer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Buffer.cpp; path = ../cpp/src/Ice/Buffer.cpp; sourceTree = "<group>"; }; + 925CBA6473C1C2E94842EF0C /* Collocated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Collocated.swift; path = test/Ice/objects/Collocated.swift; sourceTree = "<group>"; }; + 92B5906332A66BA58B0EFA97 /* BatchOnewaysAMI.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BatchOnewaysAMI.swift; path = test/Ice/operations/BatchOnewaysAMI.swift; sourceTree = "<group>"; }; + 92B681D8A5D3A17094255E4A /* SliceInfo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SliceInfo.swift; path = src/Ice/SliceInfo.swift; sourceTree = "<group>"; }; + 933618455164E19AE790AD98 /* EndpointFactory.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = EndpointFactory.cpp; path = ../cpp/src/Ice/EndpointFactory.cpp; sourceTree = "<group>"; }; + 93CD33F473CD961099A82773 /* Server.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Server.swift; path = test/Ice/hold/Server.swift; sourceTree = "<group>"; }; + 93F6B13E28C65453745EE726 /* OutgoingAsync.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = OutgoingAsync.cpp; path = ../cpp/src/Ice/OutgoingAsync.cpp; sourceTree = "<group>"; }; + 94307650C0CD9D1D4B13D275 /* AllTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AllTests.swift; path = test/Ice/defaultServant/AllTests.swift; sourceTree = "<group>"; }; + 952E665CC33C0FD5B7BB55BB /* IceInvoke.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceInvoke.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 95A8E2FD4FB54E0EF0C4CADE /* Current.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = Current.ice; path = ../slice/Ice/Current.ice; sourceTree = "<group>"; }; + 95B6991B5CF369BEF354B351 /* AllTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AllTests.swift; path = test/Ice/acm/AllTests.swift; sourceTree = "<group>"; }; + 95D70577B75E2EF282CDA2F8 /* Collocated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Collocated.swift; path = test/Ice/proxy/Collocated.swift; sourceTree = "<group>"; }; + 9633B57E8267287F48291029 /* ServerPrivate.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = ServerPrivate.ice; path = test/Ice/slicing/objects/ServerPrivate.ice; sourceTree = "<group>"; }; + 96A01B6D9C204DFF548C8D48 /* LoggerAdminI.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = LoggerAdminI.cpp; path = ../cpp/src/Ice/LoggerAdminI.cpp; sourceTree = "<group>"; }; + 96F346F0305A06F0EFADF9BF /* FormatType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FormatType.swift; path = src/Ice/FormatType.swift; sourceTree = "<group>"; }; + 97AF19A23453655F018CA0AD /* TestDriver.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = TestDriver.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 97BB271A8188770DE5EE5B74 /* TestAMD.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = TestAMD.ice; path = test/Ice/optional/TestAMD.ice; sourceTree = "<group>"; }; + 9A3A28D3F77ACF9B59C9EE7F /* AllTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AllTests.swift; path = test/Ice/location/AllTests.swift; sourceTree = "<group>"; }; + 9A4E1C14022C9EAEC8AB771C /* LocalExceptionFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LocalExceptionFactory.swift; path = src/Ice/LocalExceptionFactory.swift; sourceTree = "<group>"; }; + 9AC2E1EE44058CE5096D663C /* OpaqueEndpointI.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = OpaqueEndpointI.cpp; path = ../cpp/src/Ice/OpaqueEndpointI.cpp; sourceTree = "<group>"; }; + 9B2225BF2C6D5186590EAE48 /* Endpoint.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = Endpoint.mm; path = src/IceObjc/Endpoint.mm; sourceTree = "<group>"; }; + 9B89423116A9D0059B0444DB /* Client.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Client.swift; path = test/Ice/slicing/objects/Client.swift; sourceTree = "<group>"; }; + 9BAAC87A1922606E9DD4593C /* StringConverter.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = StringConverter.cpp; path = ../cpp/src/IceUtil/StringConverter.cpp; sourceTree = "<group>"; }; + 9BB671D15F8523B6ABEE9F08 /* UnsupportedAdminFacet.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = UnsupportedAdminFacet.mm; path = src/IceObjc/UnsupportedAdminFacet.mm; sourceTree = "<group>"; }; + 9BBC2ACFB110C84DC4C862D6 /* Test.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = Test.ice; path = test/Ice/timeout/Test.ice; sourceTree = "<group>"; }; + 9BE620CF9DE30EB5998991A5 /* AllTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AllTests.swift; path = test/Ice/slicing/objects/AllTests.swift; sourceTree = "<group>"; }; + 9C560837742F1536CD9077D5 /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/CFNetwork.framework; sourceTree = DEVELOPER_DIR; }; + 9C8A4C7448EF28DFB238F82D /* IceRetry.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceRetry.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 9D4151C3144AD1696BC226C1 /* IceSlicingExceptionsAMD.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceSlicingExceptionsAMD.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 9DE0D76C9B9CA73D2B49DEC5 /* IceScope.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceScope.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 9DEB9C24CF5B2D68DEB44B1A /* IceSlicingExceptions.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceSlicingExceptions.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 9E183236587AED966063E0A3 /* AllTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AllTests.swift; path = test/Ice/inheritance/AllTests.swift; sourceTree = "<group>"; }; + 9F1C91EC749224042C8D36BB /* Test.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = Test.ice; path = test/Ice/ami/Test.ice; sourceTree = "<group>"; }; + A0A305D5937C66216F11CF05 /* Client.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Client.swift; path = test/Ice/operations/Client.swift; sourceTree = "<group>"; }; + A0C05CB1065C9BC36847B733 /* IceStorm.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = IceStorm.ice; path = ../slice/IceStorm/IceStorm.ice; sourceTree = "<group>"; }; + A2069630D4A927F86C4FBC80 /* Descriptor.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = Descriptor.ice; path = ../slice/IceGrid/Descriptor.ice; sourceTree = "<group>"; }; + A2C2BD4A7F4DE45077554C07 /* Options.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Options.cpp; path = ../cpp/src/IceUtil/Options.cpp; sourceTree = "<group>"; }; + A301C0867F02FB9808FAC6AF /* AllTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AllTests.swift; path = test/Ice/slicing/exceptions/AllTests.swift; sourceTree = "<group>"; }; + A373F10D83CCD608A39E3835 /* ServantLocatorF.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = ServantLocatorF.ice; path = ../slice/Ice/ServantLocatorF.ice; sourceTree = "<group>"; }; + A3DE7F634444B01AE61627AF /* IceExceptions.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceExceptions.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + A46ED6C2DA9BB2B842766CCF /* Communicator.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = Communicator.ice; path = ../slice/Ice/Communicator.ice; sourceTree = "<group>"; }; + A54D26BC0704A7705CF6E082 /* IceProperties.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceProperties.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + A56C1DEC107F647E8C622C2E /* IceEnums.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceEnums.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + A5EE97F0338BD9EAD0DE1B10 /* ProxyFactory.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = ProxyFactory.cpp; path = ../cpp/src/Ice/ProxyFactory.cpp; sourceTree = "<group>"; }; + A609B420DBC220683E3478A5 /* ProtocolPluginFacade.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = ProtocolPluginFacade.cpp; path = ../cpp/src/Ice/ProtocolPluginFacade.cpp; sourceTree = "<group>"; }; + A66926ED2CACE6A4FA7B5C66 /* UdpConnector.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = UdpConnector.cpp; path = ../cpp/src/Ice/UdpConnector.cpp; sourceTree = "<group>"; }; + A6D1E38568D7656F13F57D5A /* EndpointTypes.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = EndpointTypes.ice; path = ../slice/Ice/EndpointTypes.ice; sourceTree = "<group>"; }; + A74A24CD7ED2FBFECB9FED97 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Cocoa.framework; sourceTree = DEVELOPER_DIR; }; + A7C655DD11BD41ED4C3D1E99 /* Logger.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = Logger.ice; path = ../slice/Ice/Logger.ice; sourceTree = "<group>"; }; + A7FBF20FA5074019E1952619 /* Glacier2.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Glacier2.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + A8B6138D4BA7EC05DBA41627 /* StreamSocket.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = StreamSocket.cpp; path = ../cpp/src/Ice/StreamSocket.cpp; sourceTree = "<group>"; }; + A9177E1CD1131BBB556DB172 /* IceOperationsAMD.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceOperationsAMD.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + A91D5392ED5EE6A845F39DA3 /* Client.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Client.swift; path = test/Ice/retry/Client.swift; sourceTree = "<group>"; }; + A93A87F8B9860213E8240A72 /* Test.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = Test.ice; path = test/Ice/exceptions/Test.ice; sourceTree = "<group>"; }; + A95701B4918767C88D3D5D7F /* LaunchScreen.storyboard */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = test/TestDriver/iOS/Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; }; + A98EBCF6F026FC4FF7AFD672 /* Exception.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Exception.cpp; path = ../cpp/src/Ice/Exception.cpp; sourceTree = "<group>"; }; + AA7D86CCA91AA68E7C38124A /* Collocated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Collocated.swift; path = test/Ice/operations/Collocated.swift; sourceTree = "<group>"; }; + AA9CA8ABE0C8034574EE00F5 /* TestI.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TestI.swift; path = test/Ice/retry/TestI.swift; sourceTree = "<group>"; }; + AAB25D7258209D619F6376D1 /* TestI.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TestI.swift; path = test/Ice/slicing/objects/TestI.swift; sourceTree = "<group>"; }; + AABD6035B79B6852EBF6A460 /* TestAMDI.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TestAMDI.swift; path = test/Ice/slicing/objects/TestAMDI.swift; sourceTree = "<group>"; }; + AC62CFA712B929BDCEBCFB6B /* SliceChecksums.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = SliceChecksums.cpp; path = ../cpp/src/Ice/SliceChecksums.cpp; sourceTree = "<group>"; }; + AD4098EC310F90065F58E268 /* ServerPrivateAMD.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = ServerPrivateAMD.ice; path = test/Ice/slicing/objects/ServerPrivateAMD.ice; sourceTree = "<group>"; }; + ADBFAB5D4E295192C5DA5D3D /* Instance.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Instance.cpp; path = ../cpp/src/IceSSL/Instance.cpp; sourceTree = "<group>"; }; + AE08479167FADF662AD41FB6 /* libIceDiscovery C++11 macOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libIceDiscovery C++11 macOS.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + AE2B43189A6D49AF626F7DA1 /* AppDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AppDelegate.swift; path = test/TestDriver/iOS/AppDelegate.swift; sourceTree = "<group>"; }; + AE4F9A2DBEDA32DCB3E60CD1 /* Convert.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = Convert.mm; path = src/IceObjc/Convert.mm; sourceTree = "<group>"; }; + AE912DDABEFC64751F3ACF12 /* IceProxy.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceProxy.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + AFD52DD0720A627BDA1842A8 /* IceStorm.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = IceStorm.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B0B9EA5E559A15DBFE57A278 /* Assets.xcassets */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = test/TestDriver/iOS/Assets.xcassets; sourceTree = "<group>"; }; + B0BDC7ABB450D5DCFB59EBCB /* LoggerWrapper.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LoggerWrapper.swift; path = src/Ice/LoggerWrapper.swift; sourceTree = "<group>"; }; + B0EC7FDB4F5FCF6C81624124 /* SliceEscape.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = SliceEscape.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + B131399750F43672CA389DF5 /* Value.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Value.cpp; path = ../cpp/src/Ice/Value.cpp; sourceTree = "<group>"; }; + B14DACBDF514B9BD2FC934DA /* FactoryTable.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = FactoryTable.cpp; path = ../cpp/src/Ice/FactoryTable.cpp; sourceTree = "<group>"; }; + B16B5759917633FF3D305B78 /* Key.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = Key.ice; path = test/Slice/escape/Key.ice; sourceTree = "<group>"; }; + B1ABFBA6618639D0436D60A6 /* IceStream.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceStream.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + B1AF5E85ED9A1F4414237EC8 /* Properties.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Properties.h; path = src/IceObjc/Properties.h; sourceTree = "<group>"; }; + B2E3B10FBA657C52E19BC44B /* CollocatedRequestHandler.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = CollocatedRequestHandler.cpp; path = ../cpp/src/Ice/CollocatedRequestHandler.cpp; sourceTree = "<group>"; }; + B2F7E5D229333C92C6146AC4 /* Test.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = Test.ice; path = test/Ice/facets/Test.ice; sourceTree = "<group>"; }; + B3B94C0C6FBAE34FC003740D /* ValueFactoryManagerI.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ValueFactoryManagerI.swift; path = src/Ice/ValueFactoryManagerI.swift; sourceTree = "<group>"; }; + B405F0A79A60C68C7D5FA6B6 /* NativePropertiesAdmin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NativePropertiesAdmin.swift; path = src/Ice/NativePropertiesAdmin.swift; sourceTree = "<group>"; }; + B497B16BCF0F6A55224FFDB0 /* Router.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = Router.ice; path = ../slice/Ice/Router.ice; sourceTree = "<group>"; }; + B4D1E5A8A8C48DEC0A0155EC /* Test.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = Test.ice; path = test/Ice/scope/Test.ice; sourceTree = "<group>"; }; + B516C25EE2AD4AA989A0C717 /* InputUtil.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = InputUtil.cpp; path = ../cpp/src/IceUtil/InputUtil.cpp; sourceTree = "<group>"; }; + B575236D078DC87353F74B3B /* Controller.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = Controller.ice; path = ../scripts/Controller.ice; sourceTree = "<group>"; }; + B5C1917BF4210D0F739E5084 /* WSTransceiver.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = WSTransceiver.cpp; path = ../cpp/src/Ice/WSTransceiver.cpp; sourceTree = "<group>"; }; + B69FB397DFE1E68FE87F0A52 /* ConnectionI.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConnectionI.swift; path = src/Ice/ConnectionI.swift; sourceTree = "<group>"; }; + B716BD86823CBA85EFEE6513 /* Registry.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = Registry.ice; path = ../slice/IceGrid/Registry.ice; sourceTree = "<group>"; }; + B84880E6735245A23A60D634 /* TestAMD.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = TestAMD.ice; path = test/Ice/operations/TestAMD.ice; sourceTree = "<group>"; }; + B8BDCF3B69B2E86939F9A57A /* OnewaysAMI.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = OnewaysAMI.swift; path = test/Ice/operations/OnewaysAMI.swift; sourceTree = "<group>"; }; + B8DEBAADD0B077756913BC0B /* ControllerI.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ControllerI.swift; path = test/TestDriver/iOS/ControllerI.swift; sourceTree = "<group>"; }; + B902634E3013F0F2161FF426 /* IceBinding.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceBinding.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + B912CA6E0A1F10F0DF6E9E77 /* Version.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = Version.ice; path = ../slice/Ice/Version.ice; sourceTree = "<group>"; }; + B923D26B7ACBD6A753291EF2 /* ServerAMD.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ServerAMD.swift; path = test/Ice/operations/ServerAMD.swift; sourceTree = "<group>"; }; + B9856CF3C6B1280A9EB49EA8 /* Server.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Server.swift; path = test/Ice/optional/Server.swift; sourceTree = "<group>"; }; + BA596A7278E6A5BE268759B0 /* Acceptor.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Acceptor.cpp; path = ../cpp/src/Ice/Acceptor.cpp; sourceTree = "<group>"; }; + BA9B294D0E2DAB2D585F71E6 /* IceExceptions.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceExceptions.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + BAEABBFF7FB0FB8BF7953AD0 /* AllTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AllTests.swift; path = test/Ice/retry/AllTests.swift; sourceTree = "<group>"; }; + BB75890D80B77241BDB185B2 /* Collocated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Collocated.swift; path = test/Ice/servantLocator/Collocated.swift; sourceTree = "<group>"; }; + BD3629FBA66A03B093AF336F /* ProcessI.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ProcessI.swift; path = src/Ice/ProcessI.swift; sourceTree = "<group>"; }; + BD3914845D38EA92426A1C87 /* IceSlicingExceptions.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceSlicingExceptions.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + BF1BCF9C50968F7FEB3324F6 /* UtilException.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = UtilException.cpp; path = ../cpp/src/IceUtil/UtilException.cpp; sourceTree = "<group>"; }; + BFBAEAB4EA096824A6EC790D /* Time.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Time.cpp; path = ../cpp/src/IceUtil/Time.cpp; sourceTree = "<group>"; }; + BFE0D57F8DD001E75530856B /* Exception.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Exception.swift; path = src/Ice/Exception.swift; sourceTree = "<group>"; }; + C00D91287CDA6E27D20C9D3A /* TestAMD.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = TestAMD.ice; path = test/Ice/exceptions/TestAMD.ice; sourceTree = "<group>"; }; + C06D8D06675BAF6E05DCBC8D /* Connector.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Connector.cpp; path = ../cpp/src/Ice/Connector.cpp; sourceTree = "<group>"; }; + C1CC2963FE8AC9E7D4159212 /* IceOperationsAMD.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceOperationsAMD.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + C2362DD1D9852CFEEBAED065 /* ConnectionInfoF.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = ConnectionInfoF.ice; path = ../slice/IceSSL/ConnectionInfoF.ice; sourceTree = "<group>"; }; + C24F2F8684AB0083CF401EAD /* Communicator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Communicator.h; path = src/IceObjc/Communicator.h; sourceTree = "<group>"; }; + C284BB2FB9EBB2B69001E4B1 /* Initialize.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Initialize.cpp; path = ../cpp/src/Ice/Initialize.cpp; sourceTree = "<group>"; }; + C284F41389035557B72DC921 /* ObjectAdapter.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = ObjectAdapter.mm; path = src/IceObjc/ObjectAdapter.mm; sourceTree = "<group>"; }; + C2F3779808DBC5ED79EEFBF0 /* IceDefaultServant.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceDefaultServant.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + C329F45DB1FD9E70F37C7823 /* PropertiesI.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PropertiesI.swift; path = src/Ice/PropertiesI.swift; sourceTree = "<group>"; }; + C416308864EF7F37BD16EF96 /* Object.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Object.swift; path = src/Ice/Object.swift; sourceTree = "<group>"; }; + C429BA52E5200E492155ADFB /* Thread.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Thread.cpp; path = ../cpp/src/Ice/Thread.cpp; sourceTree = "<group>"; }; + C4F874AD5EA2585BEB2788BD /* IceOptional.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceOptional.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + C534C5979A7D8B4B3752F9BE /* TestI.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TestI.swift; path = test/Ice/adapterDeactivation/TestI.swift; sourceTree = "<group>"; }; + C62FA99000CCECFFFBB3FFC3 /* Server.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Server.swift; path = test/Ice/timeout/Server.swift; sourceTree = "<group>"; }; + C724C0FEBE2CAFBA08989FB2 /* ProcessF.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = ProcessF.ice; path = ../slice/Ice/ProcessF.ice; sourceTree = "<group>"; }; + C7C5BFE9B16BF237E7782A4F /* Ice.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Ice.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C7F5F0B0B745C16310D6682D /* ObjectPrx.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = ObjectPrx.mm; path = src/IceObjc/ObjectPrx.mm; sourceTree = "<group>"; }; + C8BEAE2C49D0B45FB5BA67DC /* Client.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Client.swift; path = test/Ice/inheritance/Client.swift; sourceTree = "<group>"; }; + C8F45B78B8F03318158A9D56 /* Process.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = Process.mm; path = src/IceObjc/Process.mm; sourceTree = "<group>"; }; + C9B9DCE19FD35FC0F6AD1D4D /* Test.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = Test.ice; path = test/Ice/optional/Test.ice; sourceTree = "<group>"; }; + C9FE14B8B35538CF444B87FB /* Server.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Server.swift; path = test/Ice/invoke/Server.swift; sourceTree = "<group>"; }; + CAABDEC1B20906FA83353809 /* ServantLocator.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = ServantLocator.ice; path = ../slice/Ice/ServantLocator.ice; sourceTree = "<group>"; }; + CAAF3F145A79FCDEC66BAB27 /* IceInfo.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceInfo.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + CAC5452C269A362D8DCD26F3 /* SecureTransportCertificateI.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = SecureTransportCertificateI.cpp; path = ../cpp/src/IceSSL/SecureTransportCertificateI.cpp; sourceTree = "<group>"; }; + CAFA154DBD50B9604A7A7C59 /* LocalObject.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LocalObject.swift; path = src/Ice/LocalObject.swift; sourceTree = "<group>"; }; + CAFF8224F16416487A770A39 /* Client.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Client.swift; path = test/Ice/exceptions/Client.swift; sourceTree = "<group>"; }; + CBAE3F2B1229BBA66D21BABF /* TestI.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TestI.swift; path = test/Ice/scope/TestI.swift; sourceTree = "<group>"; }; + CCB7DD0A81B767D953903000 /* StringConverterPlugin.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = StringConverterPlugin.cpp; path = ../cpp/src/Ice/StringConverterPlugin.cpp; sourceTree = "<group>"; }; + CD259FE076F39EEBA1958C54 /* IceDiscovery.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = IceDiscovery.ice; path = ../slice/IceDiscovery/IceDiscovery.ice; sourceTree = "<group>"; }; + CD5BDD8CDC4198C5DBFD0372 /* PermissionsVerifierF.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = PermissionsVerifierF.ice; path = ../slice/Glacier2/PermissionsVerifierF.ice; sourceTree = "<group>"; }; + CD79CFE2812A7B6899EE5178 /* IceOptionalAMD.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceOptionalAMD.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + CE5804052FC5A96D221B8803 /* TestAMD.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = TestAMD.ice; path = test/Ice/proxy/TestAMD.ice; sourceTree = "<group>"; }; + CE99BACF0BE149F69F2AFBFA /* EndpointInfo.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = EndpointInfo.ice; path = ../slice/IceIAP/EndpointInfo.ice; sourceTree = "<group>"; }; + CEDF515DDF519A53EF31E84C /* Endpoint.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = Endpoint.ice; path = ../slice/Ice/Endpoint.ice; sourceTree = "<group>"; }; + CF988BCAAC25BA3D04487165 /* UdpTransceiver.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = UdpTransceiver.cpp; path = ../cpp/src/Ice/UdpTransceiver.cpp; sourceTree = "<group>"; }; + CFA93665AC82E5AE1150E268 /* Test.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = Test.ice; path = test/Ice/servantLocator/Test.ice; sourceTree = "<group>"; }; + CFAAE2F5B1D4A3050CD17E97 /* SysLoggerI.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = SysLoggerI.cpp; path = ../cpp/src/Ice/SysLoggerI.cpp; sourceTree = "<group>"; }; + D010B56A525D084DFD68EAC7 /* Router.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = Router.ice; path = ../slice/Glacier2/Router.ice; sourceTree = "<group>"; }; + D0A1C910BAD79CB90B4E3DC5 /* ImplicitContextI.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = ImplicitContextI.cpp; path = ../cpp/src/Ice/ImplicitContextI.cpp; sourceTree = "<group>"; }; + D0FF6202727A575BFDDD22A6 /* libIceLocatorDiscovery C++11 macOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libIceLocatorDiscovery C++11 macOS.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + D13112E740E095792FAEB984 /* main.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = main.swift; path = test/TestDriver/macOS/main.swift; sourceTree = "<group>"; }; + D14B4626FA64A1D3308CF7F9 /* EndpointInfoFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EndpointInfoFactory.swift; path = src/Ice/EndpointInfoFactory.swift; sourceTree = "<group>"; }; + D1904D537D8689AA15D64A62 /* Base64.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Base64.cpp; path = ../cpp/src/Ice/Base64.cpp; sourceTree = "<group>"; }; + D1AD8A96BB32FF7809DC6633 /* Protocol.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Protocol.cpp; path = ../cpp/src/Ice/Protocol.cpp; sourceTree = "<group>"; }; + D25B54329663D55F07676BA3 /* IceGrid.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = IceGrid.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D26ED3329E8CC06679C2F30D /* Server.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Server.swift; path = test/IceSSL/configuration/Server.swift; sourceTree = "<group>"; }; + D37E67061387971945F490E0 /* Client.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Client.swift; path = test/Ice/defaultValue/Client.swift; sourceTree = "<group>"; }; + D3CF8C8D7F56018E4B14BE90 /* ClassResolver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ClassResolver.swift; path = src/Ice/ClassResolver.swift; sourceTree = "<group>"; }; + D3EDEB5642C2CD4B0494A7E1 /* IceScope.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceScope.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + D4153C0A035AFF362A8D7A6E /* Server.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Server.swift; path = test/Ice/scope/Server.swift; sourceTree = "<group>"; }; + D4205FB1980ACE50C8CC937D /* RouterF.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = RouterF.ice; path = ../slice/Glacier2/RouterF.ice; sourceTree = "<group>"; }; + D54F27BBB79EC99E49FB8337 /* DefaultsAndOverrides.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = DefaultsAndOverrides.cpp; path = ../cpp/src/Ice/DefaultsAndOverrides.cpp; sourceTree = "<group>"; }; + D6292E700118F4E42B326819 /* Connection.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = Connection.ice; path = ../slice/Ice/Connection.ice; sourceTree = "<group>"; }; + D6421091C6D40F11387EB3C9 /* ViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ViewController.swift; path = test/TestDriver/iOS/ViewController.swift; sourceTree = "<group>"; }; + D6AE3AEEADC3C6C8E0FB3C93 /* Server.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Server.swift; path = test/Ice/facets/Server.swift; sourceTree = "<group>"; }; + D732E2E9FBBA59C3AABBF754 /* TcpAcceptor.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = TcpAcceptor.cpp; path = ../cpp/src/Ice/TcpAcceptor.cpp; sourceTree = "<group>"; }; + D7FFDBAD738CBAEAE9919A32 /* Mutex.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Mutex.swift; path = src/Ice/Mutex.swift; sourceTree = "<group>"; }; + D82FDA737E3962604D757B26 /* Client.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Client.swift; path = test/Ice/info/Client.swift; sourceTree = "<group>"; }; + D867147B89B651BF722206B5 /* Convert.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Convert.h; path = src/IceObjc/Convert.h; sourceTree = "<group>"; }; + D9C3123B69C3917E0A365577 /* TcpConnector.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = TcpConnector.cpp; path = ../cpp/src/Ice/TcpConnector.cpp; sourceTree = "<group>"; }; + D9CB1665FFC46CE91D4B9529 /* PluginI.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = PluginI.cpp; path = ../cpp/src/IceSSL/PluginI.cpp; sourceTree = "<group>"; }; + DAEA5CA5740117C6BC42907B /* Instrumentation.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = Instrumentation.ice; path = ../slice/Ice/Instrumentation.ice; sourceTree = "<group>"; }; + DB73E84768C9BEB4E05AC522 /* Test.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = Test.ice; path = test/Ice/invoke/Test.ice; sourceTree = "<group>"; }; + DBC747062704608D240AE0FE /* InstrumentationI.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = InstrumentationI.cpp; path = ../cpp/src/Ice/InstrumentationI.cpp; sourceTree = "<group>"; }; + DBFCC3CB5A23A85DE6AE2607 /* LocalExceptionDescription.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LocalExceptionDescription.swift; path = src/Ice/LocalExceptionDescription.swift; sourceTree = "<group>"; }; + DE9F16504D23B3F58D7AF4CA /* EndpointI.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = EndpointI.mm; path = ../cpp/src/IceIAP/EndpointI.mm; sourceTree = "<group>"; }; + E07B1A3C2B4A1C3215D88E4F /* libIceSSL C++11 macOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libIceSSL C++11 macOS.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + E1CE9F19AF6637FFEE12A205 /* ServerAMD.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ServerAMD.swift; path = test/Ice/slicing/objects/ServerAMD.swift; sourceTree = "<group>"; }; + E20AE7CD58914DDA97A83C88 /* Session.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = Session.ice; path = ../slice/Glacier2/Session.ice; sourceTree = "<group>"; }; + E2778EFD3BDF060F7D28FA43 /* IceAdmin.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceAdmin.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + E28EA8C2C7AA96A782A5AD34 /* Client.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Client.swift; path = test/Slice/escape/Client.swift; sourceTree = "<group>"; }; + E3056C5DA712F55A97B05A44 /* ConnectionInfoFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConnectionInfoFactory.swift; path = src/Ice/ConnectionInfoFactory.swift; sourceTree = "<group>"; }; + E316B5856061FE815785CB34 /* IceSlicingObjectsAMD.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceSlicingObjectsAMD.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + E325A4076B7D2F2EF9D33266 /* Reference.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Reference.cpp; path = ../cpp/src/Ice/Reference.cpp; sourceTree = "<group>"; }; + E368CACB974FFFFD22404B7D /* Test.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = Test.ice; path = test/Ice/acm/Test.ice; sourceTree = "<group>"; }; + E3E604B3B94EAAC2109E4D82 /* ImplicitContextI.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImplicitContextI.swift; path = src/Ice/ImplicitContextI.swift; sourceTree = "<group>"; }; + E4C6A05E68524E4013034DC9 /* IceServantLocatorAMD.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceServantLocatorAMD.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + E4E251AABEC70AA1739E5859 /* IceHold.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceHold.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + E4FC64A9E74B4DBB9C9A057C /* BlobjectFacade.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = BlobjectFacade.mm; path = src/IceObjc/BlobjectFacade.mm; sourceTree = "<group>"; }; + E628FC93DBC978079A724FF4 /* Collocated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Collocated.swift; path = test/Ice/inheritance/Collocated.swift; sourceTree = "<group>"; }; + E662BDACBA5DA47F7B5E0D04 /* TestI.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TestI.swift; path = test/Ice/proxy/TestI.swift; sourceTree = "<group>"; }; + E797BF17140520C3290ABFDC /* Collocated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Collocated.swift; path = test/Ice/adapterDeactivation/Collocated.swift; sourceTree = "<group>"; }; + E7DFD245235F517B54CBF4C5 /* IceSlicingExceptionsAMD.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceSlicingExceptionsAMD.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + E9040853D6AAE90134F12ED0 /* Test.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = Test.ice; path = test/Ice/defaultServant/Test.ice; sourceTree = "<group>"; }; + EA64C24E633066EA27760C88 /* StringUtil.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = StringUtil.cpp; path = ../cpp/src/IceUtil/StringUtil.cpp; sourceTree = "<group>"; }; + EAA4A859A9283C6D0B233CAE /* Server.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Server.swift; path = test/Ice/admin/Server.swift; sourceTree = "<group>"; }; + EAD5CB65C9E749E09CE7AAEA /* Ice.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Ice.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + EAF1350F67CE8D3A4348F3E9 /* Client.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Client.swift; path = test/Ice/scope/Client.swift; sourceTree = "<group>"; }; + EB02E1C1762AA015913AF071 /* Test.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = Test.ice; path = test/Ice/slicing/exceptions/Test.ice; sourceTree = "<group>"; }; + EB0FE3041559F39854E345D2 /* IceBinding.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceBinding.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + EBA8930E4AC4EAFC06311651 /* AllTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AllTests.swift; path = test/Ice/timeout/AllTests.swift; sourceTree = "<group>"; }; + EC4F7DC4FDFB8038EDA83A45 /* IceAmi.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceAmi.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + EC6866FE232C1865E7517BBD /* UnsupportedAdminFacet.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UnsupportedAdminFacet.h; path = src/IceObjc/UnsupportedAdminFacet.h; sourceTree = "<group>"; }; + ECC5EC846C89881FB2C4772A /* RecMutex.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = RecMutex.cpp; path = ../cpp/src/IceUtil/RecMutex.cpp; sourceTree = "<group>"; }; + ED07FE8864F33CBDEC73EA98 /* TestCommon.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = TestCommon.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + ED2B0C01FC9F33222506FD38 /* RetryQueue.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = RetryQueue.cpp; path = ../cpp/src/Ice/RetryQueue.cpp; sourceTree = "<group>"; }; + ED2FACB490C9A2EC5A501FB9 /* Test.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = Test.ice; path = test/Ice/retry/Test.ice; sourceTree = "<group>"; }; + EDDEF36D017621261C2520D4 /* AllTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AllTests.swift; path = test/Ice/defaultValue/AllTests.swift; sourceTree = "<group>"; }; + EDF8E5A8A5004B676A0BDF25 /* OSLogLoggerI.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = OSLogLoggerI.cpp; path = ../cpp/src/Ice/OSLogLoggerI.cpp; sourceTree = "<group>"; }; + EE718247E5207FBE81F7C1CD /* FactoryTableInit.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = FactoryTableInit.cpp; path = ../cpp/src/Ice/FactoryTableInit.cpp; sourceTree = "<group>"; }; + EEA3F903D78E2993FA6F98DD /* FileUtil.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = FileUtil.cpp; path = ../cpp/src/IceUtil/FileUtil.cpp; sourceTree = "<group>"; }; + EEB098A839D1FB6F143DD5B3 /* Process.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Process.h; path = src/IceObjc/Process.h; sourceTree = "<group>"; }; + EEB80E71EB7BE144DED9D320 /* Client.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Client.swift; path = test/Ice/stream/Client.swift; sourceTree = "<group>"; }; + EF3F99A20C0C32083637ECBA /* Oneways.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Oneways.swift; path = test/Ice/operations/Oneways.swift; sourceTree = "<group>"; }; + EF5E76091B28D91259A24A57 /* IceSSLConfiguration.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceSSLConfiguration.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + F0793AF8CBDD07CA59ED7EED /* InitializationData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = InitializationData.swift; path = src/Ice/InitializationData.swift; sourceTree = "<group>"; }; + F07BAE3EB07F426600EE9C4C /* IceSlicingObjects.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceSlicingObjects.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + F082C6550B7B297C967623CB /* Glacier2Swift.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Glacier2Swift.h; path = src/Glacier2/Glacier2Swift.h; sourceTree = "<group>"; }; + F166F176384EC5B63F51A139 /* Client.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Client.swift; path = test/Ice/objects/Client.swift; sourceTree = "<group>"; }; + F1D9A1622A7CDA70227F3E60 /* TestI.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TestI.swift; path = test/Ice/servantLocator/TestI.swift; sourceTree = "<group>"; }; + F2500E02186D763BCC5F8462 /* certs */ = {isa = PBXFileReference; includeInIndex = 1; name = certs; path = ../certs; sourceTree = "<group>"; }; + F3616E470DCD0FDC827CB001 /* ConnectionFactory.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = ConnectionFactory.cpp; path = ../cpp/src/Ice/ConnectionFactory.cpp; sourceTree = "<group>"; }; + F3CDBED8B141B3FE3A6AB8E2 /* AllTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AllTests.swift; path = test/Ice/binding/AllTests.swift; sourceTree = "<group>"; }; + F418D0D53F5E126F2F44C0C7 /* IceStormSwift.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IceStormSwift.h; path = src/IceStorm/IceStormSwift.h; sourceTree = "<group>"; }; + F4BE441730E27358FD5FD7F9 /* ArgVector.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = ArgVector.cpp; path = ../cpp/src/Ice/ArgVector.cpp; sourceTree = "<group>"; }; + F57A0472503DA95892ED6B14 /* PropertiesF.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = PropertiesF.ice; path = ../slice/Ice/PropertiesF.ice; sourceTree = "<group>"; }; + F62C515D81B4ECC1B8F7ECC2 /* ServantManager.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = ServantManager.cpp; path = ../cpp/src/Ice/ServantManager.cpp; sourceTree = "<group>"; }; + F678EA062EF28FA715CCFB1F /* IceGrid.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = IceGrid.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F6AF11149756D4636F97B86E /* LocalObject.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = LocalObject.mm; path = src/IceObjc/LocalObject.mm; sourceTree = "<group>"; }; + F710AFF41CDFAE9BFAFCF1AE /* StreamTransceiver.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = StreamTransceiver.cpp; path = ../cpp/src/Ice/ios/StreamTransceiver.cpp; sourceTree = "<group>"; }; + F8818172CC090594D16C576F /* TestI.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TestI.swift; path = test/Ice/acm/TestI.swift; sourceTree = "<group>"; }; + F9280444D95F2CDCB505570B /* Logger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Logger.h; path = src/IceObjc/Logger.h; sourceTree = "<group>"; }; + F96132367DF285FBBC548D6D /* EndpointI.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = EndpointI.cpp; path = ../cpp/src/IceSSL/EndpointI.cpp; sourceTree = "<group>"; }; + F9C53C5323A0B0F56DD82A34 /* IceOptionalAMD.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceOptionalAMD.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + FABD6EB0E182EA49D4B5766E /* OutputStream.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = OutputStream.cpp; path = ../cpp/src/Ice/OutputStream.cpp; sourceTree = "<group>"; }; + FB1070ED2615D46D7FDFD027 /* ACM.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = ACM.cpp; path = ../cpp/src/Ice/ACM.cpp; sourceTree = "<group>"; }; + FB37603A7E1259106EF33F05 /* IceServantLocatorAMD.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceServantLocatorAMD.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + FB3C559B17046F98ED28C5E3 /* EndpointInfo.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = EndpointInfo.ice; path = ../slice/IceSSL/EndpointInfo.ice; sourceTree = "<group>"; }; + FB43A00D955B0F7E08FDD3DA /* Server.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Server.swift; path = test/Ice/retry/Server.swift; sourceTree = "<group>"; }; + FB44DA5C88EAA290CACFCFA8 /* LookupI.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = LookupI.cpp; path = ../cpp/src/IceDiscovery/LookupI.cpp; sourceTree = "<group>"; }; + FCD76BA365CFA076EF297D33 /* IceAcm.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceAcm.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + FD05C8DE3492FA4593406C28 /* Cond.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Cond.cpp; path = ../cpp/src/Ice/Cond.cpp; sourceTree = "<group>"; }; + FD6AE2FCE004CAB6C3E812A2 /* TestI.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TestI.swift; path = test/Ice/udp/TestI.swift; sourceTree = "<group>"; }; + FD8F93A83F1728798AEE0123 /* Exception.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = Exception.ice; path = ../slice/IceGrid/Exception.ice; sourceTree = "<group>"; }; + FE64D8105AAAEB060E6FA33A /* BuiltinSequences.ice */ = {isa = PBXFileReference; includeInIndex = 1; name = BuiltinSequences.ice; path = ../slice/Ice/BuiltinSequences.ice; sourceTree = "<group>"; }; + FE7B04C969E7050D512F2D2C /* CertificateI.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = CertificateI.cpp; path = ../cpp/src/IceSSL/CertificateI.cpp; sourceTree = "<group>"; }; + FF1FEDDF3C0289312B958ED2 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = Info.plist; path = src/Ice/Info.plist; sourceTree = "<group>"; }; + FF2E3A220AC9E9A060DB583D /* Client.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Client.swift; path = test/IceSSL/configuration/Client.swift; sourceTree = "<group>"; }; + FF89BCFE1E4D3CD34C34AAA6 /* Blobject.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Blobject.swift; path = src/Ice/Blobject.swift; sourceTree = "<group>"; }; + FFB017C2AB2174BF2CA9A97C /* IceAmi.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.plug-in"; includeInIndex = 0; path = IceAmi.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 00DE134AEEA7850EFC3B0284 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 92D939B7670E1DD3E9625AFF /* Cocoa.framework in Frameworks */, + DDEBA4CD5CC5FC970E32ACFF /* Ice.framework in Frameworks */, + F1C40512D22EF6C052307B1F /* PromiseKit.framework in Frameworks */, + E3D59F94B3519EFE6378B6E1 /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 0B33EA77011771D01E94D361 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 031A03370342CCA7EA4F0D21 /* Foundation.framework in Frameworks */, + 32CD6BCD5B098639116B1684 /* Ice.framework in Frameworks */, + 5C97D9809BC1659981752BA5 /* PromiseKit.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 0CB26E2169B00F7A2DB0B1C0 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + D8BB3861C360B8A229B7AA09 /* Ice.framework in Frameworks */, + 5643CBF2AFE561F3683CBFBF /* PromiseKit.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 0E5061AC7563252F1744C867 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 6829B3EF213B36B32479AE63 /* Cocoa.framework in Frameworks */, + F9AD157E7B432A7C94138F6B /* Ice.framework in Frameworks */, + EED43C947F3C3AA3D0CCC401 /* PromiseKit.framework in Frameworks */, + 4325F2FBF734D0968FE602F8 /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 106A499DADD9733D02C52CAA /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 85260B1BAA3C3A090CCF322F /* Foundation.framework in Frameworks */, + 3CD3BA291DC97FF1343B4782 /* Ice.framework in Frameworks */, + DE82988643B9F7B575E199AF /* PromiseKit.framework in Frameworks */, + 9DBF6AFA41514D6CA9696830 /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 1352FC68CDEE267EB716E9E4 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 6A4BF76C9DE975198692DBA7 /* Foundation.framework in Frameworks */, + 9F6B8F7B2A7074C47FC04A5A /* Ice.framework in Frameworks */, + 2D6A4EB56775C3B7563AF148 /* PromiseKit.framework in Frameworks */, + C7D97113E9F0D2DBB37FA8FD /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 13CFDDFD32597145E0B217EB /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + DEC041C6A42ECDFCF6463C45 /* Cocoa.framework in Frameworks */, + C129B21F50D609E3AA10E979 /* Ice.framework in Frameworks */, + 92530902D41DEB7AD9D9758C /* PromiseKit.framework in Frameworks */, + 146F1E57A7DB216D955FF8B1 /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 18B84A60A5A0DFC4F8B9566B /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + D72B3E9A0AC151E20F01351F /* Cocoa.framework in Frameworks */, + EE1019B8FD2D7B42A1E62BCA /* Ice.framework in Frameworks */, + 4E437742D8D03D13CBB3BEEF /* PromiseKit.framework in Frameworks */, + 158C2D497FCAA36F4A1CCC7D /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 18EEE5291CDB174FA1B0BB0F /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 1D6E4A51FFB99C028FB6D16B /* Foundation.framework in Frameworks */, + 30D850BB0D43BF80FAA96EB9 /* Ice.framework in Frameworks */, + 9E1EC10BC9D455EB037A91AC /* PromiseKit.framework in Frameworks */, + EB3E54130E017A1F4191FA7E /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 19A57BCB2F446B5D55BD7465 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 0CAD7BA690D2A96B34323761 /* Foundation.framework in Frameworks */, + 472756F8F6AF3045877622D2 /* Ice.framework in Frameworks */, + 3AF718A41FCC7BA4BC9940A9 /* PromiseKit.framework in Frameworks */, + 8290741F20C410FF4AFD1A9E /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 19C6B387C000675B51A3047B /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + BA7C8DFB343268372830B7E6 /* Foundation.framework in Frameworks */, + 7458F2B38AE7A3BE562877E0 /* Ice.framework in Frameworks */, + A2D141C00BEC64530F12F5B3 /* PromiseKit.framework in Frameworks */, + 1DEF6854F6E2CF77BB08EF36 /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 1A5CA61747173EF52149A68E /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + FCFFBA5D919987DAAF2B306E /* Cocoa.framework in Frameworks */, + FCB8A67BC3205C2C9D67018A /* Ice.framework in Frameworks */, + CA726720358ED2EF89D2A1C8 /* PromiseKit.framework in Frameworks */, + E6DD99F1CFFCC1EC030082B5 /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 1AD8035A119DED01BD9D1DB9 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 2A7CD5CB6A1392FA3E4E3CC6 /* Cocoa.framework in Frameworks */, + 02C0FD25090FAA6FAD92D379 /* Ice.framework in Frameworks */, + 47F6265D635DFB3B62F94E42 /* PromiseKit.framework in Frameworks */, + 9A71491654FFEEB17023FA21 /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 1EB688C3976B4168BEDE0805 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2046609F666199A5EB78F407 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + FEFC05E029F17386D3C15028 /* CFNetwork.framework in Frameworks */, + 008369161442731D9EC369FD /* ExternalAccessory.framework in Frameworks */, + AD0BFCFC01E600EE7A0B2DC8 /* Foundation.framework in Frameworks */, + A1D7D32DE43F49C7AE392228 /* libIce C++11 iOS.a in Frameworks */, + FFF894BFFF469F10FDED53B8 /* libIceDiscovery C++11 iOS.a in Frameworks */, + 6009DBD9F0EEACD989516C02 /* libIceIAP C++11 iOS.a in Frameworks */, + 5DB33DB72F162E3B9AAEE803 /* libIceLocatorDiscovery C++11 iOS.a in Frameworks */, + 69301D084823E78DE5E7600B /* libIceSSL C++11 iOS.a in Frameworks */, + 4D083E45D9D92E5EDB084EBB /* PromiseKit.framework in Frameworks */, + C33C394F5D01418D23748BF9 /* Security.framework in Frameworks */, + 6094E8C3EB03DA47FBDFFF34 /* UIKit.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 221F3554BDFEA722A83B9BC2 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 03786D1E7F5714D1A72C7CA8 /* Cocoa.framework in Frameworks */, + 703DB76D7039FB94251EE761 /* Ice.framework in Frameworks */, + C1D0F3E087DE0D10B61D62D6 /* PromiseKit.framework in Frameworks */, + AEFD42734D5DC29769433DE5 /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 229D7F72384501F104317CC4 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + DCC6F528E224819731AB4850 /* Foundation.framework in Frameworks */, + 9B5E2668C04862999733DDDE /* Ice.framework in Frameworks */, + B08AA6E08D8637BE9D9EAEF1 /* PromiseKit.framework in Frameworks */, + F41FCABFE56A38C3B8C67ED2 /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2382030E79E75B7CD094A826 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + E5760FF8E34038AF8F79B906 /* Foundation.framework in Frameworks */, + 7E1EF352BDB791A380BADF3A /* Ice.framework in Frameworks */, + E85DFD44CC056CA3CE19ED4E /* PromiseKit.framework in Frameworks */, + 1CC7B3E3BB8C38C1C8B2CD60 /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 24D46C5133819D2A67A425AF /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 2B6BE46EAE186B342433147A /* Foundation.framework in Frameworks */, + 1FCE7CBF751B81D1BFCAED5B /* Ice.framework in Frameworks */, + 020DD1C698232DD062033D93 /* PromiseKit.framework in Frameworks */, + E1C52CC83224353BBFD42E0D /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 28BA277A191684B92F5157EA /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 8B9CAD919655934C047AD80E /* Foundation.framework in Frameworks */, + B8B1A1EE6812CEB8EE69D2C2 /* Ice.framework in Frameworks */, + 4D74CBB8B12C803F03301210 /* PromiseKit.framework in Frameworks */, + 4869D084A5F1EC37A25934B1 /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 28DFC23BB832FAC086255E20 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + D9A3FAD5DFC57CF06B8085F4 /* Foundation.framework in Frameworks */, + 032834A166B038BD0C6970A1 /* Ice.framework in Frameworks */, + 158CB2EFA55A9FB86FD42000 /* PromiseKit.framework in Frameworks */, + B8B3BC297606287AA77DBBDB /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2CCEA44A88FD8AC2BD42BA52 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 59DE85167CF3FEF96E5F046B /* Cocoa.framework in Frameworks */, + 7DC1E34AC15810DB16B0E07C /* Ice.framework in Frameworks */, + AB2876F1070F5F007BF822CC /* PromiseKit.framework in Frameworks */, + 27A11B123332BDF8E82E599A /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2F2732140FD94AD0DBA7D608 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 659B355C5F280786F631BE96 /* Cocoa.framework in Frameworks */, + 8731649E5AF2C80585387869 /* Ice.framework in Frameworks */, + 8FF381BC2F390D9F8C387ECF /* PromiseKit.framework in Frameworks */, + F0EFCD27C8167E3C6B1AED05 /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2F789686A76AD1A271F21086 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + A0F1E181DB84DE1FCFD19F1F /* Cocoa.framework in Frameworks */, + 7D4318A3E025C195FD895715 /* Ice.framework in Frameworks */, + 0C4860AB335A52D97CB526E9 /* PromiseKit.framework in Frameworks */, + 78D602F8C0B7F22E8DC68A7B /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 31251005FB98579EF64C7206 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 5CF6E1C0D7C7B74A41905FE2 /* Foundation.framework in Frameworks */, + 58D8C01D2312F61667F445A8 /* Ice.framework in Frameworks */, + F3CF5296AFBED1ED60792F9A /* PromiseKit.framework in Frameworks */, + 1D2478994B03EDF7146CFB2C /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 32D44846A344A21CB7507478 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 5B16CF583CF07545C4912E03 /* Foundation.framework in Frameworks */, + 43C19AEB0B3F9E6416E2594B /* Ice.framework in Frameworks */, + 00C861F27E8429FA1DD5B178 /* PromiseKit.framework in Frameworks */, + 387A65A799F2EF13F0B82077 /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 348933A76DE90C82A54B54FD /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 71B24597A087E92089831760 /* Foundation.framework in Frameworks */, + C5159068A48261BDA2836154 /* Ice.framework in Frameworks */, + D6A03A49AC62A8ABFB7B8F68 /* PromiseKit.framework in Frameworks */, + CE483CB090B41A6286D64F20 /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 3A6BDB2178C55BABC9342558 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 3AA3A12CA79E077C330AF1B4 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + B73330E7CA1FD5C37214D06C /* Cocoa.framework in Frameworks */, + CC9F27F4225AADC6D8FBF086 /* Ice.framework in Frameworks */, + 45FD9BF763EAF0044BBC740C /* PromiseKit.framework in Frameworks */, + 6E4CEA885B8C06FEA28BF72C /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 3F3A511AC8BAB749D5D33A9E /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4159387D8BD0D3B83B6F163C /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + CDB467D814F5BC5EB800CC4A /* Foundation.framework in Frameworks */, + A967AB8FFE8972130A8CA8A6 /* Ice.framework in Frameworks */, + D281500701F1BBF34D9B4783 /* PromiseKit.framework in Frameworks */, + 858663DD2376A3A1958E3C2F /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 459022E5F2565BDE4E5EE06F /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + BC71C0B94CDF119759F30372 /* Cocoa.framework in Frameworks */, + DC5F96D65C893836C550C166 /* Ice.framework in Frameworks */, + 7986B86A2F2FE940ED8ED6E1 /* PromiseKit.framework in Frameworks */, + C602E98027E2BA03AA5ACD5F /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 470A644AB18F3ED32DB5707A /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 41714FBF491300715EA0CDCC /* Foundation.framework in Frameworks */, + F234DA35494C35ECC3ED8474 /* Ice.framework in Frameworks */, + CCCD001B05A56979E761F1F7 /* PromiseKit.framework in Frameworks */, + 3C6989E63E19B0829AEF1C91 /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 487678C7744916670622E04E /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + D1A399FA2ADF5FCC1B211A0F /* Glacier2.framework in Frameworks */, + 8296C9B7C6A6EFF8AC71E731 /* Ice.framework in Frameworks */, + CFD20216CA7515A33C9AB538 /* PromiseKit.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4933D997F6A55CFC2FF39A87 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4FDDF4A178B311F588D85ECB /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 413B4371F3F346A7889D4E76 /* Cocoa.framework in Frameworks */, + 8260860CB12C8EC8A3FA06F0 /* Ice.framework in Frameworks */, + 8B69E85502B7E4CA12359F4D /* PromiseKit.framework in Frameworks */, + 4BB25E9875B3FFE18C1D71E7 /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 534009FA9DB5BE498320D87A /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 027745F1DBC32B76E1566181 /* Cocoa.framework in Frameworks */, + 2CB30F36C8F8F14A84179776 /* Ice.framework in Frameworks */, + 61D99EF9C8FC814621B8E601 /* PromiseKit.framework in Frameworks */, + 6009F305F55EAE280CCA07A7 /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 55988C16065B29DFFBC3CC10 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 582590179E393196353F25FA /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 7178C08E2172BAB299EDCDB9 /* Foundation.framework in Frameworks */, + BE0E74ECEC7D652DF3D83F68 /* Ice.framework in Frameworks */, + 766FCB8EBA8556D204DBB398 /* PromiseKit.framework in Frameworks */, + F9832EEB94851402D7B1C5EB /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 5A2C3D7DA533E23F5D70A233 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 5ADB36B3ACBAF5E9E6CB32FB /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 6E6B3F1AAFDDE04D4F1DCA2A /* Cocoa.framework in Frameworks */, + 82B147E53A6A1B26D83AED95 /* Ice.framework in Frameworks */, + FE5A115CEE232164BFF0363D /* PromiseKit.framework in Frameworks */, + 8D057CA16BD9526346EAB822 /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 611ABD3D72607D13630EC1E9 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 0BDC6A6BAB50225B11E76532 /* Cocoa.framework in Frameworks */, + 928A899C3EAFD3259D77A4AE /* Ice.framework in Frameworks */, + 39750DF2B490D70B5E2B6AE7 /* PromiseKit.framework in Frameworks */, + 190664DCC1D588091A49299F /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 61E1E58E48143C6820508FE8 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 72070D52D233C5A9281C6D73 /* Foundation.framework in Frameworks */, + 973F141CE455CA2119C25248 /* Ice.framework in Frameworks */, + 0E52F9340F71FDFB58296FE6 /* PromiseKit.framework in Frameworks */, + 3E9A9D57AAC55D492E9DFB7B /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 67A7692B858A0D1BF98D73D7 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 7AF309B19BDED2A302FCD17F /* Foundation.framework in Frameworks */, + FA6C79BB9B9A24E7EB0F4DC2 /* Ice.framework in Frameworks */, + CC266D6F9FDF8CBC6CAE88AC /* PromiseKit.framework in Frameworks */, + 6C07A974D2C91C8C66346173 /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 6A3B9633885D2D65C1D43D7B /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 3B1ED7DCDED985B4A4AC2296 /* Foundation.framework in Frameworks */, + 221DD011A9B36293C7552A25 /* Ice.framework in Frameworks */, + 99BF17F52FC25AC7F396CF1A /* PromiseKit.framework in Frameworks */, + 59D3F28DE359935FF8C71F01 /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 6BA327C2DE5B78CBAF40A507 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + EEBAAF3FB8E57976D32B583A /* Foundation.framework in Frameworks */, + B19BA4F6E443BD74DE0D588B /* Ice.framework in Frameworks */, + D95BDCE671EA7347039F075C /* PromiseKit.framework in Frameworks */, + 6B1F3F9F830EEA2F18C82454 /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 6E98D219122ECA2DDF030542 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 4315DFE7AD8816EC8FBC5EBB /* Foundation.framework in Frameworks */, + 4F48E8C0EC30D4C1ECC1930B /* Ice.framework in Frameworks */, + 5A61980801E4A4F72C41CB83 /* PromiseKit.framework in Frameworks */, + B71070BEF1C56AF5B5E4329B /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 6FA2AD9F7839DEB3CDA3E4FE /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 556EA7DE34216B7709BAB660 /* Cocoa.framework in Frameworks */, + BD10E9FEC5521BCB2A2C2609 /* Ice.framework in Frameworks */, + 3F5507D34CE969B1CEFDEDC7 /* PromiseKit.framework in Frameworks */, + F6DA8AE53A51E0147B510B37 /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7595631B46D38AF15FB1D851 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 478526E7674CA822E45C215A /* Cocoa.framework in Frameworks */, + 82F367187335A7186BBB4A4D /* Ice.framework in Frameworks */, + ED3B059FE481DA09507CA347 /* PromiseKit.framework in Frameworks */, + E17F4BA619279E7CD782555F /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7995BE5E19599C1FA781CE2E /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + E884C1142C542285159BF065 /* Foundation.framework in Frameworks */, + 735F789552BD9520573AD89E /* Ice.framework in Frameworks */, + 84D4AA4F315D5EB64044D6D9 /* PromiseKit.framework in Frameworks */, + 8B7FA1C907BA9E87BB19FD7A /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7A938FF93C08B0FFA25906F7 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 92559FD2CDD8C2CB0D1F65E4 /* Cocoa.framework in Frameworks */, + BCE2D7C7C43F34E5D87B934F /* Ice.framework in Frameworks */, + C440A3996F5BB066DADEC3B6 /* PromiseKit.framework in Frameworks */, + 17707E3099D207F2770C9392 /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7C4DF7A80D7FB5BBA70BB904 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7CCAC59CCC1C20224E4C9295 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 86D41F23A527D64B2C4187DD /* Cocoa.framework in Frameworks */, + 12E93D7EF859AF5233347937 /* Ice.framework in Frameworks */, + 0A652B9275FAED3946293AF2 /* PromiseKit.framework in Frameworks */, + 1DA2A12433FFD2A5DFBACDD2 /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7E8F9EE7330374763485CA34 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ECB9B4DD217E6144F794F0F1 /* Foundation.framework in Frameworks */, + D6D6210548C1AA617404A57D /* Ice.framework in Frameworks */, + 1E32F5E12050940ADBF48B63 /* PromiseKit.framework in Frameworks */, + 78C540B138FF5472375778E9 /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7FC2A18C3FE6CD24C564303C /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + EA88EE939CA30F09A72108FA /* Cocoa.framework in Frameworks */, + F3FC57510F5E4F1D0F1A2B47 /* Ice.framework in Frameworks */, + 5E46C0F29156BFAF06209FAD /* PromiseKit.framework in Frameworks */, + AE0EF2671CC51DC1710A086B /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 80407A8AE2A813EDFD4EEA41 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + FD7381B92F7FF0C8EB8E1083 /* Cocoa.framework in Frameworks */, + 15C2E4C12F7C67F48A32DC0A /* Ice.framework in Frameworks */, + 57CF5F21D32E018865CF525A /* PromiseKit.framework in Frameworks */, + B61D0D8AF61C44AFC3DF8714 /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 834E44D226629D2DBC477166 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 83D4183FCE5BC06A66C996EE /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + A74A787834229ACFAF304968 /* Foundation.framework in Frameworks */, + 28A6440C0E30ACD1FC3501F9 /* Ice.framework in Frameworks */, + 5128F3BCF9252D039A40B3E7 /* PromiseKit.framework in Frameworks */, + 9E1BBEE1881CE45898C118AA /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 8915E461197054BA2C765FB4 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 3A5A3F0F1C5A7B9DEEA6A68C /* Cocoa.framework in Frameworks */, + 8293738748B5C99D3F2242E9 /* Ice.framework in Frameworks */, + 8A4E2D7C5856755FDE340FF5 /* PromiseKit.framework in Frameworks */, + 8C8E5292824134178FDC78ED /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 8A270B0FFD77017714CEED0F /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 99AF3D2AF2A9F18BAA2096CD /* Cocoa.framework in Frameworks */, + 116A2D9083F126E7810679C3 /* Ice.framework in Frameworks */, + 339B38347D04907C87694EB6 /* PromiseKit.framework in Frameworks */, + 84EF9CF799CC859BF3F546E1 /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 8CA7952419387DD0FBB0D2A6 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + EFCB85A84164A6029687ACE6 /* Cocoa.framework in Frameworks */, + C2C3B4D7EEBD218FBD610EAC /* Ice.framework in Frameworks */, + D80B5EC632C9216669A33CB9 /* PromiseKit.framework in Frameworks */, + 5E30CB29C8D764331A449536 /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 8E082CECC815282113FA030A /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + A809FFB0B8C078098B22F387 /* Cocoa.framework in Frameworks */, + 9D5AAD7817CC09882672DB34 /* Ice.framework in Frameworks */, + D75D5118E74F92988F8D6455 /* PromiseKit.framework in Frameworks */, + D2D0D3AF33FC4DA180E35200 /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 8E694883749FC94938D33872 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 37ACBA61D40679F130362D3B /* Ice.framework in Frameworks */, + F98E34651E77EB2FCEF763FC /* PromiseKit.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 8F08D0A93FD5DD0208CAD2E3 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 39C836F272F0C12E603F709E /* Foundation.framework in Frameworks */, + 30FA46ECC55C45C83506973B /* Ice.framework in Frameworks */, + D2E59F673EE562CB04E8A960 /* PromiseKit.framework in Frameworks */, + EAC75541999D2D29F3BD295A /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 8F4D0BA79962A7F9407F3F1B /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 6C536537263B26C2832DDEF0 /* Foundation.framework in Frameworks */, + 0A64DDAA19493DC1A1FA216B /* Ice.framework in Frameworks */, + 8F26F3F88C26D3B635AFD9F8 /* PromiseKit.framework in Frameworks */, + 3D52FB6CAF2405D5EB36ACE0 /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 8F751BCAE07FDFEB1B7CB132 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 0BBE7D0E1F9EB821F6C2937D /* Foundation.framework in Frameworks */, + 2270105FD23484AD7E635144 /* Ice.framework in Frameworks */, + E5DDC56719403647F95713E5 /* PromiseKit.framework in Frameworks */, + 1A365B98B8FF8BCA7892AE51 /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 8F82ACBDECEAD662103746C3 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + DAE9E08C575E18C9F278EB47 /* Ice.framework in Frameworks */, + CDC46E7D421DAE31D05671DF /* PromiseKit.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 9401830514081CB1DBAC4E8C /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + A4D1AD4FEEA398BE9C53B3E6 /* Foundation.framework in Frameworks */, + 24591C7ACEC9152A4FE77151 /* Ice.framework in Frameworks */, + 01781FB36D41AF431EEFC443 /* PromiseKit.framework in Frameworks */, + 0746EACEBC040C979978D405 /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 992651DE79561CD58A3D0BF8 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 1B9F8CF25A8088376A00E78B /* Cocoa.framework in Frameworks */, + F933C7B50E71AA3B80BD5550 /* Ice.framework in Frameworks */, + 4FB58E90DE9A41CAC7C87895 /* PromiseKit.framework in Frameworks */, + 02B9EB5AEC8D04F88ECD607F /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + A08B58E98E2EEB6B3B59AA7F /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 9465368AE598309A56B969C7 /* Foundation.framework in Frameworks */, + 9C4FD0A3E3F69C57B1EDA21E /* Ice.framework in Frameworks */, + 6384AB03874F8E0CD99C1F26 /* PromiseKit.framework in Frameworks */, + B6734F9EF43EDB853AB9671F /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + A534DEB57F0DC8A8A048894E /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + FB1F69FAFC2685C632BFD136 /* Foundation.framework in Frameworks */, + 0ABC0357FAC38F4628588F3D /* Ice.framework in Frameworks */, + FBE2CF68467E20CDA7BCC55A /* PromiseKit.framework in Frameworks */, + 3A39E3AA6732B844613175F0 /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AD191DE73396141DB758B17D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AEEBC552010F13ECE54FD609 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 9D3FAB553BD6EB839E51838F /* Foundation.framework in Frameworks */, + 90EB201396CE6388F6656751 /* Ice.framework in Frameworks */, + 3114BB4DA90C803B1164C1CD /* PromiseKit.framework in Frameworks */, + D2D99B339D6DF21E7F9FC79C /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AF99C4067403F6C7848F75A7 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 57B22896EECBD24C68893AD6 /* Cocoa.framework in Frameworks */, + 3EBC59998901A8C51AD3E9CD /* Ice.framework in Frameworks */, + 116D0ECFA5FC8EAF9001F75B /* PromiseKit.framework in Frameworks */, + 8F8FF9B637157B7A27DBC7B6 /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B6A79DCDE9D9AE26D8FE9A8B /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + B9A02492ACD4CA36B60C58F3 /* Foundation.framework in Frameworks */, + AA120F059C52079C902C1B8F /* Ice.framework in Frameworks */, + 41D162675B137658FC2D72ED /* PromiseKit.framework in Frameworks */, + B930E12AD649DB9D791DD8CA /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BAF136ADFC40A70AD078D530 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 4C9C851614B4A6B7046C9109 /* Foundation.framework in Frameworks */, + 17D851C4F5C42EE68FB4FDAE /* Ice.framework in Frameworks */, + 3C2617C4E4428C2098965E8C /* PromiseKit.framework in Frameworks */, + 4F0A7B64AF64B5358A45ECEE /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BD8731FC73EB75AB87416F4D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 22692E0B29D17761FDA56D8A /* Foundation.framework in Frameworks */, + F69C045CE1F4909C2BA28C64 /* Ice.framework in Frameworks */, + 2B877AB082A7117D68015E25 /* PromiseKit.framework in Frameworks */, + C37E53F1EDF2CC7DF3ABADD3 /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + CBCA35D015958F6890CECC4C /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 6196BA6D88574835CE5A66CB /* Foundation.framework in Frameworks */, + 63E25B128628B1C174EE8988 /* Ice.framework in Frameworks */, + E8FD99DCF9492C8C9D2C9D45 /* PromiseKit.framework in Frameworks */, + 8E03693DEC23701338163475 /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + CC3E6CC9728CFC238B2DE381 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 01C2412A320F699B3E117E25 /* Cocoa.framework in Frameworks */, + 77F8B2EE84BBB39C6EE1E034 /* Ice.framework in Frameworks */, + FDCDF3B610A3459A506F492B /* PromiseKit.framework in Frameworks */, + 4CB6E2CF52490CC24B240C59 /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + CDDBE68A4B34F988BBF8E921 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 0BAA5C057654488A9B5BA981 /* Cocoa.framework in Frameworks */, + F4050BC7518FB9C22ACEDCE9 /* Ice.framework in Frameworks */, + 198A053EC77660963FA11C93 /* PromiseKit.framework in Frameworks */, + 511D649F3AFFF410E5D0CB36 /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D1EF8257F9376D305E3B66BA /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 50F7163D97C2A7C693C9B5ED /* Glacier2.framework in Frameworks */, + 58E2DA6DB454480795B2D51C /* Ice.framework in Frameworks */, + 23BA98286B263C444BDCFCA8 /* PromiseKit.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D2DDC363A6AAE13787E5E769 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 45BCCE9446E36DC1C33AE8FA /* Cocoa.framework in Frameworks */, + 8B6406CE4AAC4A8487627FCC /* Ice.framework in Frameworks */, + D2F5694F12EBB23EB5A1DDA3 /* PromiseKit.framework in Frameworks */, + 3730BD7FF3D35E5BD9757278 /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DA4A829881025961BEAFADF4 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 20AC270F1626B3F73A3480DD /* Cocoa.framework in Frameworks */, + CEDFADCC7BE0E355F0CCF222 /* Ice.framework in Frameworks */, + 37BD94AC805ABCD3DD133233 /* PromiseKit.framework in Frameworks */, + EEB28106B6A4B0276F7A516F /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DBC428E71D8E261D29058BF9 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 4ED21D2ECD3A70421FB9DD3D /* Cocoa.framework in Frameworks */, + 221EF3874241D1A3D69EC695 /* Ice.framework in Frameworks */, + 1A29D18FFF8F14ACDC9F1C5E /* PromiseKit.framework in Frameworks */, + A5984D4628F1319536311ABA /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DCF184806D21C9FAF18862F0 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + DF7DB38B225B53CC5E40DA57 /* Foundation.framework in Frameworks */, + B53A93521592F0ECE9BB82EA /* Ice.framework in Frameworks */, + 5FC0F414D022FDD849DE0674 /* PromiseKit.framework in Frameworks */, + 6D7F94E4CBEDD6C4341775BA /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DEB4D1CD132BA52A77435F73 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 8FBA62A93748A6FB19AF24AE /* Ice.framework in Frameworks */, + E348A1E4272FB4E36AC8E764 /* PromiseKit.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E0613312C1B42230C5ABB49B /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 8BEF31A45F463E473E9D4B90 /* Foundation.framework in Frameworks */, + 602D99DEA96EDEEBF738619D /* Ice.framework in Frameworks */, + BB02659CFBFC8A0DAB3561A0 /* PromiseKit.framework in Frameworks */, + 3B65968289BE065ACA1E7CD0 /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E156567A383DC405201DF07C /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 261F5C1AC65993E6DA67EBD5 /* Cocoa.framework in Frameworks */, + E931934DCBD019B3AD6E35AB /* Ice.framework in Frameworks */, + CBA9115D8EF52668B997E107 /* PromiseKit.framework in Frameworks */, + 7556CE6C496FFE7551749F3F /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F062370A33DC7A9CFA047F67 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + AC2DD04F7E028F89C6365B96 /* Cocoa.framework in Frameworks */, + BE636B65DB612F9DB97B8822 /* Ice.framework in Frameworks */, + 6AFCC43337E5EB26816824ED /* PromiseKit.framework in Frameworks */, + A90C6C367CC7904EF0DC177E /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F82F8BF7D4096FD5FD0EC5B7 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + AF0A218E4691DA35BD20B474 /* Foundation.framework in Frameworks */, + 02E6CE58740CBA06DB87A965 /* Ice.framework in Frameworks */, + 35FFE2FF88A64ADCCB73E680 /* PromiseKit.framework in Frameworks */, + D31B36E1A426DBA858A9D0E2 /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + FA243DC9A195D93C52A1794D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + B4BF1FAE8BDCC9194F3FDC2B /* Cocoa.framework in Frameworks */, + CB1C1AF3CCA34FA2E49C4C6D /* Ice.framework in Frameworks */, + 8F2E90D8BCB77B541C80D214 /* PromiseKit.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + FAD2DBCC890BA8EBE94B89E8 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + BF952642A81F755EEA5C4AD2 /* libIce C++11 macOS.a in Frameworks */, + 4C4B934D27D992C338C792B1 /* libIceDiscovery C++11 macOS.a in Frameworks */, + 25113E8AA23FD67137E71431 /* libIceLocatorDiscovery C++11 macOS.a in Frameworks */, + 663980C66A49D81E4C73F463 /* libIceSSL C++11 macOS.a in Frameworks */, + 3B386AC589DF49B91FEB07EE /* PromiseKit.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + FD32ADBD62C22D842118D69A /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 536A0971C82DEDD58AE39B0A /* Cocoa.framework in Frameworks */, + 2116F22D5255900C82DD146D /* Ice.framework in Frameworks */, + CAF9592E7255F2E45103519A /* PromiseKit.framework in Frameworks */, + B1D38B51204C62564018E52C /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + FE7042FA290DCC80B9851CC0 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + EA5FC43B473033F5B4B8FA06 /* Cocoa.framework in Frameworks */, + 62BDBAF06542E5D46903B7CE /* Ice.framework in Frameworks */, + 7CE33B9CA6DB5A9306A77CBE /* PromiseKit.framework in Frameworks */, + E00A889D12C2BF5C9EB709DD /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + FFFCBC97DD89673A3825D2A9 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 903FFBE08504828BD7170B02 /* Cocoa.framework in Frameworks */, + 2C4F138BD2F675D5FF790B3B /* Ice.framework in Frameworks */, + ADEE77EBBABADB12E97FCC20 /* PromiseKit.framework in Frameworks */, + AEAAD6DCB9BB84FE72E07E9E /* TestCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 006C498FC29C3C2A1DA57F0D /* iOS */ = { + isa = PBXGroup; + children = ( + 9C560837742F1536CD9077D5 /* CFNetwork.framework */, + 85FDF41433ED94733E1BC813 /* ExternalAccessory.framework */, + 870EAA4BC7FF0C331853C50F /* Foundation.framework */, + 6D41A319A7B3B147FDC8EA45 /* PromiseKit.framework */, + 0031328AFD096A32F886C239 /* Security.framework */, + 2AEA4760C61467A43EAE6051 /* UIKit.framework */, + ); + name = iOS; + sourceTree = "<group>"; + }; + 0394C12CEB93F7B43915ADA8 /* stream */ = { + isa = PBXGroup; + children = ( + EEB80E71EB7BE144DED9D320 /* Client.swift */, + 6059450FB8C97A7BDFFE0334 /* Test.ice */, + ); + name = stream; + sourceTree = "<group>"; + }; + 07C3773296BC43CDBDF98C64 /* OS X */ = { + isa = PBXGroup; + children = ( + A74A24CD7ED2FBFECB9FED97 /* Cocoa.framework */, + 63D913EF7A0370FCA4F0D76A /* PromiseKit.framework */, + ); + name = "OS X"; + sourceTree = "<group>"; + }; + 0B55E41BF29A427109DBF9D5 /* objects */ = { + isa = PBXGroup; + children = ( + 9BE620CF9DE30EB5998991A5 /* AllTests.swift */, + 9B89423116A9D0059B0444DB /* Client.swift */, + 0C5C3C16DE4B7DE056FFC7DD /* ClientPrivate.ice */, + 007AC5018F40F695098F6B05 /* Server.swift */, + E1CE9F19AF6637FFEE12A205 /* ServerAMD.swift */, + 9633B57E8267287F48291029 /* ServerPrivate.ice */, + AD4098EC310F90065F58E268 /* ServerPrivateAMD.ice */, + 472A966BEFE38D2EF99832A1 /* Test.ice */, + 0C6868C9BFC9BCAA965A5D1C /* TestAMD.ice */, + AABD6035B79B6852EBF6A460 /* TestAMDI.swift */, + AAB25D7258209D619F6376D1 /* TestI.swift */, + ); + name = objects; + sourceTree = "<group>"; + }; + 186E2F173BB7CF7D26C76914 /* objects */ = { + isa = PBXGroup; + children = ( + 38BFB7678058CA1EF051EC45 /* AllTests.swift */, + F166F176384EC5B63F51A139 /* Client.swift */, + 925CBA6473C1C2E94842EF0C /* Collocated.swift */, + 75E28A8A26A675D74CEE27DA /* Server.swift */, + 00EB2CB2792EEC2158F75EEC /* Test.ice */, + 1423CA94EC8D93C8B70B8FB8 /* TestI.swift */, + ); + name = objects; + sourceTree = "<group>"; + }; + 196721545095501B806CC82F /* defaultValue */ = { + isa = PBXGroup; + children = ( + EDDEF36D017621261C2520D4 /* AllTests.swift */, + D37E67061387971945F490E0 /* Client.swift */, + 2C465C527F495510572EE063 /* Test.ice */, + ); + name = defaultValue; + sourceTree = "<group>"; + }; + 1B6FFF734C791DFD52A95BF0 /* info */ = { + isa = PBXGroup; + children = ( + 49D14E803C9664FE2638C3A5 /* AllTests.swift */, + D82FDA737E3962604D757B26 /* Client.swift */, + 6296F751356C58951A1119CF /* Server.swift */, + 468C54FF89948C9D452F35C3 /* Test.ice */, + 85A108B0EC561AA0BF6C2FCD /* TestI.swift */, + ); + name = info; + sourceTree = "<group>"; + }; + 1CC4C96C64186608E9DC878B /* Ice */ = { + isa = PBXGroup; + children = ( + 83DF45EC935799162CE7F43A /* acm */, + 2C408C2EC54B997DE047A257 /* adapterDeactivation */, + BAB116BFAFC7AD0CBAC110CB /* admin */, + ED94E10D89CE549A072B5364 /* ami */, + CE1482A86210FB74DC0D1E40 /* binding */, + 39985A67AF859AD968E117D5 /* defaultServant */, + 196721545095501B806CC82F /* defaultValue */, + 621B441E0B00889075E592C9 /* enums */, + AE2034CF4B0EBB0E92F5A673 /* exceptions */, + E5623B50676EA816011ED9A4 /* facets */, + B2566CA7D5149848CEF503EC /* hold */, + 1B6FFF734C791DFD52A95BF0 /* info */, + 3C8F9627962259035793DE6E /* inheritance */, + 7A43B7EB42F21EEA181BBFE0 /* invoke */, + 8952953DF05F7FD4B93F03AB /* location */, + 186E2F173BB7CF7D26C76914 /* objects */, + 298C9C576F2080337E3F3F5C /* operations */, + 6FFA47B97021E541F2458AA2 /* optional */, + C9D4C452292CF4DD1F9E0B28 /* properties */, + 820BD2912659AACFE0AA2526 /* proxy */, + 5663890611451329C51E09A2 /* retry */, + 2AAF2B725618F2172A8877DE /* scope */, + 819E5DEF036F9D9C1E050AD7 /* servantLocator */, + 864F5EF6B5519CF62761C5DA /* slicing */, + 0394C12CEB93F7B43915ADA8 /* stream */, + F4AD7FE876762E794885C871 /* timeout */, + 1FF34F07DA1E2CDFBD7CB5FC /* udp */, + ); + name = Ice; + sourceTree = "<group>"; + }; + 1FE0F9DA39BD5774667D24EB /* IceUtil */ = { + isa = PBXGroup; + children = ( + 240904EAE20C44F684F837C6 /* ConsoleUtil.cpp */, + 7F02FA98FF08CB088789D1C7 /* CtrlCHandler.cpp */, + EEA3F903D78E2993FA6F98DD /* FileUtil.cpp */, + B516C25EE2AD4AA989A0C717 /* InputUtil.cpp */, + 9245071A4DE8D8E016961500 /* MutexProtocol.cpp */, + A2C2BD4A7F4DE45077554C07 /* Options.cpp */, + 6EC8AC1A2176680E2BE40014 /* OutputUtil.cpp */, + 2EF912517FE2F9E06B375F87 /* Random.cpp */, + ECC5EC846C89881FB2C4772A /* RecMutex.cpp */, + 2429536C7D00CC9A6F571069 /* Shared.cpp */, + 9BAAC87A1922606E9DD4593C /* StringConverter.cpp */, + EA64C24E633066EA27760C88 /* StringUtil.cpp */, + 8F81AF5DE3734BFCFACFC594 /* ThreadException.cpp */, + BFBAEAB4EA096824A6EC790D /* Time.cpp */, + BF1BCF9C50968F7FEB3324F6 /* UtilException.cpp */, + 5659A452A8240A244425F4FC /* UUID.cpp */, + ); + name = IceUtil; + sourceTree = "<group>"; + }; + 1FF34F07DA1E2CDFBD7CB5FC /* udp */ = { + isa = PBXGroup; + children = ( + 80B853408ED79054E6964CD6 /* AllTests.swift */, + 788A94FF26B608B7AC909F56 /* Client.swift */, + 7CFD4B7164DA1D8892FBBA97 /* Server.swift */, + 52D7B25FF0A236B7B69B2B48 /* Test.ice */, + FD6AE2FCE004CAB6C3E812A2 /* TestI.swift */, + ); + name = udp; + sourceTree = "<group>"; + }; + 2417E7C567E1A3A92B67894D /* IceGrid */ = { + isa = PBXGroup; + children = ( + 71A96FD335DA471AC7150A42 /* Admin.ice */, + A2069630D4A927F86C4FBC80 /* Descriptor.ice */, + FD8F93A83F1728798AEE0123 /* Exception.ice */, + 3B8082664AA4B6D0685DAD08 /* FileParser.ice */, + 6FFA737E371CC954F700F596 /* PluginFacade.ice */, + B716BD86823CBA85EFEE6513 /* Registry.ice */, + 2F414D5E99A36BE073766A95 /* Session.ice */, + 6DFC6B655D6E3B27FFF53F55 /* UserAccountMapper.ice */, + ); + name = IceGrid; + sourceTree = "<group>"; + }; + 298C9C576F2080337E3F3F5C /* operations */ = { + isa = PBXGroup; + children = ( + 5D244C8F931231B7714E673B /* AllTests.swift */, + 67A8C3A32F38C280D5A32C12 /* BatchOneways.swift */, + 92B5906332A66BA58B0EFA97 /* BatchOnewaysAMI.swift */, + A0A305D5937C66216F11CF05 /* Client.swift */, + AA7D86CCA91AA68E7C38124A /* Collocated.swift */, + EF3F99A20C0C32083637ECBA /* Oneways.swift */, + B8BDCF3B69B2E86939F9A57A /* OnewaysAMI.swift */, + 29DCEF1F0D3756A0B2657EF3 /* Server.swift */, + B923D26B7ACBD6A753291EF2 /* ServerAMD.swift */, + 0FA0AD77AB4A762782979AA4 /* Test.ice */, + B84880E6735245A23A60D634 /* TestAMD.ice */, + 52CCEBC401EF280F0E87AB1D /* TestAMDI.swift */, + 756F0C35DE3CC240831BE50C /* TestI.swift */, + 67DDFF09213CF8A855D0B4AD /* Twoways.swift */, + 758E5A7716D74082A68175B3 /* TwowaysAMI.swift */, + ); + name = operations; + sourceTree = "<group>"; + }; + 2AAF2B725618F2172A8877DE /* scope */ = { + isa = PBXGroup; + children = ( + 01AA575CAE3319A28CD5E7F4 /* AllTests.swift */, + EAF1350F67CE8D3A4348F3E9 /* Client.swift */, + D4153C0A035AFF362A8D7A6E /* Server.swift */, + B4D1E5A8A8C48DEC0A0155EC /* Test.ice */, + CBAE3F2B1229BBA66D21BABF /* TestI.swift */, + ); + name = scope; + sourceTree = "<group>"; + }; + 2C408C2EC54B997DE047A257 /* adapterDeactivation */ = { + isa = PBXGroup; + children = ( + 5B7F934610D941B81F304A45 /* AllTests.swift */, + 822BAFEABECEDD0F2875C9A2 /* Client.swift */, + E797BF17140520C3290ABFDC /* Collocated.swift */, + 7BB5940A27038DF47F718AB3 /* Server.swift */, + 3B85A3BA1C4E1813167238B1 /* Test.ice */, + C534C5979A7D8B4B3752F9BE /* TestI.swift */, + ); + name = adapterDeactivation; + sourceTree = "<group>"; + }; + 377089A33CA18AB7A398D220 /* IceSSL */ = { + isa = PBXGroup; + children = ( + B70AD67A6DEDFE78E79D1AF4 /* configuration */, + ); + name = IceSSL; + sourceTree = "<group>"; + }; + 39985A67AF859AD968E117D5 /* defaultServant */ = { + isa = PBXGroup; + children = ( + 94307650C0CD9D1D4B13D275 /* AllTests.swift */, + 918271702A341F61A3F4082C /* Client.swift */, + E9040853D6AAE90134F12ED0 /* Test.ice */, + ); + name = defaultServant; + sourceTree = "<group>"; + }; + 3A7150ED1B750272D04BEDBE /* Ice */ = { + isa = PBXGroup; + children = ( + FE64D8105AAAEB060E6FA33A /* BuiltinSequences.ice */, + A46ED6C2DA9BB2B842766CCF /* Communicator.ice */, + 1253B9777BCF966221D0C86F /* CommunicatorF.ice */, + D6292E700118F4E42B326819 /* Connection.ice */, + 828B38E787FC8723C83D4919 /* ConnectionF.ice */, + 95A8E2FD4FB54E0EF0C4CADE /* Current.ice */, + CEDF515DDF519A53EF31E84C /* Endpoint.ice */, + 31D2324E9514306729E2C600 /* EndpointF.ice */, + A6D1E38568D7656F13F57D5A /* EndpointTypes.ice */, + 5E8B177E95BA2D07DCEFDA1D /* FacetMap.ice */, + 3C5E7B57B4BF54ECEA2E7644 /* Identity.ice */, + 4C1E574FCAD6BE4FD30AAEF9 /* ImplicitContext.ice */, + 6B0972F4B9891E7569954312 /* ImplicitContextF.ice */, + DAEA5CA5740117C6BC42907B /* Instrumentation.ice */, + 90EFB1CE1C4B06CB3795BA7B /* InstrumentationF.ice */, + 030F29F231CBED0013A88C7B /* LocalException.ice */, + 2D0747ED96A227648F3E66B2 /* Locator.ice */, + 0324299CF5CA4E7302B4ACAC /* LocatorF.ice */, + A7C655DD11BD41ED4C3D1E99 /* Logger.ice */, + 7F2F45A4AF18D649F0885E9B /* LoggerF.ice */, + 038D248253FFFD10F4AB2F27 /* Metrics.ice */, + 3C06873D6A18B5AF06EA761B /* ObjectAdapter.ice */, + 39F05C7B7976B9D17D483374 /* ObjectAdapterF.ice */, + 00BB2BF06851445F36D214CC /* ObjectFactory.ice */, + 4915A6FBAF6FEB632CFA7415 /* Plugin.ice */, + 488A75C9C0C95733FE145F5A /* PluginF.ice */, + 1010042EF9CEC31FC0AFD485 /* Process.ice */, + C724C0FEBE2CAFBA08989FB2 /* ProcessF.ice */, + 4A796EC75AE3F3A95CF44FF5 /* Properties.ice */, + 2288D724247415182EE9EED7 /* PropertiesAdmin.ice */, + F57A0472503DA95892ED6B14 /* PropertiesF.ice */, + 523B9454C940E0D81E8047AF /* RemoteLogger.ice */, + B497B16BCF0F6A55224FFDB0 /* Router.ice */, + 6709AE92A21F7B4AA66E804F /* RouterF.ice */, + CAABDEC1B20906FA83353809 /* ServantLocator.ice */, + A373F10D83CCD608A39E3835 /* ServantLocatorF.ice */, + 463459FB7D8F704FD77898C4 /* SliceChecksumDict.ice */, + 020836068D73A79D4DCE6A0C /* ValueFactory.ice */, + B912CA6E0A1F10F0DF6E9E77 /* Version.ice */, + ); + name = Ice; + sourceTree = "<group>"; + }; + 3C8F9627962259035793DE6E /* inheritance */ = { + isa = PBXGroup; + children = ( + 9E183236587AED966063E0A3 /* AllTests.swift */, + C8BEAE2C49D0B45FB5BA67DC /* Client.swift */, + E628FC93DBC978079A724FF4 /* Collocated.swift */, + 16E86B74195482C819014115 /* Server.swift */, + 8A5C9E0BB881BCF4F6F0FA8F /* Test.ice */, + 719ADF19645404C64EA92692 /* TestI.swift */, + ); + name = inheritance; + sourceTree = "<group>"; + }; + 49C98C77DECDE3DA8354EE53 /* IceIAP */ = { + isa = PBXGroup; + children = ( + 52F7D69A485A017B07B8AD31 /* Connector.mm */, + DE9F16504D23B3F58D7AF4CA /* EndpointI.mm */, + 5876CCBAE6AAC096CB461F82 /* Transceiver.mm */, + ); + name = IceIAP; + sourceTree = "<group>"; + }; + 4BE16C8AA9F6D747B904CF3B /* TestDriver */ = { + isa = PBXGroup; + children = ( + DE33BD969BAFAAE83FA190DC /* iOS */, + 811EEDA8A8498661A06A59CD /* macOS */, + ); + name = TestDriver; + sourceTree = "<group>"; + }; + 5663890611451329C51E09A2 /* retry */ = { + isa = PBXGroup; + children = ( + BAEABBFF7FB0FB8BF7953AD0 /* AllTests.swift */, + A91D5392ED5EE6A845F39DA3 /* Client.swift */, + 219515F6DF3BA8B09B2AF09A /* Collocated.swift */, + FB43A00D955B0F7E08FDD3DA /* Server.swift */, + ED2FACB490C9A2EC5A501FB9 /* Test.ice */, + AA9CA8ABE0C8034574EE00F5 /* TestI.swift */, + ); + name = retry; + sourceTree = "<group>"; + }; + 621B441E0B00889075E592C9 /* enums */ = { + isa = PBXGroup; + children = ( + 6743B765683A9B925F99D1A9 /* AllTests.swift */, + 1146EA738EEBF0E8643A7CD7 /* Client.swift */, + 7C1B9082D7C66385A1F84BD7 /* Server.swift */, + 1B17AE9C3FC4801EE0862F7C /* Test.ice */, + 2062C5FD342B207E6E7A831E /* TestI.swift */, + ); + name = enums; + sourceTree = "<group>"; + }; + 66210F114B553771D3CE1FA8 /* src */ = { + isa = PBXGroup; + children = ( + C1C9287A6A906F3FD8230DF6 /* Ice */, + B7DC3AC97DF119971C52309F /* IceDiscovery */, + 49C98C77DECDE3DA8354EE53 /* IceIAP */, + DE617BB3A2707D5818AB4C92 /* IceLocatorDiscovery */, + AEC5071F707B2809E150AEF6 /* IceSSL */, + 1FE0F9DA39BD5774667D24EB /* IceUtil */, + ); + name = src; + sourceTree = "<group>"; + }; + 664C9A64B3C8FD5A73E1278A /* Glacier2 */ = { + isa = PBXGroup; + children = ( + 1AA2AE3927EBF4C6E252C140 /* Metrics.ice */, + 60D1641294029748233057E1 /* PermissionsVerifier.ice */, + CD5BDD8CDC4198C5DBFD0372 /* PermissionsVerifierF.ice */, + D010B56A525D084DFD68EAC7 /* Router.ice */, + D4205FB1980ACE50C8CC937D /* RouterF.ice */, + E20AE7CD58914DDA97A83C88 /* Session.ice */, + 47241080E5C1C81B6F322C3A /* SSLInfo.ice */, + ); + name = Glacier2; + sourceTree = "<group>"; + }; + 6CF465783139F602D0CC0712 /* IceSSL */ = { + isa = PBXGroup; + children = ( + 251C120660145DCD5FB6FB5B /* ConnectionInfo.ice */, + C2362DD1D9852CFEEBAED065 /* ConnectionInfoF.ice */, + FB3C559B17046F98ED28C5E3 /* EndpointInfo.ice */, + ); + name = IceSSL; + sourceTree = "<group>"; + }; + 6FFA47B97021E541F2458AA2 /* optional */ = { + isa = PBXGroup; + children = ( + 6E1A635F482FAF37FB9C9FA5 /* AllTests.swift */, + 91A7E4C4039CC1B374674571 /* Client.swift */, + B9856CF3C6B1280A9EB49EA8 /* Server.swift */, + 0E0E2C9A3037DEACC7BB5C8D /* ServerAMD.swift */, + C9B9DCE19FD35FC0F6AD1D4D /* Test.ice */, + 97BB271A8188770DE5EE5B74 /* TestAMD.ice */, + 84D759E6446D5F71CE241600 /* TestAMDI.swift */, + 401C8E9968EA1542A390134C /* TestI.swift */, + ); + name = optional; + sourceTree = "<group>"; + }; + 7A43B7EB42F21EEA181BBFE0 /* invoke */ = { + isa = PBXGroup; + children = ( + 0D5180800465FD5D453E63A6 /* AllTests.swift */, + 0C189898682F76F5B954526A /* Client.swift */, + C9FE14B8B35538CF444B87FB /* Server.swift */, + DB73E84768C9BEB4E05AC522 /* Test.ice */, + 05EB4357B9BD383A57728E3B /* TestI.swift */, + ); + name = invoke; + sourceTree = "<group>"; + }; + 7B3F99DA9D176274DAAF4B2F /* exceptions */ = { + isa = PBXGroup; + children = ( + A301C0867F02FB9808FAC6AF /* AllTests.swift */, + 53E07E25DA43B3E8EB6E9D31 /* Client.swift */, + 10838D30B80697B9DDBA31D3 /* ClientPrivate.ice */, + 2E043CCAB631BD471DEF5B6E /* Server.swift */, + 037FD47584D12123792BDA88 /* ServerAMD.swift */, + 9188C130AAD5F8B048DC36FF /* ServerPrivate.ice */, + 298A2BAAE7678208C78D1A2C /* ServerPrivateAMD.ice */, + EB02E1C1762AA015913AF071 /* Test.ice */, + 1F6E970957A11B1AE6EF71DB /* TestAMD.ice */, + 4EBB3540198C53BCD831F20D /* TestAMDI.swift */, + 44516D401491DBD4538B5906 /* TestI.swift */, + ); + name = exceptions; + sourceTree = "<group>"; + }; + 80F2995E850C7142497E63A0 /* IceDiscovery */ = { + isa = PBXGroup; + children = ( + CD259FE076F39EEBA1958C54 /* IceDiscovery.ice */, + ); + name = IceDiscovery; + sourceTree = "<group>"; + }; + 811EEDA8A8498661A06A59CD /* macOS */ = { + isa = PBXGroup; + children = ( + D13112E740E095792FAEB984 /* main.swift */, + ); + name = macOS; + sourceTree = "<group>"; + }; + 819E5DEF036F9D9C1E050AD7 /* servantLocator */ = { + isa = PBXGroup; + children = ( + 2BA911AA1849C456055BD6AD /* AllTests.swift */, + 1714B9E2F7542EBF1F7C50DA /* Client.swift */, + BB75890D80B77241BDB185B2 /* Collocated.swift */, + 81B7B64819E414CA3B2A2EE1 /* ServantLocatorI.swift */, + 6A1A8FEE7AB16055C7C60B15 /* Server.swift */, + 411D02DCD4129040E0C3C8F6 /* ServerAMD.swift */, + CFA93665AC82E5AE1150E268 /* Test.ice */, + 300F8FB7BD45F093F4626D58 /* TestAMD.ice */, + 5A8A24458E30DC80BCD1B434 /* TestAMDI.swift */, + F1D9A1622A7CDA70227F3E60 /* TestI.swift */, + ); + name = servantLocator; + sourceTree = "<group>"; + }; + 820BD2912659AACFE0AA2526 /* proxy */ = { + isa = PBXGroup; + children = ( + 2BC96422360316AF829DC82F /* AllTests.swift */, + 359279F78A2113594A1CF8A8 /* Client.swift */, + 95D70577B75E2EF282CDA2F8 /* Collocated.swift */, + 0AEBC064E6B609DA87301145 /* Server.swift */, + 457E31EE594CC88F3A44A799 /* ServerAMD.swift */, + 81DDF0548E42CFB37B7CD4C4 /* Test.ice */, + CE5804052FC5A96D221B8803 /* TestAMD.ice */, + 594A5893311594ABA84DDE2E /* TestAMDI.swift */, + E662BDACBA5DA47F7B5E0D04 /* TestI.swift */, + ); + name = proxy; + sourceTree = "<group>"; + }; + 83DF45EC935799162CE7F43A /* acm */ = { + isa = PBXGroup; + children = ( + 95B6991B5CF369BEF354B351 /* AllTests.swift */, + 83CAC57033DE83BE309A182B /* Client.swift */, + 0946309162FAB019EF2B106F /* Server.swift */, + E368CACB974FFFFD22404B7D /* Test.ice */, + F8818172CC090594D16C576F /* TestI.swift */, + ); + name = acm; + sourceTree = "<group>"; + }; + 864F5EF6B5519CF62761C5DA /* slicing */ = { + isa = PBXGroup; + children = ( + 7B3F99DA9D176274DAAF4B2F /* exceptions */, + 0B55E41BF29A427109DBF9D5 /* objects */, + ); + name = slicing; + sourceTree = "<group>"; + }; + 8950D7A0DF4AE1DE8AF602D7 /* Ice */ = { + isa = PBXGroup; + children = ( + 7447E13620612CE478F173E4 /* AdminFacetFactory.swift */, + FF89BCFE1E4D3CD34C34AAA6 /* Blobject.swift */, + 0290A48F7C23A5D1DDAD3AC1 /* BlobjectAsync.swift */, + D3CF8C8D7F56018E4B14BE90 /* ClassResolver.swift */, + 7AE6B26C06804866E58A3741 /* CommunicatorI.swift */, + B69FB397DFE1E68FE87F0A52 /* ConnectionI.swift */, + E3056C5DA712F55A97B05A44 /* ConnectionInfoFactory.swift */, + 81788FBB3A77489D9F76FF0E /* EndpointI.swift */, + D14B4626FA64A1D3308CF7F9 /* EndpointInfoFactory.swift */, + BFE0D57F8DD001E75530856B /* Exception.swift */, + 96F346F0305A06F0EFADF9BF /* FormatType.swift */, + 4610D441D9493C0B21FEF581 /* IceSwift.h */, + E3E604B3B94EAAC2109E4D82 /* ImplicitContextI.swift */, + 18E3542529153EB181E880EF /* Incoming.swift */, + FF1FEDDF3C0289312B958ED2 /* Info.plist */, + F0793AF8CBDD07CA59ED7EED /* InitializationData.swift */, + 4BFDA8F3C438AF1F853497C0 /* Initialize.swift */, + 911798EC58B6007855943BCB /* InputStream.swift */, + DBFCC3CB5A23A85DE6AE2607 /* LocalExceptionDescription.swift */, + 9A4E1C14022C9EAEC8AB771C /* LocalExceptionFactory.swift */, + CAFA154DBD50B9604A7A7C59 /* LocalObject.swift */, + B0BDC7ABB450D5DCFB59EBCB /* LoggerWrapper.swift */, + D7FFDBAD738CBAEAE9919A32 /* Mutex.swift */, + B405F0A79A60C68C7D5FA6B6 /* NativePropertiesAdmin.swift */, + C416308864EF7F37BD16EF96 /* Object.swift */, + 4943D90E215EA7F001876C5B /* ObjectAdapterI.swift */, + 69F24D683B72432659C41F5E /* OptionalFormat.swift */, + 48F4EF698C0373A8B76A2663 /* OutputStream.swift */, + BD3629FBA66A03B093AF336F /* ProcessI.swift */, + 14FABAAED2F701CC5D6E21C2 /* PropertiesAdminI.swift */, + C329F45DB1FD9E70F37C7823 /* PropertiesI.swift */, + 173315ECEF41B1A98A00B666 /* Proxy.swift */, + 5A001D5976E7EBCEFED2B608 /* ServantManager.swift */, + 8EC01BFFE83B9C38FC2EC096 /* SlicedData.swift */, + 4A368B3C0257A6AF1B876892 /* SliceFlags.swift */, + 92B681D8A5D3A17094255E4A /* SliceInfo.swift */, + 8902EE450DF3A87D4781F048 /* UnknownSlicedValue.swift */, + 851C3F8D55FA569B433B5FD5 /* Util.swift */, + 81534B568DDF6C96DC83A047 /* Value.swift */, + B3B94C0C6FBAE34FC003740D /* ValueFactoryManagerI.swift */, + ); + name = Ice; + sourceTree = "<group>"; + }; + 8952953DF05F7FD4B93F03AB /* location */ = { + isa = PBXGroup; + children = ( + 9A3A28D3F77ACF9B59C9EE7F /* AllTests.swift */, + 64F6FC1409B86A503C498833 /* Client.swift */, + 41C22F57DF940B52BD56E3EB /* Server.swift */, + 4A352B2A5341FAB967856ADF /* Test.ice */, + 340032EE1FA41DE5519F6FC1 /* TestI.swift */, + ); + name = location; + sourceTree = "<group>"; + }; + 8A7D11CC9772F81014BEF1E4 /* Slice */ = { + isa = PBXGroup; + children = ( + A40BFDA9C91E44F2DF21F7AD /* escape */, + ); + name = Slice; + sourceTree = "<group>"; + }; + 915FB82ED80CE8FB8F30EB19 /* IceStorm */ = { + isa = PBXGroup; + children = ( + A0C05CB1065C9BC36847B733 /* IceStorm.ice */, + 7AB71501E16A76D0ADC74A14 /* Metrics.ice */, + ); + name = IceStorm; + sourceTree = "<group>"; + }; + A27802A7DDEF7A70C99339CB /* IceIAP */ = { + isa = PBXGroup; + children = ( + 865B104EF3F6EDED00ED2754 /* ConnectionInfo.ice */, + CE99BACF0BE149F69F2AFBFA /* EndpointInfo.ice */, + ); + name = IceIAP; + sourceTree = "<group>"; + }; + A40BFDA9C91E44F2DF21F7AD /* escape */ = { + isa = PBXGroup; + children = ( + 13D302603E36BF30FF10F7D0 /* Clash.ice */, + E28EA8C2C7AA96A782A5AD34 /* Client.swift */, + B16B5759917633FF3D305B78 /* Key.ice */, + ); + name = escape; + sourceTree = "<group>"; + }; + A5BF2BB4D4CBB75A3022D623 /* IceObjc */ = { + isa = PBXGroup; + children = ( + 5343855941902981A2906D7D /* AdminFacetFactory.h */, + 43B799F55C40A65843F88F0C /* BlobjectFacade.h */, + E4FC64A9E74B4DBB9C9A057C /* BlobjectFacade.mm */, + C24F2F8684AB0083CF401EAD /* Communicator.h */, + 2A825E2C1DC72FC2FC36D7BA /* Communicator.mm */, + 25704AF884973FE91A8B6C29 /* Config.h */, + 54D23B0AC8FD8C3CDB191076 /* Connection.h */, + 366C5D3266D9C6C5D60E338C /* Connection.mm */, + D867147B89B651BF722206B5 /* Convert.h */, + AE4F9A2DBEDA32DCB3E60CD1 /* Convert.mm */, + 20797F3B16BFB94F810D5EC4 /* Endpoint.h */, + 9B2225BF2C6D5186590EAE48 /* Endpoint.mm */, + 742CE6AFDC1FB7CC9737459B /* Exception.h */, + 19231A4083CEDD81E52896EB /* Exception.mm */, + 8DA84E31A161CE8E85A7771D /* IceUtil.h */, + 03B19351ED5C7121B2A4A39E /* IceUtil.mm */, + 59CFAC2C8CBDBADDEA3321C2 /* ImplicitContext.h */, + 2856C294561B45DE0AAF3F61 /* ImplicitContext.mm */, + 349E339D24666528C1729E54 /* LocalObject.h */, + F6AF11149756D4636F97B86E /* LocalObject.mm */, + F9280444D95F2CDCB505570B /* Logger.h */, + 1A5BA94BC27B8423B16532B7 /* Logger.mm */, + 2894B7D00F096E29676E30FA /* LoggerWrapperI.h */, + 65B38CB58578E951F9F8714B /* ObjectAdapter.h */, + C284F41389035557B72DC921 /* ObjectAdapter.mm */, + 79A4ABB901DBFB88FDC00658 /* ObjectPrx.h */, + C7F5F0B0B745C16310D6682D /* ObjectPrx.mm */, + 50FD9EEF66A361FB512D1A29 /* OutputStream.h */, + EEB098A839D1FB6F143DD5B3 /* Process.h */, + C8F45B78B8F03318158A9D56 /* Process.mm */, + B1AF5E85ED9A1F4414237EC8 /* Properties.h */, + 65314D334B73B7733B0F9D65 /* Properties.mm */, + 84CBE7EE8763343781E71AE8 /* PropertiesAdmin.h */, + 1F5791426E16A8B3C5402DBA /* PropertiesAdmin.mm */, + 33BEA73A90E6487D070027A9 /* TraceUtil.h */, + 6F67B6869ECDEBB8425E91EB /* TraceUtil.mm */, + EC6866FE232C1865E7517BBD /* UnsupportedAdminFacet.h */, + 9BB671D15F8523B6ABEE9F08 /* UnsupportedAdminFacet.mm */, + ); + name = IceObjc; + sourceTree = "<group>"; + }; + A68A4B71E49D2340330566C0 /* src */ = { + isa = PBXGroup; + children = ( + F8DECE0F5EDBDFE5FCD45FBF /* Glacier2 */, + 8950D7A0DF4AE1DE8AF602D7 /* Ice */, + A8DEA8C39F9A7783139DE1FA /* IceGrid */, + A5BF2BB4D4CBB75A3022D623 /* IceObjc */, + CC067286D92051BA9CAA5FDA /* IceStorm */, + ); + name = src; + sourceTree = "<group>"; + }; + A8DEA8C39F9A7783139DE1FA /* IceGrid */ = { + isa = PBXGroup; + children = ( + 2BA5B7ABB4CB0BF942935864 /* IceGridSwift.h */, + 162B14F0FA06A1425F10B585 /* Info.plist */, + ); + name = IceGrid; + sourceTree = "<group>"; + }; + AE2034CF4B0EBB0E92F5A673 /* exceptions */ = { + isa = PBXGroup; + children = ( + 189E3ED7C7335F42F131CAE4 /* AllTests.swift */, + CAFF8224F16416487A770A39 /* Client.swift */, + 5947A3AA5EEBFF2631DACE41 /* Collocated.swift */, + 2720E37C8DAA9D7FD5B5216D /* Server.swift */, + 7FB3724BBA6C5D4D698ACB54 /* ServerAMD.swift */, + A93A87F8B9860213E8240A72 /* Test.ice */, + C00D91287CDA6E27D20C9D3A /* TestAMD.ice */, + 2FEDB803435645F58EFFC661 /* TestAMDI.swift */, + 07504CB28A77E27A13CD5553 /* TestI.swift */, + ); + name = exceptions; + sourceTree = "<group>"; + }; + AEC5071F707B2809E150AEF6 /* IceSSL */ = { + isa = PBXGroup; + children = ( + 61643EA5813C280FBB5DCA70 /* AcceptorI.cpp */, + FE7B04C969E7050D512F2D2C /* CertificateI.cpp */, + 04BF7DE5C0E4114B7E131312 /* ConnectorI.cpp */, + F96132367DF285FBBC548D6D /* EndpointI.cpp */, + ADBFAB5D4E295192C5DA5D3D /* Instance.cpp */, + D9CB1665FFC46CE91D4B9529 /* PluginI.cpp */, + 825783EC43912BFE5482D5DF /* RFC2253.cpp */, + CAC5452C269A362D8DCD26F3 /* SecureTransportCertificateI.cpp */, + 4D775F15581ED90C5BF0EE05 /* SecureTransportEngine.cpp */, + 586624A3F550C8253BF180DF /* SecureTransportPluginI.cpp */, + 0A0AF0DCC30C5C540CE97CC4 /* SecureTransportTransceiverI.cpp */, + 6129E466F70D4E4A399A8E9E /* SecureTransportUtil.cpp */, + 34EE507084F1DAC1C42A3926 /* SSLEngine.cpp */, + 5FE4A2CF0D4682384614B575 /* TrustManager.cpp */, + 2581CADFB1C4EBF2F4EAD662 /* Util.cpp */, + ); + name = IceSSL; + sourceTree = "<group>"; + }; + B2566CA7D5149848CEF503EC /* hold */ = { + isa = PBXGroup; + children = ( + 58F11EF594018BDA48E2462F /* AllTests.swift */, + 632FF48F5F20042AE238ECC6 /* Client.swift */, + 93CD33F473CD961099A82773 /* Server.swift */, + 457855F403B22BF39C75B16F /* Test.ice */, + 17D070013CAD1AF6D9C58593 /* TestI.swift */, + ); + name = hold; + sourceTree = "<group>"; + }; + B39AC64818ADAEAE036FBC34 /* ios */ = { + isa = PBXGroup; + children = ( + 72A5A83540F1CD36566EDF59 /* Notifications.mm */, + 674E773DF4B4DCDDA39F3DE8 /* StreamAcceptor.cpp */, + 9104FC83EEB1DB6A2D5A5427 /* StreamConnector.cpp */, + 7134B828724603F195A46A12 /* StreamEndpointI.cpp */, + F710AFF41CDFAE9BFAFCF1AE /* StreamTransceiver.cpp */, + ); + name = ios; + sourceTree = "<group>"; + }; + B70AD67A6DEDFE78E79D1AF4 /* configuration */ = { + isa = PBXGroup; + children = ( + 067C85F35976F4DEF23B57DB /* AllTests.swift */, + 2C015EF6A0A8A9EEE016CF9F /* certs */, + FF2E3A220AC9E9A060DB583D /* Client.swift */, + D26ED3329E8CC06679C2F30D /* Server.swift */, + 49C9CEFAD9C27035C47EFB73 /* Test.ice */, + 811F0B562E73A9C2AAEE013E /* TestI.swift */, + ); + name = configuration; + sourceTree = "<group>"; + }; + B7DC3AC97DF119971C52309F /* IceDiscovery */ = { + isa = PBXGroup; + children = ( + 50FF32BF41290CD4BA39CB51 /* LocatorI.cpp */, + FB44DA5C88EAA290CACFCFA8 /* LookupI.cpp */, + 574BF372E6E418E4C6ED09C1 /* PluginI.cpp */, + ); + name = IceDiscovery; + sourceTree = "<group>"; + }; + BAB116BFAFC7AD0CBAC110CB /* admin */ = { + isa = PBXGroup; + children = ( + 3BF5A14B208DEAECF5A412C8 /* AllTests.swift */, + 2031D6527EBCAC2258D6F59F /* Client.swift */, + EAA4A859A9283C6D0B233CAE /* Server.swift */, + 50C14E2FBFE498ECE440356D /* Test.ice */, + 260E00176AE3729587786A64 /* TestI.swift */, + ); + name = admin; + sourceTree = "<group>"; + }; + BABC7D1B965880ED3F8E0217 /* test */ = { + isa = PBXGroup; + children = ( + 1CC4C96C64186608E9DC878B /* Ice */, + 377089A33CA18AB7A398D220 /* IceSSL */, + 8A7D11CC9772F81014BEF1E4 /* Slice */, + D8F8877A9478A340AF62A924 /* TestCommon */, + 4BE16C8AA9F6D747B904CF3B /* TestDriver */, + ); + name = test; + sourceTree = "<group>"; + }; + C12F3F06FE4E36948D2CC7E5 /* slice */ = { + isa = PBXGroup; + children = ( + 664C9A64B3C8FD5A73E1278A /* Glacier2 */, + 3A7150ED1B750272D04BEDBE /* Ice */, + 80F2995E850C7142497E63A0 /* IceDiscovery */, + 2417E7C567E1A3A92B67894D /* IceGrid */, + A27802A7DDEF7A70C99339CB /* IceIAP */, + D61530D06A14030743394D3D /* IceLocatorDiscovery */, + 6CF465783139F602D0CC0712 /* IceSSL */, + 915FB82ED80CE8FB8F30EB19 /* IceStorm */, + ); + name = slice; + sourceTree = "<group>"; + }; + C1C9287A6A906F3FD8230DF6 /* Ice */ = { + isa = PBXGroup; + children = ( + B39AC64818ADAEAE036FBC34 /* ios */, + BA596A7278E6A5BE268759B0 /* Acceptor.cpp */, + FB1070ED2615D46D7FDFD027 /* ACM.cpp */, + F4BE441730E27358FD5FD7F9 /* ArgVector.cpp */, + D1904D537D8689AA15D64A62 /* Base64.cpp */, + 8C011F62FA8756F9B88CB6E9 /* BatchRequestQueue.cpp */, + 9245EE9385C60ACAD3398624 /* Buffer.cpp */, + B2E3B10FBA657C52E19BC44B /* CollocatedRequestHandler.cpp */, + 1DF68240A0F93CA79AB86926 /* CommunicatorI.cpp */, + FD05C8DE3492FA4593406C28 /* Cond.cpp */, + F3616E470DCD0FDC827CB001 /* ConnectionFactory.cpp */, + 79B384D87B697743242782A4 /* ConnectionI.cpp */, + 71F686B1842EE0F0668A7ADC /* ConnectionRequestHandler.cpp */, + C06D8D06675BAF6E05DCBC8D /* Connector.cpp */, + 80DFB051092F5C0B9386E466 /* ConnectRequestHandler.cpp */, + 300ACD38E0CCC3978AACB703 /* CountDownLatch.cpp */, + D54F27BBB79EC99E49FB8337 /* DefaultsAndOverrides.cpp */, + 7AF9BF639398943A70F14231 /* DispatchInterceptor.cpp */, + 7EC016AF7C4C92CEE082A7B8 /* DynamicLibrary.cpp */, + 933618455164E19AE790AD98 /* EndpointFactory.cpp */, + 8F7EB4BD53C8878A62DB683A /* EndpointFactoryManager.cpp */, + 438696C57A24E941A67A69B5 /* EndpointI.cpp */, + 1B27746854547F83FD3400B1 /* EventHandler.cpp */, + A98EBCF6F026FC4FF7AFD672 /* Exception.cpp */, + B14DACBDF514B9BD2FC934DA /* FactoryTable.cpp */, + EE718247E5207FBE81F7C1CD /* FactoryTableInit.cpp */, + 2F1656B63FFA16CE1CB8A8B5 /* HttpParser.cpp */, + 49301C14A9D200E30F8D1B51 /* IconvStringConverter.cpp */, + D0A1C910BAD79CB90B4E3DC5 /* ImplicitContextI.cpp */, + 1A9F6B38C8BBFEF026210B08 /* Incoming.cpp */, + 887AF44AB027F6D7F3BA5D34 /* IncomingAsync.cpp */, + C284BB2FB9EBB2B69001E4B1 /* Initialize.cpp */, + 8B38AE066B39786410748F40 /* InputStream.cpp */, + 802EA8B7D12327ACEC90091B /* Instance.cpp */, + DBC747062704608D240AE0FE /* InstrumentationI.cpp */, + 1F9F2ADAF33F9B5F3499E01F /* IPEndpointI.cpp */, + 6CDAF82F7706588F392E7300 /* LocalObject.cpp */, + 48588A0FEC71B23F244B557F /* LocatorInfo.cpp */, + 96A01B6D9C204DFF548C8D48 /* LoggerAdminI.cpp */, + 5C45004277123EDCA7BCA6A0 /* LoggerI.cpp */, + 65F012235FAE7A79FA922758 /* LoggerUtil.cpp */, + 3632C5F63AE7689F894CBC54 /* MetricsAdminI.cpp */, + 89475D08DAA465BCAC6BF4D7 /* MetricsObserverI.cpp */, + 63A7DA541926380531C3B8E8 /* Network.cpp */, + 0C7C4954E6E427052EAA79D3 /* NetworkProxy.cpp */, + 0AACB72D5FAFE6F7B85D0FC4 /* Object.cpp */, + 15F2E4CA99023797339779F0 /* ObjectAdapterFactory.cpp */, + 8B5C9BA809A1302EC50A6E99 /* ObjectAdapterI.cpp */, + 3721236531620DBCBEB39D41 /* ObserverHelper.cpp */, + 9AC2E1EE44058CE5096D663C /* OpaqueEndpointI.cpp */, + EDF8E5A8A5004B676A0BDF25 /* OSLogLoggerI.cpp */, + 93F6B13E28C65453745EE726 /* OutgoingAsync.cpp */, + FABD6EB0E182EA49D4B5766E /* OutputStream.cpp */, + 5D7BC837A190E8C95AAD223D /* PluginManagerI.cpp */, + 70565ECB1A3515AB0C667598 /* PropertiesAdminI.cpp */, + 36EB098C8EE18A985488AFA7 /* PropertiesI.cpp */, + 14BC90C52DA9A3CAF39322CD /* PropertyNames.cpp */, + D1AD8A96BB32FF7809DC6633 /* Protocol.cpp */, + 1FD927676FD53EC5878D9266 /* ProtocolInstance.cpp */, + A609B420DBC220683E3478A5 /* ProtocolPluginFacade.cpp */, + 7605F07734AEBCA7AF79DDE5 /* Proxy.cpp */, + A5EE97F0338BD9EAD0DE1B10 /* ProxyFactory.cpp */, + E325A4076B7D2F2EF9D33266 /* Reference.cpp */, + 8D0B27B694C3EE943904522E /* ReferenceFactory.cpp */, + 2EB6DB1F8688EB1980F15640 /* RegisterPluginsInit.cpp */, + 52E6495C52AF1860B1907025 /* RequestHandler.cpp */, + 471CD416B83B542C8F7582AB /* RequestHandlerFactory.cpp */, + ED2B0C01FC9F33222506FD38 /* RetryQueue.cpp */, + 71F7CDB885CFFA255B8704DA /* RouterInfo.cpp */, + 453895616D7087BC3656F550 /* Selector.cpp */, + F62C515D81B4ECC1B8F7ECC2 /* ServantManager.cpp */, + 44A5BD8A0819F6426E07866F /* Service.cpp */, + 4771A7DB0DD97F7601FBE649 /* SHA1.cpp */, + AC62CFA712B929BDCEBCFB6B /* SliceChecksums.cpp */, + 85A9DD97447DA62B03DD75B9 /* SlicedData.cpp */, + A8B6138D4BA7EC05DBA41627 /* StreamSocket.cpp */, + CCB7DD0A81B767D953903000 /* StringConverterPlugin.cpp */, + CFAAE2F5B1D4A3050CD17E97 /* SysLoggerI.cpp */, + 4BD08E0917CB9C3B366951D3 /* SystemdJournalI.cpp */, + D732E2E9FBBA59C3AABBF754 /* TcpAcceptor.cpp */, + D9C3123B69C3917E0A365577 /* TcpConnector.cpp */, + 7548DFA80BEDA74E4E959478 /* TcpEndpointI.cpp */, + 2909D8FC93EDAC36BB8E7957 /* TcpTransceiver.cpp */, + C429BA52E5200E492155ADFB /* Thread.cpp */, + 4DA840989579096474F7A7C8 /* ThreadPool.cpp */, + 691D4FAE09254013CDF14460 /* Timer.cpp */, + 241813D9F10FFD0E31CED44C /* TraceLevels.cpp */, + 23DBDAAC4E927BA973813A9E /* TraceUtil.cpp */, + 6FDA009DD1E09F4AD8054EB9 /* Transceiver.cpp */, + A66926ED2CACE6A4FA7B5C66 /* UdpConnector.cpp */, + 6677DC4BA022BF3A4991609E /* UdpEndpointI.cpp */, + CF988BCAAC25BA3D04487165 /* UdpTransceiver.cpp */, + B131399750F43672CA389DF5 /* Value.cpp */, + 1E5D09858E9E4D6A34A94FEF /* ValueFactoryManagerI.cpp */, + 7680CD444DA1821E2BBDDD9F /* WSAcceptor.cpp */, + 37FCE112FA57F8D0E2547946 /* WSConnector.cpp */, + 375CE372A58028D41159AAA5 /* WSEndpoint.cpp */, + B5C1917BF4210D0F739E5084 /* WSTransceiver.cpp */, + ); + name = Ice; + sourceTree = "<group>"; + }; + C9D4C452292CF4DD1F9E0B28 /* properties */ = { + isa = PBXGroup; + children = ( + 4BB88B644528FB390A4A8135 /* Client.swift */, + ); + name = properties; + sourceTree = "<group>"; + }; + CC067286D92051BA9CAA5FDA /* IceStorm */ = { + isa = PBXGroup; + children = ( + F418D0D53F5E126F2F44C0C7 /* IceStormSwift.h */, + 4335CB8607C8285888A12365 /* Info.plist */, + ); + name = IceStorm; + sourceTree = "<group>"; + }; + CE1482A86210FB74DC0D1E40 /* binding */ = { + isa = PBXGroup; + children = ( + F3CDBED8B141B3FE3A6AB8E2 /* AllTests.swift */, + 42852A32ED4AE895BFAAA6CA /* Client.swift */, + 476F4FDDFCDE084B13E4F39A /* Server.swift */, + 51E73D7AFEB64D2A351E19B8 /* Test.ice */, + 88355021C7A31D08304EC1DA /* TestI.swift */, + ); + name = binding; + sourceTree = "<group>"; + }; + CF727599FEBEBA311093F989 = { + isa = PBXGroup; + children = ( + D63E083D5BB2C95B61B3B1C6 /* cpp */, + F657B1A1B433FC89D990186F /* Frameworks */, + D08CD86832B6909E8509F4F7 /* Products */, + C12F3F06FE4E36948D2CC7E5 /* slice */, + A68A4B71E49D2340330566C0 /* src */, + BABC7D1B965880ED3F8E0217 /* test */, + ); + sourceTree = "<group>"; + }; + D08CD86832B6909E8509F4F7 /* Products */ = { + isa = PBXGroup; + children = ( + A7FBF20FA5074019E1952619 /* Glacier2.framework */, + 4EF3778FE0BD6309950B7C0F /* Glacier2.framework */, + EAD5CB65C9E749E09CE7AAEA /* Ice.framework */, + C7C5BFE9B16BF237E7782A4F /* Ice.framework */, + FCD76BA365CFA076EF297D33 /* IceAcm.bundle */, + 370F2F863ADD7F42819C4498 /* IceAcm.bundle */, + 52FF2F658D31F2A584C5CEC8 /* IceAdapterDeactivation.bundle */, + 54FBF62F717A8E7B3E7E34D9 /* IceAdapterDeactivation.bundle */, + E2778EFD3BDF060F7D28FA43 /* IceAdmin.bundle */, + 24E1B6E96C21EC72DC064E34 /* IceAdmin.bundle */, + FFB017C2AB2174BF2CA9A97C /* IceAmi.bundle */, + EC4F7DC4FDFB8038EDA83A45 /* IceAmi.bundle */, + B902634E3013F0F2161FF426 /* IceBinding.bundle */, + EB0FE3041559F39854E345D2 /* IceBinding.bundle */, + C2F3779808DBC5ED79EEFBF0 /* IceDefaultServant.bundle */, + 06D538137AA30E6A7A28C2A2 /* IceDefaultServant.bundle */, + 881E8ED1F550ABA8F7A59DA1 /* IceDefaultValue.bundle */, + 163EB528D7D26A1820BD9E1A /* IceDefaultValue.bundle */, + A56C1DEC107F647E8C622C2E /* IceEnums.bundle */, + 0D1C059D4BA5E01CB0ADFBB4 /* IceEnums.bundle */, + A3DE7F634444B01AE61627AF /* IceExceptions.bundle */, + BA9B294D0E2DAB2D585F71E6 /* IceExceptions.bundle */, + 24323E3AB8CD7D9D405EEE9A /* IceExceptionsAMD.bundle */, + 276F78A06FC75374D7EA1EA0 /* IceExceptionsAMD.bundle */, + 826497ACA601D39811A8CF36 /* IceFacets.bundle */, + 159667676124BA50280F0687 /* IceFacets.bundle */, + D25B54329663D55F07676BA3 /* IceGrid.framework */, + F678EA062EF28FA715CCFB1F /* IceGrid.framework */, + E4E251AABEC70AA1739E5859 /* IceHold.bundle */, + 3F54218F7DD6E867D382BC83 /* IceHold.bundle */, + 44A837C5842979328742845D /* IceInfo.bundle */, + CAAF3F145A79FCDEC66BAB27 /* IceInfo.bundle */, + 06F658397BEF3A330FDA4056 /* IceInheritance.bundle */, + 4B299CAB121530EBB3DA7B2E /* IceInheritance.bundle */, + 952E665CC33C0FD5B7BB55BB /* IceInvoke.bundle */, + 431588ED0E80F0264A83FA35 /* IceInvoke.bundle */, + 40E19608103D6C861DE753D1 /* IceLocation.bundle */, + 3FBDEBDB8E0DAC4C18CF8225 /* IceLocation.bundle */, + 1A71BC5C851C5EFD99C2216C /* IceObjects.bundle */, + 877C33F38770D875BE148A14 /* IceObjects.bundle */, + 03C4192F0524006FB342718D /* IceOperations.bundle */, + 65F79884355E2A0FE99ECB0D /* IceOperations.bundle */, + C1CC2963FE8AC9E7D4159212 /* IceOperationsAMD.bundle */, + A9177E1CD1131BBB556DB172 /* IceOperationsAMD.bundle */, + 1090D6FDA9BED7FA1022BF1E /* IceOptional.bundle */, + C4F874AD5EA2585BEB2788BD /* IceOptional.bundle */, + CD79CFE2812A7B6899EE5178 /* IceOptionalAMD.bundle */, + F9C53C5323A0B0F56DD82A34 /* IceOptionalAMD.bundle */, + 7DACE4CE00C90B00137CDD05 /* IceProperties.bundle */, + A54D26BC0704A7705CF6E082 /* IceProperties.bundle */, + AE912DDABEFC64751F3ACF12 /* IceProxy.bundle */, + 4420FAEFE57B79BB5E834D56 /* IceProxy.bundle */, + 0C4A61DF34D8B6DA32B58EF3 /* IceProxyAMD.bundle */, + 056AD68493E2D83EBA27D71B /* IceProxyAMD.bundle */, + 581215CCF88E5C3BE65ECF1B /* IceRetry.bundle */, + 9C8A4C7448EF28DFB238F82D /* IceRetry.bundle */, + D3EDEB5642C2CD4B0494A7E1 /* IceScope.bundle */, + 9DE0D76C9B9CA73D2B49DEC5 /* IceScope.bundle */, + 63FB631C2469790D2A77A6C1 /* IceServantLocator.bundle */, + 2FDEB40857CC76910C985FA8 /* IceServantLocator.bundle */, + FB37603A7E1259106EF33F05 /* IceServantLocatorAMD.bundle */, + E4C6A05E68524E4013034DC9 /* IceServantLocatorAMD.bundle */, + BD3914845D38EA92426A1C87 /* IceSlicingExceptions.bundle */, + 9DEB9C24CF5B2D68DEB44B1A /* IceSlicingExceptions.bundle */, + 9D4151C3144AD1696BC226C1 /* IceSlicingExceptionsAMD.bundle */, + E7DFD245235F517B54CBF4C5 /* IceSlicingExceptionsAMD.bundle */, + F07BAE3EB07F426600EE9C4C /* IceSlicingObjects.bundle */, + 2E31C452E06DF02A32D74158 /* IceSlicingObjects.bundle */, + 3294A580D3F62ABF8224BFCF /* IceSlicingObjectsAMD.bundle */, + E316B5856061FE815785CB34 /* IceSlicingObjectsAMD.bundle */, + EF5E76091B28D91259A24A57 /* IceSSLConfiguration.bundle */, + 309B6BAC2D50E248C757311C /* IceSSLConfiguration.bundle */, + AFD52DD0720A627BDA1842A8 /* IceStorm.framework */, + 6313F62859B19DC28BB6E1E0 /* IceStorm.framework */, + 2AFD482C35C038A3328285CC /* IceStream.bundle */, + B1ABFBA6618639D0436D60A6 /* IceStream.bundle */, + 652F819A999ABAB56CFC4A89 /* IceTimeout.bundle */, + 510DBF2E39A80486AC1E8ADB /* IceTimeout.bundle */, + 31F3F7F8FC3116D9134C7D81 /* IceUdp.bundle */, + 46C6B15FA2B196879FD8EC27 /* IceUdp.bundle */, + 4D09012971D6D0CE7EAB4D44 /* libIce C++11 iOS.a */, + 763ACF31E2066730E340FCBA /* libIce C++11 macOS.a */, + 496A08AE7826BC0BB1770B33 /* libIceDiscovery C++11 iOS.a */, + AE08479167FADF662AD41FB6 /* libIceDiscovery C++11 macOS.a */, + 2F2305815DDDCF67ED01341E /* libIceIAP C++11 iOS.a */, + 6A685447CC038C3FC379393F /* libIceLocatorDiscovery C++11 iOS.a */, + D0FF6202727A575BFDDD22A6 /* libIceLocatorDiscovery C++11 macOS.a */, + 4ECA873E5993DD4D031920B7 /* libIceSSL C++11 iOS.a */, + E07B1A3C2B4A1C3215D88E4F /* libIceSSL C++11 macOS.a */, + B0EC7FDB4F5FCF6C81624124 /* SliceEscape.bundle */, + 30A8323A18473C6280EC17C3 /* SliceEscape.bundle */, + ED07FE8864F33CBDEC73EA98 /* TestCommon.framework */, + 622CA373CF127B6E7D1CF2C6 /* TestCommon.framework */, + 97AF19A23453655F018CA0AD /* TestDriver.app */, + 3A8DE454A8DC3CD7065127F9 /* TestDriver.app */, + ); + name = Products; + sourceTree = "<group>"; + }; + D61530D06A14030743394D3D /* IceLocatorDiscovery */ = { + isa = PBXGroup; + children = ( + 56B83B797BCB69269ADCD3E3 /* IceLocatorDiscovery.ice */, + ); + name = IceLocatorDiscovery; + sourceTree = "<group>"; + }; + D63E083D5BB2C95B61B3B1C6 /* cpp */ = { + isa = PBXGroup; + children = ( + 66210F114B553771D3CE1FA8 /* src */, + ); + name = cpp; + sourceTree = "<group>"; + }; + D8F8877A9478A340AF62A924 /* TestCommon */ = { + isa = PBXGroup; + children = ( + 720EA8CACCCFF1F133F8D2C0 /* Info.plist */, + 303C14482E7E9485547E6FFD /* TestCommon.swift */, + ); + name = TestCommon; + sourceTree = "<group>"; + }; + DE33BD969BAFAAE83FA190DC /* iOS */ = { + isa = PBXGroup; + children = ( + AE2B43189A6D49AF626F7DA1 /* AppDelegate.swift */, + B0B9EA5E559A15DBFE57A278 /* Assets.xcassets */, + F2500E02186D763BCC5F8462 /* certs */, + B575236D078DC87353F74B3B /* Controller.ice */, + B8DEBAADD0B077756913BC0B /* ControllerI.swift */, + A95701B4918767C88D3D5D7F /* LaunchScreen.storyboard */, + 8F5CFDD336873528BE970BAD /* Main.storyboard */, + D6421091C6D40F11387EB3C9 /* ViewController.swift */, + ); + name = iOS; + sourceTree = "<group>"; + }; + DE617BB3A2707D5818AB4C92 /* IceLocatorDiscovery */ = { + isa = PBXGroup; + children = ( + 8971D2300FEA21980DEB02D9 /* PluginI.cpp */, + ); + name = IceLocatorDiscovery; + sourceTree = "<group>"; + }; + E5623B50676EA816011ED9A4 /* facets */ = { + isa = PBXGroup; + children = ( + 8A7FAB4CC1E0F31A6C450E57 /* AllTests.swift */, + 4E755B18219308B2817FC9D3 /* Client.swift */, + 1A19B0718445836901D562D6 /* Collocated.swift */, + D6AE3AEEADC3C6C8E0FB3C93 /* Server.swift */, + B2F7E5D229333C92C6146AC4 /* Test.ice */, + 6EC50A5D5A8848770F31576D /* TestI.swift */, + ); + name = facets; + sourceTree = "<group>"; + }; + ED94E10D89CE549A072B5364 /* ami */ = { + isa = PBXGroup; + children = ( + 737728F65186B1B6E7C4D3CA /* AllTests.swift */, + 5FEAC4680FEC7C7B72A4D8D0 /* Client.swift */, + 1F87AF0E3A8122C0FC3E3285 /* Collocated.swift */, + 5DC688033A9F5344D4120EA9 /* Server.swift */, + 9F1C91EC749224042C8D36BB /* Test.ice */, + 5084C1A132AC7CBADD433784 /* TestI.swift */, + ); + name = ami; + sourceTree = "<group>"; + }; + F4AD7FE876762E794885C871 /* timeout */ = { + isa = PBXGroup; + children = ( + EBA8930E4AC4EAFC06311651 /* AllTests.swift */, + 7992CA6EAF2AB4E48B3D2CF8 /* Client.swift */, + C62FA99000CCECFFFBB3FFC3 /* Server.swift */, + 9BBC2ACFB110C84DC4C862D6 /* Test.ice */, + 8EA814FAFAE21BEA08FDE9D1 /* TestI.swift */, + ); + name = timeout; + sourceTree = "<group>"; + }; + F657B1A1B433FC89D990186F /* Frameworks */ = { + isa = PBXGroup; + children = ( + 006C498FC29C3C2A1DA57F0D /* iOS */, + 07C3773296BC43CDBDF98C64 /* OS X */, + ); + name = Frameworks; + sourceTree = "<group>"; + }; + F8DECE0F5EDBDFE5FCD45FBF /* Glacier2 */ = { + isa = PBXGroup; + children = ( + F082C6550B7B297C967623CB /* Glacier2Swift.h */, + 1B423B3D857D4D34E3AF6A6F /* Info.plist */, + ); + name = Glacier2; + sourceTree = "<group>"; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 00B104AED9416121B97D91A3 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 1D07837786B9DB0204E635FA /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 30F50D9B40261C91F14E5C96 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4248A35F3FB4A8D526C81AD3 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 4C2BA0925DFDF55CAF2F736F /* Glacier2Swift.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 489BD903744DA19C19E026F5 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 5CD46829D28FEAEAF6B54361 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + E2B1766AFD0AFFCC24906198 /* IceGridSwift.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7426C88EC5026CE8CD2BA5FE /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 747E44C6693209B04611EB2D /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + EAFE7B6E90B4E28210E23F20 /* IceStormSwift.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 8E49A0F0FEEBE376420BABDA /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + F0E3E2CE73EF58A61D10DA71 /* Glacier2Swift.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AB5C9891F4878862CA960B64 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + ADA2C211EE8CA6D3190DF9E3 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BD44E77FC70C605C01A69123 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + C87E62CE201B6B249DAA4F74 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 07BAD62AB935D3806A4F0CF5 /* IceGridSwift.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D2D60ADF3B6B18FDCD0009EF /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DA88A36A16C6C838C6D56B26 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E31145556204683D167F9425 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + A4C1C4F567CF140824F8B265 /* IceSwift.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EA620C653B7E30ED72BF9EA5 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + E348179A50D26C4DA8FCE102 /* IceSwift.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F70AB71F887C610F8361E1C2 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + FD5D84A196818E906302B8B6 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 71C1398BB355540ADD88F160 /* IceStormSwift.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 0E6EE25C3FEF764F7E917F19 /* IceObjects iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 00DC0F2F1C01369A0700878F /* Build configuration list for PBXNativeTarget "IceObjects iOS" */; + buildPhases = ( + 7788041C047156D77683C2F4 /* Sources */, + 8F08D0A93FD5DD0208CAD2E3 /* Frameworks */, + 894D7CF4B8AB143739745A50 /* Resources */, + 8E60B19F21C5B4A4AF9D5732 /* Swiftformat & Swiftlint */, + ); + buildRules = ( + 7351B9B9477073FAE6E0D26D /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceObjects iOS"; + productName = IceObjects; + productReference = 1A71BC5C851C5EFD99C2216C /* IceObjects.bundle */; + productType = "com.apple.product-type.bundle"; + }; + 0F6C3879164CC37BCB92ED0D /* IceServantLocator macOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 5A6610EFB9852E2F1D0BBB18 /* Build configuration list for PBXNativeTarget "IceServantLocator macOS" */; + buildPhases = ( + 90AABFF49934AAEE5F066EE0 /* Sources */, + DBC428E71D8E261D29058BF9 /* Frameworks */, + EC3A8D8FA2C3B1D90749CB98 /* Resources */, + 0BCD59F4FD35D65C446001B9 /* Swiftformat & Swiftlint */, + ); + buildRules = ( + FE074612270D2D01A4152AF8 /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceServantLocator macOS"; + productName = IceServantLocator; + productReference = 2FDEB40857CC76910C985FA8 /* IceServantLocator.bundle */; + productType = "com.apple.product-type.bundle"; + }; + 11485B5FF929691A5833C99A /* IceExceptionsAMD iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 1164AD79AC5AF6C23013097F /* Build configuration list for PBXNativeTarget "IceExceptionsAMD iOS" */; + buildPhases = ( + B4E7CED0CD85F014EBDB3410 /* Sources */, + B6A79DCDE9D9AE26D8FE9A8B /* Frameworks */, + D6305337ED9A257B89B88714 /* Resources */, + F0D401906882543C1102B73D /* Swiftformat & Swiftlint */, + ); + buildRules = ( + 3048174FC0CDBD348D720DF5 /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceExceptionsAMD iOS"; + productName = IceExceptionsAMD; + productReference = 24323E3AB8CD7D9D405EEE9A /* IceExceptionsAMD.bundle */; + productType = "com.apple.product-type.bundle"; + }; + 150A64F2FB99464CBB6A17B4 /* IceSlicingObjectsAMD iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = AE8BC57EA2AB4EBC28B9573A /* Build configuration list for PBXNativeTarget "IceSlicingObjectsAMD iOS" */; + buildPhases = ( + D42229B03A20636AAAAB0E47 /* Sources */, + 83D4183FCE5BC06A66C996EE /* Frameworks */, + 17144D2EE9A103FA586999D9 /* Resources */, + 98CE746A717BE369A46619AC /* Swiftformat & Swiftlint */, + ); + buildRules = ( + 63DE5BE3DD93EE3C8080B978 /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceSlicingObjectsAMD iOS"; + productName = IceSlicingObjectsAMD; + productReference = 3294A580D3F62ABF8224BFCF /* IceSlicingObjectsAMD.bundle */; + productType = "com.apple.product-type.bundle"; + }; + 1797F20952E42DF66D6D33BF /* IceSlicingObjectsAMD macOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = C2113ABE86EB9C8AFBDDA40D /* Build configuration list for PBXNativeTarget "IceSlicingObjectsAMD macOS" */; + buildPhases = ( + 57CB86ED42F935F70F39CCEC /* Sources */, + 7CCAC59CCC1C20224E4C9295 /* Frameworks */, + 9CEAFAF5B8EA10E70384E64A /* Resources */, + BD649F1FECA070BB6C34E1C2 /* Swiftformat & Swiftlint */, + ); + buildRules = ( + 5C225EF103FE77A680D6BF5B /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceSlicingObjectsAMD macOS"; + productName = IceSlicingObjectsAMD; + productReference = E316B5856061FE815785CB34 /* IceSlicingObjectsAMD.bundle */; + productType = "com.apple.product-type.bundle"; + }; + 22F59FDE5EB8BF5D73B8AC27 /* IceServantLocator iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = D575B143D473999A00672E90 /* Build configuration list for PBXNativeTarget "IceServantLocator iOS" */; + buildPhases = ( + 89274EFC9F0FCBE53A2B07B6 /* Sources */, + 348933A76DE90C82A54B54FD /* Frameworks */, + 12EB63C51EC128BC14B82A40 /* Resources */, + AC22D6BEFF64BA37425F5CB8 /* Swiftformat & Swiftlint */, + ); + buildRules = ( + 7416C9658917D3EC0285A9DF /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceServantLocator iOS"; + productName = IceServantLocator; + productReference = 63FB631C2469790D2A77A6C1 /* IceServantLocator.bundle */; + productType = "com.apple.product-type.bundle"; + }; + 236F633B019405F93C02FB55 /* IceOptional iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 9C384A3E25BD251E40D57D8A /* Build configuration list for PBXNativeTarget "IceOptional iOS" */; + buildPhases = ( + 3ED709653FCDE2621BA9928D /* Sources */, + 6BA327C2DE5B78CBAF40A507 /* Frameworks */, + AB1F1426862C487BEC1E3F2D /* Resources */, + 790AF3F48CE496995B58F5E5 /* Swiftformat & Swiftlint */, + ); + buildRules = ( + B75331B01C95682DDCD0B614 /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceOptional iOS"; + productName = IceOptional; + productReference = 1090D6FDA9BED7FA1022BF1E /* IceOptional.bundle */; + productType = "com.apple.product-type.bundle"; + }; + 237A2EA83A430A250A1CF023 /* TestDriver iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 4CD9D3E2F5C588C7398821CB /* Build configuration list for PBXNativeTarget "TestDriver iOS" */; + buildPhases = ( + 639FC0622D98B50B4EF36774 /* Sources */, + 32D44846A344A21CB7507478 /* Frameworks */, + 5CDDED1270C8779D3518107B /* Resources */, + C8390CDF6F38C7C567D12DBB /* Swiftformat & Swiftlint */, + 1F3D1C97FCFD19D7796A624E /* Copy Frameworks */, + ); + buildRules = ( + 9F81E60913C5CB43FED2D7A3 /* PBXBuildRule */, + ); + dependencies = ( + 8322DADD440ADE62DF1ADF87 /* PBXTargetDependency */, + 20520F5711EDB357CAE528C2 /* PBXTargetDependency */, + 4BBD801FFA279D24C2886034 /* PBXTargetDependency */, + BD3437360179EB8F4F09A97B /* PBXTargetDependency */, + 17816D800CD521BBB25132C9 /* PBXTargetDependency */, + 610C6CE0835E11219FF62416 /* PBXTargetDependency */, + F783B7D3738C130759895DD7 /* PBXTargetDependency */, + B968FEC7AB635A1391FC1AE9 /* PBXTargetDependency */, + 4271FE212C67FEC8335FF699 /* PBXTargetDependency */, + C1BB224491C429B15C15C212 /* PBXTargetDependency */, + 5E7598EF287879E963467616 /* PBXTargetDependency */, + DEE0038BB655CF0F64F6E3B7 /* PBXTargetDependency */, + FCC7BF40CE19A02D94663295 /* PBXTargetDependency */, + 9FB6D1DF07112105470E62C2 /* PBXTargetDependency */, + 47792A8C4472EAFF1C842A8B /* PBXTargetDependency */, + 687304CA484644697465D240 /* PBXTargetDependency */, + 445FCF59AF98B87C3F790068 /* PBXTargetDependency */, + F10096E9AE0C8E858C094216 /* PBXTargetDependency */, + D454922D3CE8E4668F0BB52C /* PBXTargetDependency */, + 0A4552BA697F64F18A929FE2 /* PBXTargetDependency */, + 99CF6D43F19B63CEC62B820D /* PBXTargetDependency */, + 8B5C02816CE336BDC6565731 /* PBXTargetDependency */, + D777DC913B745B7AB834975B /* PBXTargetDependency */, + 186B5289B7476B9452DF85DE /* PBXTargetDependency */, + 660BDB072F9F74748CB196DB /* PBXTargetDependency */, + 5BD4AF5FBBA39668DD028153 /* PBXTargetDependency */, + F925C6277A1744B0440CCF2B /* PBXTargetDependency */, + 3534FAFA0F76209AEA6DF4D3 /* PBXTargetDependency */, + 42A13E71F5BF6E190CC2E47A /* PBXTargetDependency */, + E9A1B4C7119664F0C0B9B35B /* PBXTargetDependency */, + A15DDF77ED59E3A2BCD8663E /* PBXTargetDependency */, + 276C0A6E82F077250D45EB24 /* PBXTargetDependency */, + D4215BEFA0325C8E4BC4F26B /* PBXTargetDependency */, + A771EB0E1276F23A34192EC9 /* PBXTargetDependency */, + 03F5897538846D93BE119B45 /* PBXTargetDependency */, + 1B17A469827E2EA0C102E7F6 /* PBXTargetDependency */, + 6679812A27F52335DD200C3B /* PBXTargetDependency */, + ); + name = "TestDriver iOS"; + productName = TestDriver; + productReference = 97AF19A23453655F018CA0AD /* TestDriver.app */; + productType = "com.apple.product-type.application"; + }; + 2493729D7F7E9B76236AE7E5 /* Ice C++11 macOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 3FA6999F2D7D2B3ED250817A /* Build configuration list for PBXNativeTarget "Ice C++11 macOS" */; + buildPhases = ( + 489BD903744DA19C19E026F5 /* Headers */, + 0E0E560947EA34296BE2C38A /* Sources */, + 834E44D226629D2DBC477166 /* Frameworks */, + ); + buildRules = ( + 81678828C7636B74C219FEB5 /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "Ice C++11 macOS"; + productName = "Ice C++11 macOS"; + productReference = 763ACF31E2066730E340FCBA /* libIce C++11 macOS.a */; + productType = "com.apple.product-type.library.static"; + }; + 256AB7445137457382972306 /* IceInheritance macOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = B54D61ACC4D686D2D57F4857 /* Build configuration list for PBXNativeTarget "IceInheritance macOS" */; + buildPhases = ( + C818275ED716C7F9D2C08F69 /* Sources */, + D2DDC363A6AAE13787E5E769 /* Frameworks */, + 5AFD5C54E7B280E8587D560D /* Resources */, + 8E098D319385CA0F7BDBFF9F /* Swiftformat & Swiftlint */, + ); + buildRules = ( + F4F297FE04E053F5DD67600E /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceInheritance macOS"; + productName = IceInheritance; + productReference = 06F658397BEF3A330FDA4056 /* IceInheritance.bundle */; + productType = "com.apple.product-type.bundle"; + }; + 25815E6D3B269988C01FB074 /* IceStream macOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 1902E3C0C795602452807E2A /* Build configuration list for PBXNativeTarget "IceStream macOS" */; + buildPhases = ( + E865C0CC7BEB8A9A7DAEE229 /* Sources */, + 7FC2A18C3FE6CD24C564303C /* Frameworks */, + CB92180225130F77E2A198CC /* Resources */, + 1058E35C96B52E4750891F56 /* Swiftformat & Swiftlint */, + ); + buildRules = ( + DADE21C8D80DEF1A9172A712 /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceStream macOS"; + productName = IceStream; + productReference = B1ABFBA6618639D0436D60A6 /* IceStream.bundle */; + productType = "com.apple.product-type.bundle"; + }; + 260133A4DFC793C4FB6A92F8 /* IceIAP C++11 iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 7445DA2654536D777C8B6BE7 /* Build configuration list for PBXNativeTarget "IceIAP C++11 iOS" */; + buildPhases = ( + 00B104AED9416121B97D91A3 /* Headers */, + 46E64B10210FAD77E3812AA7 /* Sources */, + 5A2C3D7DA533E23F5D70A233 /* Frameworks */, + ); + buildRules = ( + 391533FE09988882C6FE19E3 /* PBXBuildRule */, + ); + dependencies = ( + 5CF36BCBA7080409B17A4F4B /* PBXTargetDependency */, + ); + name = "IceIAP C++11 iOS"; + productName = "IceIAP C++11 iOS"; + productReference = 2F2305815DDDCF67ED01341E /* libIceIAP C++11 iOS.a */; + productType = "com.apple.product-type.library.static"; + }; + 2DCD382A1A9C114E838BCE05 /* IceServantLocatorAMD iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 2AA6AFE1C9EADF4ABBF5EF3F /* Build configuration list for PBXNativeTarget "IceServantLocatorAMD iOS" */; + buildPhases = ( + 04787228C271543062C16D52 /* Sources */, + 2382030E79E75B7CD094A826 /* Frameworks */, + 7EAB144477BA454C071D1C77 /* Resources */, + FDEDE4094F7B807F338DCCB7 /* Swiftformat & Swiftlint */, + ); + buildRules = ( + B6233EACC486248603BEB0BB /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceServantLocatorAMD iOS"; + productName = IceServantLocatorAMD; + productReference = E4C6A05E68524E4013034DC9 /* IceServantLocatorAMD.bundle */; + productType = "com.apple.product-type.bundle"; + }; + 314BF239BAEBB53CD4F547C7 /* IceInfo macOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 9A293F1E291DE1CC30AEEF92 /* Build configuration list for PBXNativeTarget "IceInfo macOS" */; + buildPhases = ( + 9FA6264366207A92DE3B6D70 /* Sources */, + 3AA3A12CA79E077C330AF1B4 /* Frameworks */, + 087044929011E0232AD19FA0 /* Resources */, + 9D9CEC51708DD348A7079579 /* Swiftformat & Swiftlint */, + ); + buildRules = ( + F843308E9D7AD00BC93D1D71 /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceInfo macOS"; + productName = IceInfo; + productReference = 44A837C5842979328742845D /* IceInfo.bundle */; + productType = "com.apple.product-type.bundle"; + }; + 31A765FCD292D8FF91A02483 /* IceOptional macOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = F5C7F06292AEEF8C81B45C31 /* Build configuration list for PBXNativeTarget "IceOptional macOS" */; + buildPhases = ( + B04064040DF2494F1056FAEF /* Sources */, + 2F789686A76AD1A271F21086 /* Frameworks */, + D43533345D0CCE764D351F6E /* Resources */, + C36BB43C8F0ADC60651C5CBD /* Swiftformat & Swiftlint */, + ); + buildRules = ( + 55B272056F98C4C6281D2208 /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceOptional macOS"; + productName = IceOptional; + productReference = C4F874AD5EA2585BEB2788BD /* IceOptional.bundle */; + productType = "com.apple.product-type.bundle"; + }; + 36C60483DFECCC705AD9B224 /* IceProxy iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = BC54EBA5EE558ACE2F69B39E /* Build configuration list for PBXNativeTarget "IceProxy iOS" */; + buildPhases = ( + B21486CA78E4E77A9D1EDAA5 /* Sources */, + A08B58E98E2EEB6B3B59AA7F /* Frameworks */, + 00B69EBD3C4AC1200E9464D5 /* Resources */, + 2842D4E34C893789A28506EC /* Swiftformat & Swiftlint */, + ); + buildRules = ( + 91158ECFD776B1FA7C42A567 /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceProxy iOS"; + productName = IceProxy; + productReference = 4420FAEFE57B79BB5E834D56 /* IceProxy.bundle */; + productType = "com.apple.product-type.bundle"; + }; + 4217D4CAD719BC666712429F /* IceDefaultServant iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 78A589553E4A07C76E547C22 /* Build configuration list for PBXNativeTarget "IceDefaultServant iOS" */; + buildPhases = ( + CD11177610E4E8419738722E /* Sources */, + DCF184806D21C9FAF18862F0 /* Frameworks */, + B473B726F4760A0D67C671B0 /* Resources */, + 048D98E8D09ED31C2385D983 /* Swiftformat & Swiftlint */, + ); + buildRules = ( + 6F146FF4E37F95875C708A2C /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceDefaultServant iOS"; + productName = IceDefaultServant; + productReference = C2F3779808DBC5ED79EEFBF0 /* IceDefaultServant.bundle */; + productType = "com.apple.product-type.bundle"; + }; + 42BEFF63ED45F66D4DEB08F9 /* IceDefaultValue macOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 0693E9E0FE42C294CBEFE01B /* Build configuration list for PBXNativeTarget "IceDefaultValue macOS" */; + buildPhases = ( + 0A878E76A65CB96A3864C17D /* Sources */, + E156567A383DC405201DF07C /* Frameworks */, + A04185AF8D4D78ADFA775E51 /* Resources */, + A3476B45230EAEB88F0A07DC /* Swiftformat & Swiftlint */, + ); + buildRules = ( + F4D1F9E1E8C8A1857CA63843 /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceDefaultValue macOS"; + productName = IceDefaultValue; + productReference = 163EB528D7D26A1820BD9E1A /* IceDefaultValue.bundle */; + productType = "com.apple.product-type.bundle"; + }; + 45785A8A5F989B52F70FF09A /* Ice C++11 iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 4248D932A2666D00955AE051 /* Build configuration list for PBXNativeTarget "Ice C++11 iOS" */; + buildPhases = ( + 7426C88EC5026CE8CD2BA5FE /* Headers */, + A7CEDDED20999C5E17CF1E6E /* Sources */, + 3A6BDB2178C55BABC9342558 /* Frameworks */, + ); + buildRules = ( + 003B9501F7BB1905A5F86A2D /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "Ice C++11 iOS"; + productName = "Ice C++11 iOS"; + productReference = 4D09012971D6D0CE7EAB4D44 /* libIce C++11 iOS.a */; + productType = "com.apple.product-type.library.static"; + }; + 45F7C5838CC5BD1755605638 /* IceLocation iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 443E335707A4496739E5E077 /* Build configuration list for PBXNativeTarget "IceLocation iOS" */; + buildPhases = ( + CA47D98B43DA80DDD0FC872C /* Sources */, + 1352FC68CDEE267EB716E9E4 /* Frameworks */, + 1671ECE2C827E3A2168CC3FD /* Resources */, + E3B71D8E63266F05FC60CCE4 /* Swiftformat & Swiftlint */, + ); + buildRules = ( + 62A1F89110329E68FE9E9A08 /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceLocation iOS"; + productName = IceLocation; + productReference = 40E19608103D6C861DE753D1 /* IceLocation.bundle */; + productType = "com.apple.product-type.bundle"; + }; + 48A44724482F53DB8836FA44 /* IceSlicingExceptionsAMD macOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = DC26B7127A5AD4AC63469191 /* Build configuration list for PBXNativeTarget "IceSlicingExceptionsAMD macOS" */; + buildPhases = ( + E7411A3FDA98C80A951B3D80 /* Sources */, + 611ABD3D72607D13630EC1E9 /* Frameworks */, + 411731AA4FA6D1DE0C82F803 /* Resources */, + FF773AE065B1B2DCF6419C76 /* Swiftformat & Swiftlint */, + ); + buildRules = ( + 1F06297DE0CE11885D802518 /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceSlicingExceptionsAMD macOS"; + productName = IceSlicingExceptionsAMD; + productReference = E7DFD245235F517B54CBF4C5 /* IceSlicingExceptionsAMD.bundle */; + productType = "com.apple.product-type.bundle"; + }; + 49063474A0A32279B63B7C94 /* IceLocatorDiscovery C++11 macOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = C21E3330AE77BBF2779E0FD4 /* Build configuration list for PBXNativeTarget "IceLocatorDiscovery C++11 macOS" */; + buildPhases = ( + BD44E77FC70C605C01A69123 /* Headers */, + DA551386C6E8005A91839105 /* Sources */, + 7C4DF7A80D7FB5BBA70BB904 /* Frameworks */, + ); + buildRules = ( + 1A7A0D8945E651F6E13E2FC8 /* PBXBuildRule */, + ); + dependencies = ( + 887DBA1B991A5FDFAA9DD80C /* PBXTargetDependency */, + ); + name = "IceLocatorDiscovery C++11 macOS"; + productName = "IceLocatorDiscovery C++11 macOS"; + productReference = D0FF6202727A575BFDDD22A6 /* libIceLocatorDiscovery C++11 macOS.a */; + productType = "com.apple.product-type.library.static"; + }; + 49F81B65F4CF3D68A954EB61 /* IceBinding iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 0031764EBBF7CE1FFBDE16EC /* Build configuration list for PBXNativeTarget "IceBinding iOS" */; + buildPhases = ( + F515C258B1DD0477296D8A22 /* Sources */, + 4159387D8BD0D3B83B6F163C /* Frameworks */, + 6B4223D3B7D3DE420786A786 /* Resources */, + D050026B71C134BCE348B8E0 /* Swiftformat & Swiftlint */, + ); + buildRules = ( + B60F4122AD8E2C67BB5C225B /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceBinding iOS"; + productName = IceBinding; + productReference = EB0FE3041559F39854E345D2 /* IceBinding.bundle */; + productType = "com.apple.product-type.bundle"; + }; + 4FF834835F517C58332265C2 /* IceAcm macOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = FB5651C74C1F66044EE64455 /* Build configuration list for PBXNativeTarget "IceAcm macOS" */; + buildPhases = ( + 70BB71436D583DAC4F501086 /* Sources */, + 5ADB36B3ACBAF5E9E6CB32FB /* Frameworks */, + F6B3A795ECA905517829B5C3 /* Resources */, + 19FA46F3586E6B00AD655061 /* Swiftformat & Swiftlint */, + ); + buildRules = ( + 9DAD6DCC3F20712E3CA4F381 /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceAcm macOS"; + productName = IceAcm; + productReference = 370F2F863ADD7F42819C4498 /* IceAcm.bundle */; + productType = "com.apple.product-type.bundle"; + }; + 5014B8DF208C7227AC852821 /* IceOptionalAMD iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = A01D96E441A19D6A1F176F79 /* Build configuration list for PBXNativeTarget "IceOptionalAMD iOS" */; + buildPhases = ( + 5B99C997C342CF7999416E06 /* Sources */, + 18EEE5291CDB174FA1B0BB0F /* Frameworks */, + C19EF947A6AACF76301F8751 /* Resources */, + 3B8D632E6B178EB93D6BF2B3 /* Swiftformat & Swiftlint */, + ); + buildRules = ( + 73CF6609FDDDF03E902ABD4A /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceOptionalAMD iOS"; + productName = IceOptionalAMD; + productReference = CD79CFE2812A7B6899EE5178 /* IceOptionalAMD.bundle */; + productType = "com.apple.product-type.bundle"; + }; + 5397CEC0325F0EE19F8A4376 /* IceStream iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = B07AC4763680970F4EB98782 /* Build configuration list for PBXNativeTarget "IceStream iOS" */; + buildPhases = ( + C240BB11592A5CB0A586891E /* Sources */, + A534DEB57F0DC8A8A048894E /* Frameworks */, + 5C5BA62F39F51917F30E0F02 /* Resources */, + F223BC967FFBD96D811C89B8 /* Swiftformat & Swiftlint */, + ); + buildRules = ( + B9533011D4B4CF68A50D3DCE /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceStream iOS"; + productName = IceStream; + productReference = 2AFD482C35C038A3328285CC /* IceStream.bundle */; + productType = "com.apple.product-type.bundle"; + }; + 54419E5A07591C99AFD5FD44 /* IceStorm iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = F3BECDA9D59D7FDF85C9E09B /* Build configuration list for PBXNativeTarget "IceStorm iOS" */; + buildPhases = ( + 747E44C6693209B04611EB2D /* Headers */, + 456CE9910196B9E05D859E20 /* Sources */, + 0CB26E2169B00F7A2DB0B1C0 /* Frameworks */, + 0BCCEDAE49D5C717B84FD1C1 /* Resources */, + ); + buildRules = ( + 438B7ECD47FD3AA658D4E200 /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceStorm iOS"; + productName = IceStorm; + productReference = AFD52DD0720A627BDA1842A8 /* IceStorm.framework */; + productType = "com.apple.product-type.framework"; + }; + 5578B6E2AB09031CEEF966E5 /* IceSlicingExceptions macOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 0A35534575968831B5DC9C4A /* Build configuration list for PBXNativeTarget "IceSlicingExceptions macOS" */; + buildPhases = ( + 4CD852637B5C47C440C77D9E /* Sources */, + 534009FA9DB5BE498320D87A /* Frameworks */, + 721D9BE8B71FB348378E8D18 /* Resources */, + CCC21152B963230577158241 /* Swiftformat & Swiftlint */, + ); + buildRules = ( + 24A48ADB26FD93508A8F0BF4 /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceSlicingExceptions macOS"; + productName = IceSlicingExceptions; + productReference = 9DEB9C24CF5B2D68DEB44B1A /* IceSlicingExceptions.bundle */; + productType = "com.apple.product-type.bundle"; + }; + 57023FDC36B7ACF8AEB2B86F /* SliceEscape iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = E94C3A611BE84F572B7E4E16 /* Build configuration list for PBXNativeTarget "SliceEscape iOS" */; + buildPhases = ( + C99D9A84A446A57633B5A227 /* Sources */, + 6A3B9633885D2D65C1D43D7B /* Frameworks */, + 2D7E6C414184E005C47D6E19 /* Resources */, + CD14F29D897B1B08DA8189FC /* Swiftformat & Swiftlint */, + ); + buildRules = ( + 1D09C04D04D8820B9B01FCBC /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "SliceEscape iOS"; + productName = SliceEscape; + productReference = B0EC7FDB4F5FCF6C81624124 /* SliceEscape.bundle */; + productType = "com.apple.product-type.bundle"; + }; + 5F293FDF6A695184C8A8372C /* IceEnums iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 21863BDC60220870377B3A3C /* Build configuration list for PBXNativeTarget "IceEnums iOS" */; + buildPhases = ( + 3077B7C4CFAD36E055A50915 /* Sources */, + E0613312C1B42230C5ABB49B /* Frameworks */, + B38F698B5BAB17B20EC55AA7 /* Resources */, + 29F5937B853604F158B47DAD /* Swiftformat & Swiftlint */, + ); + buildRules = ( + ACE4C1211E8B730867620E1C /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceEnums iOS"; + productName = IceEnums; + productReference = A56C1DEC107F647E8C622C2E /* IceEnums.bundle */; + productType = "com.apple.product-type.bundle"; + }; + 5FBA2B46360A4138C56A793D /* IceScope macOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 2245C6E0D019A6DFAEB599D9 /* Build configuration list for PBXNativeTarget "IceScope macOS" */; + buildPhases = ( + 52E1E89BDA9F4A5FB2B12A0D /* Sources */, + 80407A8AE2A813EDFD4EEA41 /* Frameworks */, + AEF2C65B68CE16EE8638CD81 /* Resources */, + 2C58500566675790CA90C08F /* Swiftformat & Swiftlint */, + ); + buildRules = ( + A79C2B3BB4FA95353AEC6E3D /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceScope macOS"; + productName = IceScope; + productReference = D3EDEB5642C2CD4B0494A7E1 /* IceScope.bundle */; + productType = "com.apple.product-type.bundle"; + }; + 61C40BBD5F24B8422CF093CF /* IceSlicingExceptionsAMD iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 9A20D8F0C00474570C24F3DC /* Build configuration list for PBXNativeTarget "IceSlicingExceptionsAMD iOS" */; + buildPhases = ( + 46D25EEFF3F8DAE062FEEEF7 /* Sources */, + 9401830514081CB1DBAC4E8C /* Frameworks */, + 7EA3EF0A11DDD9098F425AD9 /* Resources */, + 14E03261EBB4B8396560906C /* Swiftformat & Swiftlint */, + ); + buildRules = ( + E47EF4FFFAAF5805E14117FB /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceSlicingExceptionsAMD iOS"; + productName = IceSlicingExceptionsAMD; + productReference = 9D4151C3144AD1696BC226C1 /* IceSlicingExceptionsAMD.bundle */; + productType = "com.apple.product-type.bundle"; + }; + 657CC3DC1EE12800505DDDC9 /* IceAmi macOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = C40D51C40E71A65F66FD1F08 /* Build configuration list for PBXNativeTarget "IceAmi macOS" */; + buildPhases = ( + 3CDBC07EDCA7FFD99EBBE999 /* Sources */, + 8A270B0FFD77017714CEED0F /* Frameworks */, + B47D987A2BAF7F9A755279DE /* Resources */, + 019D14701A282DAD93A8B783 /* Swiftformat & Swiftlint */, + ); + buildRules = ( + 5909B744599C57B24067778A /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceAmi macOS"; + productName = IceAmi; + productReference = EC4F7DC4FDFB8038EDA83A45 /* IceAmi.bundle */; + productType = "com.apple.product-type.bundle"; + }; + 68527026E5DA54703EEFFC18 /* IceExceptionsAMD macOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 81523C7B5B4E6D3E111EDB83 /* Build configuration list for PBXNativeTarget "IceExceptionsAMD macOS" */; + buildPhases = ( + 48F70FC33BED6A840925D74E /* Sources */, + 18B84A60A5A0DFC4F8B9566B /* Frameworks */, + B0DF1E81BBBBF867B30C5D76 /* Resources */, + 323618AEC92BF94A1555CF2D /* Swiftformat & Swiftlint */, + ); + buildRules = ( + 602F2D3A28A9EF642A5866CE /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceExceptionsAMD macOS"; + productName = IceExceptionsAMD; + productReference = 276F78A06FC75374D7EA1EA0 /* IceExceptionsAMD.bundle */; + productType = "com.apple.product-type.bundle"; + }; + 6AC0F4641FD881A3F9FDE7CC /* IceAdmin iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 31D198E4AA6840D31D409535 /* Build configuration list for PBXNativeTarget "IceAdmin iOS" */; + buildPhases = ( + CB38564D035A6D6CD3CDB4E4 /* Sources */, + 582590179E393196353F25FA /* Frameworks */, + D9372544AE3E301D85E5AA62 /* Resources */, + D2F494E642547597936C3733 /* Swiftformat & Swiftlint */, + ); + buildRules = ( + A93F3582D4B764D7F26063ED /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceAdmin iOS"; + productName = IceAdmin; + productReference = 24E1B6E96C21EC72DC064E34 /* IceAdmin.bundle */; + productType = "com.apple.product-type.bundle"; + }; + 711F18EAD4D0F01FD488DC77 /* IceRetry iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = A7A2E2C7E7DDFA6DAC33F5FA /* Build configuration list for PBXNativeTarget "IceRetry iOS" */; + buildPhases = ( + 24088B29D714E43AADFF8D3A /* Sources */, + 7E8F9EE7330374763485CA34 /* Frameworks */, + 583FD9E995705D246D684F2A /* Resources */, + 6A996D7C3B06A32006B33D81 /* Swiftformat & Swiftlint */, + ); + buildRules = ( + 6292329B2F6E00755334B2D9 /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceRetry iOS"; + productName = IceRetry; + productReference = 9C8A4C7448EF28DFB238F82D /* IceRetry.bundle */; + productType = "com.apple.product-type.bundle"; + }; + 74BF5B1E9E63F56637AF0C5C /* IceOperationsAMD macOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 01BBC75D8E6D10ADD917EB13 /* Build configuration list for PBXNativeTarget "IceOperationsAMD macOS" */; + buildPhases = ( + F9A4587F9B6D5EFF19522784 /* Sources */, + 13CFDDFD32597145E0B217EB /* Frameworks */, + 5086651D9AFD0342EB7B91DC /* Resources */, + 024824571502FB19BC6BDA03 /* Swiftformat & Swiftlint */, + ); + buildRules = ( + EEF682FA61A770A5B308FA2D /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceOperationsAMD macOS"; + productName = IceOperationsAMD; + productReference = C1CC2963FE8AC9E7D4159212 /* IceOperationsAMD.bundle */; + productType = "com.apple.product-type.bundle"; + }; + 77A82F6C0B911716D1E347D0 /* IceDiscovery C++11 macOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 995EF548110BEC5F2E0E4B6E /* Build configuration list for PBXNativeTarget "IceDiscovery C++11 macOS" */; + buildPhases = ( + AB5C9891F4878862CA960B64 /* Headers */, + 79D6F33478AE90D4AF3698AF /* Sources */, + AD191DE73396141DB758B17D /* Frameworks */, + ); + buildRules = ( + 69DC4FBED61811358DAEA05C /* PBXBuildRule */, + ); + dependencies = ( + 259CBB80BB6DF1C0A6B9BDA9 /* PBXTargetDependency */, + ); + name = "IceDiscovery C++11 macOS"; + productName = "IceDiscovery C++11 macOS"; + productReference = AE08479167FADF662AD41FB6 /* libIceDiscovery C++11 macOS.a */; + productType = "com.apple.product-type.library.static"; + }; + 7C66A461D824FEDB97CC886A /* TestDriver macOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 860BA81779B1057C6BDFADEA /* Build configuration list for PBXNativeTarget "TestDriver macOS" */; + buildPhases = ( + E1DACD4FE26A355CBEBB48E2 /* Sources */, + CC3E6CC9728CFC238B2DE381 /* Frameworks */, + D75D890D9E30BEB768BC214D /* Resources */, + 792DD935E1AC48577FF668E3 /* Swiftformat & Swiftlint */, + C7E0513EC35F13860EF88EE8 /* Copy Frameworks */, + ); + buildRules = ( + E52CB52E61CAC0887F2EACB3 /* PBXBuildRule */, + ); + dependencies = ( + E11F2C04377A9BCC9DC9EB79 /* PBXTargetDependency */, + 3130B9426808F5BE9894FC83 /* PBXTargetDependency */, + 5717DD03A56DA626B4C13D5F /* PBXTargetDependency */, + 794787C761EAE91B50754BC9 /* PBXTargetDependency */, + CB0D0ACD5E79EA1DFC4BC9D0 /* PBXTargetDependency */, + 43BC2E82853835A7E41B8BC4 /* PBXTargetDependency */, + 0CB3D611CC485324696280C0 /* PBXTargetDependency */, + 006B9B41F4F5EE6FF28D9C19 /* PBXTargetDependency */, + 45024CA1DF02907D9843ED05 /* PBXTargetDependency */, + 12CAA9280B6279BF0D6CBAEF /* PBXTargetDependency */, + A2979AA6CE972DD9CCE8CD25 /* PBXTargetDependency */, + EDDBAA8DB45F0771A4FAE7E2 /* PBXTargetDependency */, + B243D234E24C585462AE16F3 /* PBXTargetDependency */, + 55946A6CA521FF27621BC827 /* PBXTargetDependency */, + 190892129C0C09A4F3FC6EE0 /* PBXTargetDependency */, + 9F5D16E2EF33F9C648881B70 /* PBXTargetDependency */, + 61E07185501D6FE488B1AD2A /* PBXTargetDependency */, + 4395733CCBFB4B7FF475C199 /* PBXTargetDependency */, + 107F5C037399DAB44183A533 /* PBXTargetDependency */, + A9F25738819D2C8B66EA8A99 /* PBXTargetDependency */, + C47C6DA81C80B8B99A1756C5 /* PBXTargetDependency */, + 3C0933E62BB72399380A0F8D /* PBXTargetDependency */, + 66F667902E6E871DD1E3B745 /* PBXTargetDependency */, + 041ED8DE1EB27EAE73B94C50 /* PBXTargetDependency */, + E34C3EDA1BC5B503651D2A70 /* PBXTargetDependency */, + 20D39827E0A9CBE128842097 /* PBXTargetDependency */, + FEC8DBD8A0C9750176FC217C /* PBXTargetDependency */, + 2C026F2375A6F7D61094583D /* PBXTargetDependency */, + C4AB0A26B2905878D5FE8CEF /* PBXTargetDependency */, + 08D349DA96F2240521AF0889 /* PBXTargetDependency */, + A24E9E9CD13BE8EF2CEF0836 /* PBXTargetDependency */, + A18391A9FC69F43899E2E509 /* PBXTargetDependency */, + BB6F00CB87F66425337E3A1C /* PBXTargetDependency */, + 008654CB5536D5C1838C9536 /* PBXTargetDependency */, + 0C7F86FD4A3D98CB5A10166D /* PBXTargetDependency */, + 2BF0958BE813F113CF2363BB /* PBXTargetDependency */, + 5DF04CCCC77A9FB75E5FBF71 /* PBXTargetDependency */, + ); + name = "TestDriver macOS"; + productName = TestDriver; + productReference = 3A8DE454A8DC3CD7065127F9 /* TestDriver.app */; + productType = "com.apple.product-type.application"; + }; + 7C84DBD38E4C23C31AD1F23C /* Ice macOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = E8AE8122799EE9DADE090608 /* Build configuration list for PBXNativeTarget "Ice macOS" */; + buildPhases = ( + E31145556204683D167F9425 /* Headers */, + DAE8355EA9B9AE891DCFC72A /* Sources */, + FAD2DBCC890BA8EBE94B89E8 /* Frameworks */, + 2AC58A525759A23119997BCA /* Resources */, + 531219FF4FD2350FAC9C4483 /* Swiftformat & Swiftlint */, + ); + buildRules = ( + 5E72669125F43BC2FD4017BC /* PBXBuildRule */, + 2A12DF11B55CFDE8B87D9E24 /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "Ice macOS"; + productName = Ice; + productReference = C7C5BFE9B16BF237E7782A4F /* Ice.framework */; + productType = "com.apple.product-type.framework"; + }; + 7DB95DDC2A0D311A6441555E /* Glacier2 macOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 1744CEC058540FCD249D8FCD /* Build configuration list for PBXNativeTarget "Glacier2 macOS" */; + buildPhases = ( + 4248A35F3FB4A8D526C81AD3 /* Headers */, + 1B55E537488697782CDD04A0 /* Sources */, + DEB4D1CD132BA52A77435F73 /* Frameworks */, + A2AC10EFABF51F83DCADA768 /* Resources */, + ); + buildRules = ( + BE4B1AC7EA01314C2C60F5C6 /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "Glacier2 macOS"; + productName = Glacier2; + productReference = A7FBF20FA5074019E1952619 /* Glacier2.framework */; + productType = "com.apple.product-type.framework"; + }; + 7ED2831E7D9351394B42F694 /* IceFacets macOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = A262792E3CF4FC040D9B0E32 /* Build configuration list for PBXNativeTarget "IceFacets macOS" */; + buildPhases = ( + C86C273044280C495E633F1C /* Sources */, + 8E082CECC815282113FA030A /* Frameworks */, + 2AE620A5D57F1B21F3CBC54A /* Resources */, + 5B2F3ADA2C2F1EF4FDC1AC26 /* Swiftformat & Swiftlint */, + ); + buildRules = ( + 1FB2645D9DE2245781BB5053 /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceFacets macOS"; + productName = IceFacets; + productReference = 159667676124BA50280F0687 /* IceFacets.bundle */; + productType = "com.apple.product-type.bundle"; + }; + 8172B0B43BFF7CD036F8AAF8 /* IceUdp macOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 9DC3AAFB8F39444B56D445BF /* Build configuration list for PBXNativeTarget "IceUdp macOS" */; + buildPhases = ( + 6F6DD4F8F2D8420F6ABDDD53 /* Sources */, + AF99C4067403F6C7848F75A7 /* Frameworks */, + 1206A25E8FBEF5CA014F8624 /* Resources */, + 78D30F513F806756E3126D2E /* Swiftformat & Swiftlint */, + ); + buildRules = ( + ED28E40911C8A0394AA631CC /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceUdp macOS"; + productName = IceUdp; + productReference = 46C6B15FA2B196879FD8EC27 /* IceUdp.bundle */; + productType = "com.apple.product-type.bundle"; + }; + 84B57B17572B472DB9473F3A /* IceSlicingObjects iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = FDE882A2EED792B82A140FBB /* Build configuration list for PBXNativeTarget "IceSlicingObjects iOS" */; + buildPhases = ( + 698EFE4F045A30BF8B42B0D2 /* Sources */, + 67A7692B858A0D1BF98D73D7 /* Frameworks */, + 57D4C558B8E33CCB2C929D88 /* Resources */, + 74C20D18A4D815E0CC532106 /* Swiftformat & Swiftlint */, + ); + buildRules = ( + 08C8EC677A55C41E43877953 /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceSlicingObjects iOS"; + productName = IceSlicingObjects; + productReference = F07BAE3EB07F426600EE9C4C /* IceSlicingObjects.bundle */; + productType = "com.apple.product-type.bundle"; + }; + 8570DC29A49AAFCC705FC566 /* IceEnums macOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = F73C7AC99DF8213BD4860AAA /* Build configuration list for PBXNativeTarget "IceEnums macOS" */; + buildPhases = ( + 29B68F02E05F83DCAFEF8B5A /* Sources */, + 0E5061AC7563252F1744C867 /* Frameworks */, + A4282E77096772CCCDCE214A /* Resources */, + 84102B3C1B69D388844B7C61 /* Swiftformat & Swiftlint */, + ); + buildRules = ( + F8EE6D464C07D3BE49318C57 /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceEnums macOS"; + productName = IceEnums; + productReference = 0D1C059D4BA5E01CB0ADFBB4 /* IceEnums.bundle */; + productType = "com.apple.product-type.bundle"; + }; + 881250C6D8BE80DB29A0385B /* IceUdp iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 13B341B13B01A154F8A441B5 /* Build configuration list for PBXNativeTarget "IceUdp iOS" */; + buildPhases = ( + 6593B7827CE0E2777768F254 /* Sources */, + BD8731FC73EB75AB87416F4D /* Frameworks */, + 5D4CDC8CA54BAD127117013D /* Resources */, + 880CE31A63BB109A3B078F7F /* Swiftformat & Swiftlint */, + ); + buildRules = ( + 737CEDF16303C5B23CF8A479 /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceUdp iOS"; + productName = IceUdp; + productReference = 31F3F7F8FC3116D9134C7D81 /* IceUdp.bundle */; + productType = "com.apple.product-type.bundle"; + }; + 88B4DDB0B9CC0F6E3EF41043 /* IceScope iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 65154986761E183CB7516105 /* Build configuration list for PBXNativeTarget "IceScope iOS" */; + buildPhases = ( + 8700FF4E250B0112EC4C3A44 /* Sources */, + 229D7F72384501F104317CC4 /* Frameworks */, + 6BFFEC8F02D0B5F7DCABC1DB /* Resources */, + F0003C718737F91E88675B61 /* Swiftformat & Swiftlint */, + ); + buildRules = ( + CF7FEBFE09B5FC9E9856FD30 /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceScope iOS"; + productName = IceScope; + productReference = 9DE0D76C9B9CA73D2B49DEC5 /* IceScope.bundle */; + productType = "com.apple.product-type.bundle"; + }; + 8CA5088455BC6A8877F6585D /* IceServantLocatorAMD macOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 27AFFE32271EEDE0494F554B /* Build configuration list for PBXNativeTarget "IceServantLocatorAMD macOS" */; + buildPhases = ( + F861973553D003151EFAABFA /* Sources */, + 4FDDF4A178B311F588D85ECB /* Frameworks */, + FB50D01A1BB55229D9A85C63 /* Resources */, + 20875BB188EC7D63393F015F /* Swiftformat & Swiftlint */, + ); + buildRules = ( + 0E68F9302DC12DC520345FD0 /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceServantLocatorAMD macOS"; + productName = IceServantLocatorAMD; + productReference = FB37603A7E1259106EF33F05 /* IceServantLocatorAMD.bundle */; + productType = "com.apple.product-type.bundle"; + }; + 8CDF569BE7FD7056CC64AEBD /* IceAcm iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 23300D6AF9AF253A57D38604 /* Build configuration list for PBXNativeTarget "IceAcm iOS" */; + buildPhases = ( + F8F3577B96576512D2B37AC4 /* Sources */, + 19A57BCB2F446B5D55BD7465 /* Frameworks */, + FC35415F93D1EF7E9612C6A4 /* Resources */, + 78CC54A721E8FDB01902C7D4 /* Swiftformat & Swiftlint */, + ); + buildRules = ( + FCCFFB48F510D0BA28EC5CC0 /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceAcm iOS"; + productName = IceAcm; + productReference = FCD76BA365CFA076EF297D33 /* IceAcm.bundle */; + productType = "com.apple.product-type.bundle"; + }; + 8D0BD3C20FA17536D15BAA1F /* IceOperations iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 38C86AB3D650FA81C19A683D /* Build configuration list for PBXNativeTarget "IceOperations iOS" */; + buildPhases = ( + 0BCD633A1019D57041B34AED /* Sources */, + 470A644AB18F3ED32DB5707A /* Frameworks */, + DEF0F9E31175CE53D8A65FA0 /* Resources */, + CB39FBFFD99B12BD3675DCC3 /* Swiftformat & Swiftlint */, + ); + buildRules = ( + 4D81AE83B3E22C9A1F2AFA1D /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceOperations iOS"; + productName = IceOperations; + productReference = 03C4192F0524006FB342718D /* IceOperations.bundle */; + productType = "com.apple.product-type.bundle"; + }; + 8E3EA7797A22D89ACC8767DA /* IceSlicingObjects macOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = A5F694D460E3EBC74DEEFB05 /* Build configuration list for PBXNativeTarget "IceSlicingObjects macOS" */; + buildPhases = ( + 9B6E729721B89272F5E9F530 /* Sources */, + FD32ADBD62C22D842118D69A /* Frameworks */, + 944FD4A6A076D9EF3C36BA71 /* Resources */, + 9C4025DBD0C1BE1AFC7693DF /* Swiftformat & Swiftlint */, + ); + buildRules = ( + A2220AF9E28856CFD4E719AB /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceSlicingObjects macOS"; + productName = IceSlicingObjects; + productReference = 2E31C452E06DF02A32D74158 /* IceSlicingObjects.bundle */; + productType = "com.apple.product-type.bundle"; + }; + 901E6B19A44D60C62D27A9F6 /* IceStorm macOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = DE3B9A4AD7F72C14B9320241 /* Build configuration list for PBXNativeTarget "IceStorm macOS" */; + buildPhases = ( + FD5D84A196818E906302B8B6 /* Headers */, + 29BEF6C44E97860CD25C8723 /* Sources */, + 8E694883749FC94938D33872 /* Frameworks */, + 0D98A14FE6EF5931D920EE64 /* Resources */, + ); + buildRules = ( + CD14939EF065EE302AF7BE7C /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceStorm macOS"; + productName = IceStorm; + productReference = 6313F62859B19DC28BB6E1E0 /* IceStorm.framework */; + productType = "com.apple.product-type.framework"; + }; + 91E917098ED4D8FE96B582B1 /* IceProperties macOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 834FA034D3B571904F61E5A8 /* Build configuration list for PBXNativeTarget "IceProperties macOS" */; + buildPhases = ( + 33963F1BC6E9C324D7C02CB5 /* Sources */, + 2CCEA44A88FD8AC2BD42BA52 /* Frameworks */, + 301CF86AAB62244AE803FA7C /* Resources */, + 38C74A5EE8EEF4FA22F3A182 /* Swiftformat & Swiftlint */, + ); + buildRules = ( + C9A02F8C41309B27A94769B7 /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceProperties macOS"; + productName = IceProperties; + productReference = A54D26BC0704A7705CF6E082 /* IceProperties.bundle */; + productType = "com.apple.product-type.bundle"; + }; + 94F774D983D7806C8B24980D /* IceHold iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 920D5F59AA4E05CF5D025989 /* Build configuration list for PBXNativeTarget "IceHold iOS" */; + buildPhases = ( + 1C6C119563C3CADBA68365CA /* Sources */, + 28BA277A191684B92F5157EA /* Frameworks */, + 3BBE1343E245BBD553764789 /* Resources */, + CDBA3E3B5161F57700229A1D /* Swiftformat & Swiftlint */, + ); + buildRules = ( + C8689F79F090ECAEB4F5A265 /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceHold iOS"; + productName = IceHold; + productReference = 3F54218F7DD6E867D382BC83 /* IceHold.bundle */; + productType = "com.apple.product-type.bundle"; + }; + 9762E32D99613E83FD20D0D8 /* IceInvoke iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 2290535536799C36A40A47B9 /* Build configuration list for PBXNativeTarget "IceInvoke iOS" */; + buildPhases = ( + 338F73FF6E01277814F21810 /* Sources */, + AEEBC552010F13ECE54FD609 /* Frameworks */, + 2DB94351AB29963CC589DC89 /* Resources */, + 5B176D693FEE448B7AE991FC /* Swiftformat & Swiftlint */, + ); + buildRules = ( + 9C0C4722090A4588D15EB573 /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceInvoke iOS"; + productName = IceInvoke; + productReference = 431588ED0E80F0264A83FA35 /* IceInvoke.bundle */; + productType = "com.apple.product-type.bundle"; + }; + 9824CA3BDAE389C6BFE9724E /* IceObjects macOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = FE0A728782657A0153EF18EF /* Build configuration list for PBXNativeTarget "IceObjects macOS" */; + buildPhases = ( + 74A1A11CF5BB04466E9662FD /* Sources */, + DA4A829881025961BEAFADF4 /* Frameworks */, + A416458377F4F350AE5C27F6 /* Resources */, + 60435BBC810217A7EDCB6C14 /* Swiftformat & Swiftlint */, + ); + buildRules = ( + D5EB8445E119E6CA7818A5D0 /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceObjects macOS"; + productName = IceObjects; + productReference = 877C33F38770D875BE148A14 /* IceObjects.bundle */; + productType = "com.apple.product-type.bundle"; + }; + 9C752DD36F100CB9CBBD0EF7 /* IceAdapterDeactivation iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 3650B23EAEA1C33FC3AE115D /* Build configuration list for PBXNativeTarget "IceAdapterDeactivation iOS" */; + buildPhases = ( + 31E322B8EF102964F7CA79F2 /* Sources */, + 8F751BCAE07FDFEB1B7CB132 /* Frameworks */, + 1DF1C94AE6AA6B9C4A049B2D /* Resources */, + 5B1AB4415C3B92E1EA29C4D9 /* Swiftformat & Swiftlint */, + ); + buildRules = ( + 72D468445B71798A23D9885C /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceAdapterDeactivation iOS"; + productName = IceAdapterDeactivation; + productReference = 54FBF62F717A8E7B3E7E34D9 /* IceAdapterDeactivation.bundle */; + productType = "com.apple.product-type.bundle"; + }; + 9D14EA76CE6437452C395F6C /* IceSSLConfiguration iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = FC0FEFE43DD1AAE3F7CD1E1A /* Build configuration list for PBXNativeTarget "IceSSLConfiguration iOS" */; + buildPhases = ( + 3BBEF1222FE03CD4F360309A /* Sources */, + 7995BE5E19599C1FA781CE2E /* Frameworks */, + 1EC471CB50F46150C6DEEFE2 /* Resources */, + 776A8DB1FF108E0A92835029 /* Swiftformat & Swiftlint */, + ); + buildRules = ( + 6260A8F64B9A210FBBAB2897 /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceSSLConfiguration iOS"; + productName = IceSSLConfiguration; + productReference = 309B6BAC2D50E248C757311C /* IceSSLConfiguration.bundle */; + productType = "com.apple.product-type.bundle"; + }; + 9E009F0CE808A84D564F958C /* IceGrid macOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = D0DD8F16256DE56BAA53F4D2 /* Build configuration list for PBXNativeTarget "IceGrid macOS" */; + buildPhases = ( + 5CD46829D28FEAEAF6B54361 /* Headers */, + B8B9998F41B71993D900709C /* Sources */, + D1EF8257F9376D305E3B66BA /* Frameworks */, + 0CC7DC380B9CF2C656C97343 /* Resources */, + ); + buildRules = ( + BE2B87E63C236651504D89F6 /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceGrid macOS"; + productName = IceGrid; + productReference = F678EA062EF28FA715CCFB1F /* IceGrid.framework */; + productType = "com.apple.product-type.framework"; + }; + 9EDC064A438ACAEEABFFCD28 /* IceLocation macOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 340F8FD9EC1E08196120BF04 /* Build configuration list for PBXNativeTarget "IceLocation macOS" */; + buildPhases = ( + A12B01FEBF9D55F44E06FB69 /* Sources */, + 6FA2AD9F7839DEB3CDA3E4FE /* Frameworks */, + 9D4B8E8DDBA5F35C5FACE564 /* Resources */, + B50828C7CCBCD7DF9CF3EE26 /* Swiftformat & Swiftlint */, + ); + buildRules = ( + 3CF3596100C74A8696A0A02D /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceLocation macOS"; + productName = IceLocation; + productReference = 3FBDEBDB8E0DAC4C18CF8225 /* IceLocation.bundle */; + productType = "com.apple.product-type.bundle"; + }; + A0BFE78E710B0B1240650735 /* IceProperties iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = E9D4F2554457A843F955B80E /* Build configuration list for PBXNativeTarget "IceProperties iOS" */; + buildPhases = ( + 7EF1C3DD1FED1DD1C07154B8 /* Sources */, + 8F4D0BA79962A7F9407F3F1B /* Frameworks */, + 06A231409638A2A78410D63C /* Resources */, + BCDE09022622AB4B24070211 /* Swiftformat & Swiftlint */, + ); + buildRules = ( + D6D287ED63E53D852C6076EF /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceProperties iOS"; + productName = IceProperties; + productReference = 7DACE4CE00C90B00137CDD05 /* IceProperties.bundle */; + productType = "com.apple.product-type.bundle"; + }; + A10509EA7E4240467A68D03B /* IceOptionalAMD macOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 0D2C3C71D73A8722B5BFF7B7 /* Build configuration list for PBXNativeTarget "IceOptionalAMD macOS" */; + buildPhases = ( + 010B70C397B1B5787D630A28 /* Sources */, + 459022E5F2565BDE4E5EE06F /* Frameworks */, + 84E1C228A71501DF05832C72 /* Resources */, + EB72C016336F26A16E545E29 /* Swiftformat & Swiftlint */, + ); + buildRules = ( + 2A5F3A16565D69D87C274592 /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceOptionalAMD macOS"; + productName = IceOptionalAMD; + productReference = F9C53C5323A0B0F56DD82A34 /* IceOptionalAMD.bundle */; + productType = "com.apple.product-type.bundle"; + }; + A4E0B67AA46118886F999666 /* TestCommon iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 8C5C720FCAA90DF2558F5059 /* Build configuration list for PBXNativeTarget "TestCommon iOS" */; + buildPhases = ( + ADA2C211EE8CA6D3190DF9E3 /* Headers */, + 91267EC23AE3EEB81A311247 /* Sources */, + 0B33EA77011771D01E94D361 /* Frameworks */, + 10869DB2A2EBE4CA8D057F65 /* Resources */, + 17E3F816C8C4E8180745EEFE /* Swiftformat & Swiftlint */, + ); + buildRules = ( + EC7E98B0C8C4C0DEE9D8690D /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "TestCommon iOS"; + productName = TestCommon; + productReference = 622CA373CF127B6E7D1CF2C6 /* TestCommon.framework */; + productType = "com.apple.product-type.framework"; + }; + ABD61E830D609E366325ED4F /* IceInfo iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = A724B6834EA384A8E0E399AB /* Build configuration list for PBXNativeTarget "IceInfo iOS" */; + buildPhases = ( + 6508E2AC3C86E305BE6F946D /* Sources */, + 24D46C5133819D2A67A425AF /* Frameworks */, + 6D53BEA8961034491371B44A /* Resources */, + 157182C7131B506457B6E557 /* Swiftformat & Swiftlint */, + ); + buildRules = ( + F29DE55533689D340C3D49A3 /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceInfo iOS"; + productName = IceInfo; + productReference = CAAF3F145A79FCDEC66BAB27 /* IceInfo.bundle */; + productType = "com.apple.product-type.bundle"; + }; + AEDF86E2A1A75EBE97C06C0F /* IceAmi iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 4C0AE10F999D3D11B2B8B434 /* Build configuration list for PBXNativeTarget "IceAmi iOS" */; + buildPhases = ( + C62D406F3E7014A9934F9C0A /* Sources */, + 31251005FB98579EF64C7206 /* Frameworks */, + AFE082D3720381B756F9D65E /* Resources */, + 9A4F6E3D731A0ADFA8EA2344 /* Swiftformat & Swiftlint */, + ); + buildRules = ( + 64BA6853FCCD1F2E521EA64F /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceAmi iOS"; + productName = IceAmi; + productReference = FFB017C2AB2174BF2CA9A97C /* IceAmi.bundle */; + productType = "com.apple.product-type.bundle"; + }; + B02741DA7E909B59FFEF2A32 /* IceOperationsAMD iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = E1F763C73525763B2AD802FF /* Build configuration list for PBXNativeTarget "IceOperationsAMD iOS" */; + buildPhases = ( + 0684B8F4DAC806C0960F0C1A /* Sources */, + 6E98D219122ECA2DDF030542 /* Frameworks */, + 6BD4ADD32B7268373E9478F5 /* Resources */, + 2A51585447E25A160E8AE83E /* Swiftformat & Swiftlint */, + ); + buildRules = ( + EF69AFC63539002AFED1096F /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceOperationsAMD iOS"; + productName = IceOperationsAMD; + productReference = A9177E1CD1131BBB556DB172 /* IceOperationsAMD.bundle */; + productType = "com.apple.product-type.bundle"; + }; + B1AFC88483CCA0F0F0DB5700 /* Glacier2 iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 257B47045BEB3B6FD57D9EB8 /* Build configuration list for PBXNativeTarget "Glacier2 iOS" */; + buildPhases = ( + 8E49A0F0FEEBE376420BABDA /* Headers */, + 35B0F84E247E29707BE6358E /* Sources */, + 8F82ACBDECEAD662103746C3 /* Frameworks */, + 8D373242EA40EF6D878096A6 /* Resources */, + ); + buildRules = ( + 6B9D84578B5DD1714694A501 /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "Glacier2 iOS"; + productName = Glacier2; + productReference = 4EF3778FE0BD6309950B7C0F /* Glacier2.framework */; + productType = "com.apple.product-type.framework"; + }; + B3F277E37C4EA69886ACF274 /* Ice iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = F8253EAD1BB03F9D228A2D26 /* Build configuration list for PBXNativeTarget "Ice iOS" */; + buildPhases = ( + EA620C653B7E30ED72BF9EA5 /* Headers */, + 847CA7DD459214D417C2ACA6 /* Sources */, + 2046609F666199A5EB78F407 /* Frameworks */, + F76516ACB895F0C72662DF40 /* Resources */, + 6B96FAEAF568395E69EAF811 /* Swiftformat & Swiftlint */, + ); + buildRules = ( + 52F9E387C3DAB41D8FF3D9FC /* PBXBuildRule */, + B934FB66E26A024F01CC1443 /* PBXBuildRule */, + 922664450128B20CA5BB4D3B /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "Ice iOS"; + productName = Ice; + productReference = EAD5CB65C9E749E09CE7AAEA /* Ice.framework */; + productType = "com.apple.product-type.framework"; + }; + B40D564181E5D7DC364AC8AF /* IceTimeout macOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 943B554E2B959841FB3D455A /* Build configuration list for PBXNativeTarget "IceTimeout macOS" */; + buildPhases = ( + C0306080D7A2ABCA9B48D54E /* Sources */, + FE7042FA290DCC80B9851CC0 /* Frameworks */, + 07E024DE2788D6F3ACE7067F /* Resources */, + D118CA2B1E961E60485DAE5A /* Swiftformat & Swiftlint */, + ); + buildRules = ( + 67DDDD1F345F8F5C1CA13F1A /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceTimeout macOS"; + productName = IceTimeout; + productReference = 652F819A999ABAB56CFC4A89 /* IceTimeout.bundle */; + productType = "com.apple.product-type.bundle"; + }; + BB5F7AA59CB20B5A1FF0908F /* IceProxyAMD iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = DF0BCA79C8409E9C8E9CC35E /* Build configuration list for PBXNativeTarget "IceProxyAMD iOS" */; + buildPhases = ( + 17886823F20D19C6FE38E5F6 /* Sources */, + BAF136ADFC40A70AD078D530 /* Frameworks */, + 21C9842E140F3F824E110F7C /* Resources */, + BE24F5C0AE46B781B9A701A7 /* Swiftformat & Swiftlint */, + ); + buildRules = ( + 2A35C9838AA99D3AD0B5C00C /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceProxyAMD iOS"; + productName = IceProxyAMD; + productReference = 056AD68493E2D83EBA27D71B /* IceProxyAMD.bundle */; + productType = "com.apple.product-type.bundle"; + }; + BD2239AA5C2CE6CBF5B95140 /* IceDiscovery C++11 iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 639074C5C3FE4260E7C85186 /* Build configuration list for PBXNativeTarget "IceDiscovery C++11 iOS" */; + buildPhases = ( + DA88A36A16C6C838C6D56B26 /* Headers */, + 59082FA8555687DDE3A718F4 /* Sources */, + 3F3A511AC8BAB749D5D33A9E /* Frameworks */, + ); + buildRules = ( + C749A593CC0643D746976854 /* PBXBuildRule */, + ); + dependencies = ( + 62C561306DF1C2803F140A3A /* PBXTargetDependency */, + ); + name = "IceDiscovery C++11 iOS"; + productName = "IceDiscovery C++11 iOS"; + productReference = 496A08AE7826BC0BB1770B33 /* libIceDiscovery C++11 iOS.a */; + productType = "com.apple.product-type.library.static"; + }; + BD31C59FF75A685B5DCFEB10 /* IceSSL C++11 iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 3C7450D4B28EECD28449C203 /* Build configuration list for PBXNativeTarget "IceSSL C++11 iOS" */; + buildPhases = ( + 30F50D9B40261C91F14E5C96 /* Headers */, + 0BC380351975D42A306EBFB4 /* Sources */, + 1EB688C3976B4168BEDE0805 /* Frameworks */, + ); + buildRules = ( + 25EA407582BC66F024E4AB0C /* PBXBuildRule */, + ); + dependencies = ( + ED0F836F978EBA92BFDDB759 /* PBXTargetDependency */, + ); + name = "IceSSL C++11 iOS"; + productName = "IceSSL C++11 iOS"; + productReference = 4ECA873E5993DD4D031920B7 /* libIceSSL C++11 iOS.a */; + productType = "com.apple.product-type.library.static"; + }; + C1A0392775F4A0ED6AB29083 /* IceHold macOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 6E1F6A917F16223B41B06A4F /* Build configuration list for PBXNativeTarget "IceHold macOS" */; + buildPhases = ( + F6AF2442CFCEE58438D1BEE1 /* Sources */, + 1AD8035A119DED01BD9D1DB9 /* Frameworks */, + DC829882EF113EB4735FCD0C /* Resources */, + 6DAFC6F54760BB21DC5190C8 /* Swiftformat & Swiftlint */, + ); + buildRules = ( + FFC79856198B8E73392DC86B /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceHold macOS"; + productName = IceHold; + productReference = E4E251AABEC70AA1739E5859 /* IceHold.bundle */; + productType = "com.apple.product-type.bundle"; + }; + C52C439B2C3C7D798C1D14E6 /* IceSSLConfiguration macOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 3AECE63190ABF9D5058AC87F /* Build configuration list for PBXNativeTarget "IceSSLConfiguration macOS" */; + buildPhases = ( + AE29C3466F250BD3A29EFE59 /* Sources */, + 00DE134AEEA7850EFC3B0284 /* Frameworks */, + DA67C8C38AB2D19948B072FA /* Resources */, + A6787936B6124FD0281B2DA8 /* Swiftformat & Swiftlint */, + ); + buildRules = ( + D712923D7E3D556C101AD1D2 /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceSSLConfiguration macOS"; + productName = IceSSLConfiguration; + productReference = EF5E76091B28D91259A24A57 /* IceSSLConfiguration.bundle */; + productType = "com.apple.product-type.bundle"; + }; + C9ECE36CD6C3FDC548AE1395 /* IceAdmin macOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = AA538079E713D700058162C3 /* Build configuration list for PBXNativeTarget "IceAdmin macOS" */; + buildPhases = ( + F5883CD437B7A0D82DCE900E /* Sources */, + F062370A33DC7A9CFA047F67 /* Frameworks */, + AA00569E3AEEE670AC1ECF60 /* Resources */, + B820A6C4D3CEA5E2BB6FECC6 /* Swiftformat & Swiftlint */, + ); + buildRules = ( + 2743F08E3A7D0D1FE30AB887 /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceAdmin macOS"; + productName = IceAdmin; + productReference = E2778EFD3BDF060F7D28FA43 /* IceAdmin.bundle */; + productType = "com.apple.product-type.bundle"; + }; + CD60EDBCFC00CB1131D00C99 /* IceLocatorDiscovery C++11 iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 0A7E46E85E8652C51334F7DF /* Build configuration list for PBXNativeTarget "IceLocatorDiscovery C++11 iOS" */; + buildPhases = ( + D2D60ADF3B6B18FDCD0009EF /* Headers */, + 18EFC8B013F6D95A6EA9A8DF /* Sources */, + 55988C16065B29DFFBC3CC10 /* Frameworks */, + ); + buildRules = ( + FEB623AA03D1E2B3F7DA8AD7 /* PBXBuildRule */, + ); + dependencies = ( + 143DEB2A46BEEEC38F0F280F /* PBXTargetDependency */, + ); + name = "IceLocatorDiscovery C++11 iOS"; + productName = "IceLocatorDiscovery C++11 iOS"; + productReference = 6A685447CC038C3FC379393F /* libIceLocatorDiscovery C++11 iOS.a */; + productType = "com.apple.product-type.library.static"; + }; + CE781DFB6EA5764475DE56D1 /* IceSlicingExceptions iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = C96292BD292EBCD6FEE61F40 /* Build configuration list for PBXNativeTarget "IceSlicingExceptions iOS" */; + buildPhases = ( + B76807A5513FE776CEC36C86 /* Sources */, + 106A499DADD9733D02C52CAA /* Frameworks */, + 78925E0910B6143F59ECA6D7 /* Resources */, + 8CDCF495DC29619530736622 /* Swiftformat & Swiftlint */, + ); + buildRules = ( + A62DB7E92FFBF4588AF5173B /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceSlicingExceptions iOS"; + productName = IceSlicingExceptions; + productReference = BD3914845D38EA92426A1C87 /* IceSlicingExceptions.bundle */; + productType = "com.apple.product-type.bundle"; + }; + D231743A745D9E8937920F9A /* IceGrid iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 955B7D4F967C455351A50E9A /* Build configuration list for PBXNativeTarget "IceGrid iOS" */; + buildPhases = ( + C87E62CE201B6B249DAA4F74 /* Headers */, + 04A6ADCE55EC019F165D750E /* Sources */, + 487678C7744916670622E04E /* Frameworks */, + BC20FADDA811D7452FA1C7A3 /* Resources */, + ); + buildRules = ( + 7BB869EFF6B0DCD0F33E59B0 /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceGrid iOS"; + productName = IceGrid; + productReference = D25B54329663D55F07676BA3 /* IceGrid.framework */; + productType = "com.apple.product-type.framework"; + }; + D393ADD0DC5B2DBF7615B695 /* IceTimeout iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = FCC94E555CFD0D8DA513C2AF /* Build configuration list for PBXNativeTarget "IceTimeout iOS" */; + buildPhases = ( + 21FFD1FCEB2C89BE190E80A9 /* Sources */, + F82F8BF7D4096FD5FD0EC5B7 /* Frameworks */, + 0C8F337B1EC6898A27A0B1E8 /* Resources */, + 1B6B252C34A4CA19795BED55 /* Swiftformat & Swiftlint */, + ); + buildRules = ( + D15AD5ACBF21128690A18C67 /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceTimeout iOS"; + productName = IceTimeout; + productReference = 510DBF2E39A80486AC1E8ADB /* IceTimeout.bundle */; + productType = "com.apple.product-type.bundle"; + }; + D9A5192102BC772D79236B80 /* IceDefaultValue iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 2F01804087A43E459A89278F /* Build configuration list for PBXNativeTarget "IceDefaultValue iOS" */; + buildPhases = ( + 2846570AF5CF1546884EB2BB /* Sources */, + 61E1E58E48143C6820508FE8 /* Frameworks */, + 9B0F1C04398C47B43D324ACB /* Resources */, + 74A52E8934779CBFC16B8DB4 /* Swiftformat & Swiftlint */, + ); + buildRules = ( + A3F38100A564F74D54471274 /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceDefaultValue iOS"; + productName = IceDefaultValue; + productReference = 881E8ED1F550ABA8F7A59DA1 /* IceDefaultValue.bundle */; + productType = "com.apple.product-type.bundle"; + }; + DA2903A145E256D0159DA978 /* IceProxy macOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 20093856CDED46E3D3279709 /* Build configuration list for PBXNativeTarget "IceProxy macOS" */; + buildPhases = ( + D153CDDA80CD446CA8D111C3 /* Sources */, + CDDBE68A4B34F988BBF8E921 /* Frameworks */, + F4CBEDC7A2EA9518272E46E0 /* Resources */, + A38A839608B3470F399BABD9 /* Swiftformat & Swiftlint */, + ); + buildRules = ( + 4EC6511509CEA16A1136462A /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceProxy macOS"; + productName = IceProxy; + productReference = AE912DDABEFC64751F3ACF12 /* IceProxy.bundle */; + productType = "com.apple.product-type.bundle"; + }; + DAF8D0203D265E05C8E59904 /* IceFacets iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = A14C8213AA7934AD704E051A /* Build configuration list for PBXNativeTarget "IceFacets iOS" */; + buildPhases = ( + 30ABAEF8FE686F10F4D1978C /* Sources */, + CBCA35D015958F6890CECC4C /* Frameworks */, + F6FAE3926987D2CA535A91DA /* Resources */, + C5F6A3EF8A1349C8320751A9 /* Swiftformat & Swiftlint */, + ); + buildRules = ( + AC2092C97612ACACCC55D262 /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceFacets iOS"; + productName = IceFacets; + productReference = 826497ACA601D39811A8CF36 /* IceFacets.bundle */; + productType = "com.apple.product-type.bundle"; + }; + DB262AF5F08B0E38FBED3EC9 /* IceDefaultServant macOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 5C12FC669DDDB4391728718D /* Build configuration list for PBXNativeTarget "IceDefaultServant macOS" */; + buildPhases = ( + 653202CEE092EE2B84DC1FD5 /* Sources */, + 7595631B46D38AF15FB1D851 /* Frameworks */, + BB46951AE40E9C1ABB782830 /* Resources */, + 40B3DDDEF5A7A7E7F7506ADF /* Swiftformat & Swiftlint */, + ); + buildRules = ( + 336EB607F5E9DA9ED6BF308D /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceDefaultServant macOS"; + productName = IceDefaultServant; + productReference = 06D538137AA30E6A7A28C2A2 /* IceDefaultServant.bundle */; + productType = "com.apple.product-type.bundle"; + }; + DB5E14F78818BB1599DAB991 /* IceAdapterDeactivation macOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = C4B384C480DE5480E39A8499 /* Build configuration list for PBXNativeTarget "IceAdapterDeactivation macOS" */; + buildPhases = ( + 14695E9CCE085772DBBCC13B /* Sources */, + 2F2732140FD94AD0DBA7D608 /* Frameworks */, + 0C9666812EF16D14907D57F7 /* Resources */, + A845EA68BC93C0E049218CF9 /* Swiftformat & Swiftlint */, + ); + buildRules = ( + F7F901033CD14D2826F9519E /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceAdapterDeactivation macOS"; + productName = IceAdapterDeactivation; + productReference = 52FF2F658D31F2A584C5CEC8 /* IceAdapterDeactivation.bundle */; + productType = "com.apple.product-type.bundle"; + }; + DEAC294186758C2289786E09 /* SliceEscape macOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 6914F5B7548A10A44517A732 /* Build configuration list for PBXNativeTarget "SliceEscape macOS" */; + buildPhases = ( + 5509D5965F363B1A150888DA /* Sources */, + 1A5CA61747173EF52149A68E /* Frameworks */, + DB18AB40FEE90460F64C9C34 /* Resources */, + 692F770167CE5E6F6FFC4F6B /* Swiftformat & Swiftlint */, + ); + buildRules = ( + 317E3B0BC589CF3C39C84BCF /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "SliceEscape macOS"; + productName = SliceEscape; + productReference = 30A8323A18473C6280EC17C3 /* SliceEscape.bundle */; + productType = "com.apple.product-type.bundle"; + }; + DEBFBB5DDB821900C896B967 /* IceSSL C++11 macOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = E4D9D8D0882E15DB707F69C9 /* Build configuration list for PBXNativeTarget "IceSSL C++11 macOS" */; + buildPhases = ( + 1D07837786B9DB0204E635FA /* Headers */, + 9458BCA180C2C6BD479F8E78 /* Sources */, + 4933D997F6A55CFC2FF39A87 /* Frameworks */, + ); + buildRules = ( + 56A69214C86CD4DFB671E225 /* PBXBuildRule */, + ); + dependencies = ( + 12AA5F6A616E5490AA1827C7 /* PBXTargetDependency */, + ); + name = "IceSSL C++11 macOS"; + productName = "IceSSL C++11 macOS"; + productReference = E07B1A3C2B4A1C3215D88E4F /* libIceSSL C++11 macOS.a */; + productType = "com.apple.product-type.library.static"; + }; + DF5F7CEC7DEFE2236C7E2059 /* TestCommon macOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = DCB96F6BA85D63B9E06CFC45 /* Build configuration list for PBXNativeTarget "TestCommon macOS" */; + buildPhases = ( + F70AB71F887C610F8361E1C2 /* Headers */, + A88A62CE8C3B2DF6FB2FD702 /* Sources */, + FA243DC9A195D93C52A1794D /* Frameworks */, + B331F55168B8E0A31C6BF929 /* Resources */, + E6D2C00720D7B35BA452A605 /* Swiftformat & Swiftlint */, + ); + buildRules = ( + 4750F0B1306F32167C7443B4 /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "TestCommon macOS"; + productName = TestCommon; + productReference = ED07FE8864F33CBDEC73EA98 /* TestCommon.framework */; + productType = "com.apple.product-type.framework"; + }; + E934D2880DF7299FD6830C1E /* IceRetry macOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 57011A5AD797AE8F0D2F494F /* Build configuration list for PBXNativeTarget "IceRetry macOS" */; + buildPhases = ( + 965D616FC3AD2DDC701B1DAE /* Sources */, + 8CA7952419387DD0FBB0D2A6 /* Frameworks */, + C4A5948524A4EC2C5185C19A /* Resources */, + 90C47B42F9AE96AE7004D723 /* Swiftformat & Swiftlint */, + ); + buildRules = ( + 337809E4CD1F746E93FD29A7 /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceRetry macOS"; + productName = IceRetry; + productReference = 581215CCF88E5C3BE65ECF1B /* IceRetry.bundle */; + productType = "com.apple.product-type.bundle"; + }; + EE1DA5B2B5550B18C6EAEFC4 /* IceBinding macOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = DEB207C4B9ED416A4DAB03F2 /* Build configuration list for PBXNativeTarget "IceBinding macOS" */; + buildPhases = ( + E950CA9EFE918DED875C9F45 /* Sources */, + 8915E461197054BA2C765FB4 /* Frameworks */, + 411C83FA178AC22A0D8F5C05 /* Resources */, + 8BC79F123960E8495CB78F57 /* Swiftformat & Swiftlint */, + ); + buildRules = ( + 786A78B1B424C76C46C1D30A /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceBinding macOS"; + productName = IceBinding; + productReference = B902634E3013F0F2161FF426 /* IceBinding.bundle */; + productType = "com.apple.product-type.bundle"; + }; + EFC33EE48CCBB18EF56B0FC3 /* IceExceptions macOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 452C448A43B8DD5D2675D8D1 /* Build configuration list for PBXNativeTarget "IceExceptions macOS" */; + buildPhases = ( + 3FFB14E99DF72795B5E81AD8 /* Sources */, + FFFCBC97DD89673A3825D2A9 /* Frameworks */, + A7C3BC642B4D93689B53FA22 /* Resources */, + 8CD763FF30689452C25A1C2E /* Swiftformat & Swiftlint */, + ); + buildRules = ( + 43377FA3AE21810F3B100DE4 /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceExceptions macOS"; + productName = IceExceptions; + productReference = BA9B294D0E2DAB2D585F71E6 /* IceExceptions.bundle */; + productType = "com.apple.product-type.bundle"; + }; + F03BC2863420CAE44ADF6E43 /* IceExceptions iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 3C22B7552D06A6F0A62C70A5 /* Build configuration list for PBXNativeTarget "IceExceptions iOS" */; + buildPhases = ( + D5AA16D963639A9C34378C30 /* Sources */, + 19C6B387C000675B51A3047B /* Frameworks */, + 2E79756A91F8A158BC42BDBC /* Resources */, + 1C00E3B49771E182AE3B353F /* Swiftformat & Swiftlint */, + ); + buildRules = ( + 0F83359CBEE409E20082E5B5 /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceExceptions iOS"; + productName = IceExceptions; + productReference = A3DE7F634444B01AE61627AF /* IceExceptions.bundle */; + productType = "com.apple.product-type.bundle"; + }; + F630FE1D71D3F9AE8117A44B /* IceProxyAMD macOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 89F3E2582DFEC159C0FB1552 /* Build configuration list for PBXNativeTarget "IceProxyAMD macOS" */; + buildPhases = ( + 48B7292D276F85B96BBACA80 /* Sources */, + 992651DE79561CD58A3D0BF8 /* Frameworks */, + 173741345F1FD09E8EF73749 /* Resources */, + 8D0756D07E35B5BCC58C6AC4 /* Swiftformat & Swiftlint */, + ); + buildRules = ( + 0B80C32BD4D134DA0E971310 /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceProxyAMD macOS"; + productName = IceProxyAMD; + productReference = 0C4A61DF34D8B6DA32B58EF3 /* IceProxyAMD.bundle */; + productType = "com.apple.product-type.bundle"; + }; + F7AB901D020B23C997BEFBF1 /* IceInvoke macOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = A34FCDD31A832A6FDDD8F0A0 /* Build configuration list for PBXNativeTarget "IceInvoke macOS" */; + buildPhases = ( + 34E57026386C0FA068374E85 /* Sources */, + 7A938FF93C08B0FFA25906F7 /* Frameworks */, + FA6ADF5219FA99DA8E64EA5E /* Resources */, + 98DA751757849041005E048C /* Swiftformat & Swiftlint */, + ); + buildRules = ( + 1AB1839EABB1307C5A2A76B7 /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceInvoke macOS"; + productName = IceInvoke; + productReference = 952E665CC33C0FD5B7BB55BB /* IceInvoke.bundle */; + productType = "com.apple.product-type.bundle"; + }; + F8767CA4BDEADDE1A1884D5C /* IceInheritance iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 4BFEAF85376AD19BB26E9E7C /* Build configuration list for PBXNativeTarget "IceInheritance iOS" */; + buildPhases = ( + D478724FE8383902D5F0F264 /* Sources */, + 28DFC23BB832FAC086255E20 /* Frameworks */, + ABB0ED04F500E1EABB771BCA /* Resources */, + 06DAB9F2A3D320E57AD3C614 /* Swiftformat & Swiftlint */, + ); + buildRules = ( + FD3E1A21EC683FB5D6A89636 /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceInheritance iOS"; + productName = IceInheritance; + productReference = 4B299CAB121530EBB3DA7B2E /* IceInheritance.bundle */; + productType = "com.apple.product-type.bundle"; + }; + F919A202D3CC004235B7961B /* IceOperations macOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = B86E1C552F07FA02599695F9 /* Build configuration list for PBXNativeTarget "IceOperations macOS" */; + buildPhases = ( + 0910D6D2380151DF6979BAA1 /* Sources */, + 221F3554BDFEA722A83B9BC2 /* Frameworks */, + B7B22E4127E0D340AEEA4933 /* Resources */, + 091E4E51D2493619A434022B /* Swiftformat & Swiftlint */, + ); + buildRules = ( + F12FF8ACBF5D08160F17CB56 /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "IceOperations macOS"; + productName = IceOperations; + productReference = 65F79884355E2A0FE99ECB0D /* IceOperations.bundle */; + productType = "com.apple.product-type.bundle"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + B1E245C668955C328A61BFFC /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 1020; + LastUpgradeCheck = 1020; + TargetAttributes = { + 0E6EE25C3FEF764F7E917F19 = { + ProvisioningStyle = Automatic; + }; + 0F6C3879164CC37BCB92ED0D = { + ProvisioningStyle = Automatic; + }; + 11485B5FF929691A5833C99A = { + ProvisioningStyle = Automatic; + }; + 150A64F2FB99464CBB6A17B4 = { + ProvisioningStyle = Automatic; + }; + 1797F20952E42DF66D6D33BF = { + ProvisioningStyle = Automatic; + }; + 22F59FDE5EB8BF5D73B8AC27 = { + ProvisioningStyle = Automatic; + }; + 236F633B019405F93C02FB55 = { + ProvisioningStyle = Automatic; + }; + 237A2EA83A430A250A1CF023 = { + ProvisioningStyle = Automatic; + }; + 2493729D7F7E9B76236AE7E5 = { + ProvisioningStyle = Automatic; + }; + 256AB7445137457382972306 = { + ProvisioningStyle = Automatic; + }; + 25815E6D3B269988C01FB074 = { + ProvisioningStyle = Automatic; + }; + 260133A4DFC793C4FB6A92F8 = { + ProvisioningStyle = Automatic; + }; + 2DCD382A1A9C114E838BCE05 = { + ProvisioningStyle = Automatic; + }; + 314BF239BAEBB53CD4F547C7 = { + ProvisioningStyle = Automatic; + }; + 31A765FCD292D8FF91A02483 = { + ProvisioningStyle = Automatic; + }; + 36C60483DFECCC705AD9B224 = { + ProvisioningStyle = Automatic; + }; + 4217D4CAD719BC666712429F = { + ProvisioningStyle = Automatic; + }; + 42BEFF63ED45F66D4DEB08F9 = { + ProvisioningStyle = Automatic; + }; + 45785A8A5F989B52F70FF09A = { + ProvisioningStyle = Automatic; + }; + 45F7C5838CC5BD1755605638 = { + ProvisioningStyle = Automatic; + }; + 48A44724482F53DB8836FA44 = { + ProvisioningStyle = Automatic; + }; + 49063474A0A32279B63B7C94 = { + ProvisioningStyle = Automatic; + }; + 49F81B65F4CF3D68A954EB61 = { + ProvisioningStyle = Automatic; + }; + 4FF834835F517C58332265C2 = { + ProvisioningStyle = Automatic; + }; + 5014B8DF208C7227AC852821 = { + ProvisioningStyle = Automatic; + }; + 5397CEC0325F0EE19F8A4376 = { + ProvisioningStyle = Automatic; + }; + 54419E5A07591C99AFD5FD44 = { + ProvisioningStyle = Automatic; + }; + 5578B6E2AB09031CEEF966E5 = { + ProvisioningStyle = Automatic; + }; + 57023FDC36B7ACF8AEB2B86F = { + ProvisioningStyle = Automatic; + }; + 5F293FDF6A695184C8A8372C = { + ProvisioningStyle = Automatic; + }; + 5FBA2B46360A4138C56A793D = { + ProvisioningStyle = Automatic; + }; + 61C40BBD5F24B8422CF093CF = { + ProvisioningStyle = Automatic; + }; + 657CC3DC1EE12800505DDDC9 = { + ProvisioningStyle = Automatic; + }; + 68527026E5DA54703EEFFC18 = { + ProvisioningStyle = Automatic; + }; + 6AC0F4641FD881A3F9FDE7CC = { + ProvisioningStyle = Automatic; + }; + 711F18EAD4D0F01FD488DC77 = { + ProvisioningStyle = Automatic; + }; + 74BF5B1E9E63F56637AF0C5C = { + ProvisioningStyle = Automatic; + }; + 77A82F6C0B911716D1E347D0 = { + ProvisioningStyle = Automatic; + }; + 7C66A461D824FEDB97CC886A = { + ProvisioningStyle = Automatic; + }; + 7C84DBD38E4C23C31AD1F23C = { + ProvisioningStyle = Automatic; + }; + 7DB95DDC2A0D311A6441555E = { + ProvisioningStyle = Automatic; + }; + 7ED2831E7D9351394B42F694 = { + ProvisioningStyle = Automatic; + }; + 8172B0B43BFF7CD036F8AAF8 = { + ProvisioningStyle = Automatic; + }; + 84B57B17572B472DB9473F3A = { + ProvisioningStyle = Automatic; + }; + 8570DC29A49AAFCC705FC566 = { + ProvisioningStyle = Automatic; + }; + 881250C6D8BE80DB29A0385B = { + ProvisioningStyle = Automatic; + }; + 88B4DDB0B9CC0F6E3EF41043 = { + ProvisioningStyle = Automatic; + }; + 8CA5088455BC6A8877F6585D = { + ProvisioningStyle = Automatic; + }; + 8CDF569BE7FD7056CC64AEBD = { + ProvisioningStyle = Automatic; + }; + 8D0BD3C20FA17536D15BAA1F = { + ProvisioningStyle = Automatic; + }; + 8E3EA7797A22D89ACC8767DA = { + ProvisioningStyle = Automatic; + }; + 901E6B19A44D60C62D27A9F6 = { + ProvisioningStyle = Automatic; + }; + 91E917098ED4D8FE96B582B1 = { + ProvisioningStyle = Automatic; + }; + 94F774D983D7806C8B24980D = { + ProvisioningStyle = Automatic; + }; + 9762E32D99613E83FD20D0D8 = { + ProvisioningStyle = Automatic; + }; + 9824CA3BDAE389C6BFE9724E = { + ProvisioningStyle = Automatic; + }; + 9C752DD36F100CB9CBBD0EF7 = { + ProvisioningStyle = Automatic; + }; + 9D14EA76CE6437452C395F6C = { + ProvisioningStyle = Automatic; + }; + 9E009F0CE808A84D564F958C = { + ProvisioningStyle = Automatic; + }; + 9EDC064A438ACAEEABFFCD28 = { + ProvisioningStyle = Automatic; + }; + A0BFE78E710B0B1240650735 = { + ProvisioningStyle = Automatic; + }; + A10509EA7E4240467A68D03B = { + ProvisioningStyle = Automatic; + }; + A4E0B67AA46118886F999666 = { + ProvisioningStyle = Automatic; + }; + ABD61E830D609E366325ED4F = { + ProvisioningStyle = Automatic; + }; + AEDF86E2A1A75EBE97C06C0F = { + ProvisioningStyle = Automatic; + }; + B02741DA7E909B59FFEF2A32 = { + ProvisioningStyle = Automatic; + }; + B1AFC88483CCA0F0F0DB5700 = { + ProvisioningStyle = Automatic; + }; + B3F277E37C4EA69886ACF274 = { + ProvisioningStyle = Automatic; + }; + B40D564181E5D7DC364AC8AF = { + ProvisioningStyle = Automatic; + }; + BB5F7AA59CB20B5A1FF0908F = { + ProvisioningStyle = Automatic; + }; + BD2239AA5C2CE6CBF5B95140 = { + ProvisioningStyle = Automatic; + }; + BD31C59FF75A685B5DCFEB10 = { + ProvisioningStyle = Automatic; + }; + C1A0392775F4A0ED6AB29083 = { + ProvisioningStyle = Automatic; + }; + C52C439B2C3C7D798C1D14E6 = { + ProvisioningStyle = Automatic; + }; + C9ECE36CD6C3FDC548AE1395 = { + ProvisioningStyle = Automatic; + }; + CD60EDBCFC00CB1131D00C99 = { + ProvisioningStyle = Automatic; + }; + CE781DFB6EA5764475DE56D1 = { + ProvisioningStyle = Automatic; + }; + D231743A745D9E8937920F9A = { + ProvisioningStyle = Automatic; + }; + D393ADD0DC5B2DBF7615B695 = { + ProvisioningStyle = Automatic; + }; + D9A5192102BC772D79236B80 = { + ProvisioningStyle = Automatic; + }; + DA2903A145E256D0159DA978 = { + ProvisioningStyle = Automatic; + }; + DAF8D0203D265E05C8E59904 = { + ProvisioningStyle = Automatic; + }; + DB262AF5F08B0E38FBED3EC9 = { + ProvisioningStyle = Automatic; + }; + DB5E14F78818BB1599DAB991 = { + ProvisioningStyle = Automatic; + }; + DEAC294186758C2289786E09 = { + ProvisioningStyle = Automatic; + }; + DEBFBB5DDB821900C896B967 = { + ProvisioningStyle = Automatic; + }; + DF5F7CEC7DEFE2236C7E2059 = { + ProvisioningStyle = Automatic; + }; + E934D2880DF7299FD6830C1E = { + ProvisioningStyle = Automatic; + }; + EE1DA5B2B5550B18C6EAEFC4 = { + ProvisioningStyle = Automatic; + }; + EFC33EE48CCBB18EF56B0FC3 = { + ProvisioningStyle = Automatic; + }; + F03BC2863420CAE44ADF6E43 = { + ProvisioningStyle = Automatic; + }; + F630FE1D71D3F9AE8117A44B = { + ProvisioningStyle = Automatic; + }; + F7AB901D020B23C997BEFBF1 = { + ProvisioningStyle = Automatic; + }; + F8767CA4BDEADDE1A1884D5C = { + ProvisioningStyle = Automatic; + }; + F919A202D3CC004235B7961B = { + ProvisioningStyle = Automatic; + }; + }; + }; + buildConfigurationList = AEBCA6EB7FE84DF64FEDB3B7 /* Build configuration list for PBXProject "ice" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + Base, + en, + ); + mainGroup = CF727599FEBEBA311093F989; + productRefGroup = D08CD86832B6909E8509F4F7 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + B1AFC88483CCA0F0F0DB5700 /* Glacier2 iOS */, + 7DB95DDC2A0D311A6441555E /* Glacier2 macOS */, + 45785A8A5F989B52F70FF09A /* Ice C++11 iOS */, + 2493729D7F7E9B76236AE7E5 /* Ice C++11 macOS */, + B3F277E37C4EA69886ACF274 /* Ice iOS */, + 7C84DBD38E4C23C31AD1F23C /* Ice macOS */, + 8CDF569BE7FD7056CC64AEBD /* IceAcm iOS */, + 4FF834835F517C58332265C2 /* IceAcm macOS */, + 9C752DD36F100CB9CBBD0EF7 /* IceAdapterDeactivation iOS */, + DB5E14F78818BB1599DAB991 /* IceAdapterDeactivation macOS */, + 6AC0F4641FD881A3F9FDE7CC /* IceAdmin iOS */, + C9ECE36CD6C3FDC548AE1395 /* IceAdmin macOS */, + AEDF86E2A1A75EBE97C06C0F /* IceAmi iOS */, + 657CC3DC1EE12800505DDDC9 /* IceAmi macOS */, + 49F81B65F4CF3D68A954EB61 /* IceBinding iOS */, + EE1DA5B2B5550B18C6EAEFC4 /* IceBinding macOS */, + 4217D4CAD719BC666712429F /* IceDefaultServant iOS */, + DB262AF5F08B0E38FBED3EC9 /* IceDefaultServant macOS */, + D9A5192102BC772D79236B80 /* IceDefaultValue iOS */, + 42BEFF63ED45F66D4DEB08F9 /* IceDefaultValue macOS */, + BD2239AA5C2CE6CBF5B95140 /* IceDiscovery C++11 iOS */, + 77A82F6C0B911716D1E347D0 /* IceDiscovery C++11 macOS */, + 5F293FDF6A695184C8A8372C /* IceEnums iOS */, + 8570DC29A49AAFCC705FC566 /* IceEnums macOS */, + F03BC2863420CAE44ADF6E43 /* IceExceptions iOS */, + EFC33EE48CCBB18EF56B0FC3 /* IceExceptions macOS */, + 11485B5FF929691A5833C99A /* IceExceptionsAMD iOS */, + 68527026E5DA54703EEFFC18 /* IceExceptionsAMD macOS */, + DAF8D0203D265E05C8E59904 /* IceFacets iOS */, + 7ED2831E7D9351394B42F694 /* IceFacets macOS */, + D231743A745D9E8937920F9A /* IceGrid iOS */, + 9E009F0CE808A84D564F958C /* IceGrid macOS */, + 94F774D983D7806C8B24980D /* IceHold iOS */, + C1A0392775F4A0ED6AB29083 /* IceHold macOS */, + 260133A4DFC793C4FB6A92F8 /* IceIAP C++11 iOS */, + ABD61E830D609E366325ED4F /* IceInfo iOS */, + 314BF239BAEBB53CD4F547C7 /* IceInfo macOS */, + F8767CA4BDEADDE1A1884D5C /* IceInheritance iOS */, + 256AB7445137457382972306 /* IceInheritance macOS */, + 9762E32D99613E83FD20D0D8 /* IceInvoke iOS */, + F7AB901D020B23C997BEFBF1 /* IceInvoke macOS */, + 45F7C5838CC5BD1755605638 /* IceLocation iOS */, + 9EDC064A438ACAEEABFFCD28 /* IceLocation macOS */, + CD60EDBCFC00CB1131D00C99 /* IceLocatorDiscovery C++11 iOS */, + 49063474A0A32279B63B7C94 /* IceLocatorDiscovery C++11 macOS */, + 0E6EE25C3FEF764F7E917F19 /* IceObjects iOS */, + 9824CA3BDAE389C6BFE9724E /* IceObjects macOS */, + 8D0BD3C20FA17536D15BAA1F /* IceOperations iOS */, + F919A202D3CC004235B7961B /* IceOperations macOS */, + B02741DA7E909B59FFEF2A32 /* IceOperationsAMD iOS */, + 74BF5B1E9E63F56637AF0C5C /* IceOperationsAMD macOS */, + 236F633B019405F93C02FB55 /* IceOptional iOS */, + 31A765FCD292D8FF91A02483 /* IceOptional macOS */, + 5014B8DF208C7227AC852821 /* IceOptionalAMD iOS */, + A10509EA7E4240467A68D03B /* IceOptionalAMD macOS */, + A0BFE78E710B0B1240650735 /* IceProperties iOS */, + 91E917098ED4D8FE96B582B1 /* IceProperties macOS */, + 36C60483DFECCC705AD9B224 /* IceProxy iOS */, + DA2903A145E256D0159DA978 /* IceProxy macOS */, + BB5F7AA59CB20B5A1FF0908F /* IceProxyAMD iOS */, + F630FE1D71D3F9AE8117A44B /* IceProxyAMD macOS */, + 711F18EAD4D0F01FD488DC77 /* IceRetry iOS */, + E934D2880DF7299FD6830C1E /* IceRetry macOS */, + 88B4DDB0B9CC0F6E3EF41043 /* IceScope iOS */, + 5FBA2B46360A4138C56A793D /* IceScope macOS */, + 22F59FDE5EB8BF5D73B8AC27 /* IceServantLocator iOS */, + 0F6C3879164CC37BCB92ED0D /* IceServantLocator macOS */, + 2DCD382A1A9C114E838BCE05 /* IceServantLocatorAMD iOS */, + 8CA5088455BC6A8877F6585D /* IceServantLocatorAMD macOS */, + CE781DFB6EA5764475DE56D1 /* IceSlicingExceptions iOS */, + 5578B6E2AB09031CEEF966E5 /* IceSlicingExceptions macOS */, + 61C40BBD5F24B8422CF093CF /* IceSlicingExceptionsAMD iOS */, + 48A44724482F53DB8836FA44 /* IceSlicingExceptionsAMD macOS */, + 84B57B17572B472DB9473F3A /* IceSlicingObjects iOS */, + 8E3EA7797A22D89ACC8767DA /* IceSlicingObjects macOS */, + 150A64F2FB99464CBB6A17B4 /* IceSlicingObjectsAMD iOS */, + 1797F20952E42DF66D6D33BF /* IceSlicingObjectsAMD macOS */, + BD31C59FF75A685B5DCFEB10 /* IceSSL C++11 iOS */, + DEBFBB5DDB821900C896B967 /* IceSSL C++11 macOS */, + 9D14EA76CE6437452C395F6C /* IceSSLConfiguration iOS */, + C52C439B2C3C7D798C1D14E6 /* IceSSLConfiguration macOS */, + 54419E5A07591C99AFD5FD44 /* IceStorm iOS */, + 901E6B19A44D60C62D27A9F6 /* IceStorm macOS */, + 5397CEC0325F0EE19F8A4376 /* IceStream iOS */, + 25815E6D3B269988C01FB074 /* IceStream macOS */, + D393ADD0DC5B2DBF7615B695 /* IceTimeout iOS */, + B40D564181E5D7DC364AC8AF /* IceTimeout macOS */, + 881250C6D8BE80DB29A0385B /* IceUdp iOS */, + 8172B0B43BFF7CD036F8AAF8 /* IceUdp macOS */, + 57023FDC36B7ACF8AEB2B86F /* SliceEscape iOS */, + DEAC294186758C2289786E09 /* SliceEscape macOS */, + A4E0B67AA46118886F999666 /* TestCommon iOS */, + DF5F7CEC7DEFE2236C7E2059 /* TestCommon macOS */, + 237A2EA83A430A250A1CF023 /* TestDriver iOS */, + 7C66A461D824FEDB97CC886A /* TestDriver macOS */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 00B69EBD3C4AC1200E9464D5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 06A231409638A2A78410D63C /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 07E024DE2788D6F3ACE7067F /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 087044929011E0232AD19FA0 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 0BCCEDAE49D5C717B84FD1C1 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 0C8F337B1EC6898A27A0B1E8 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 0C9666812EF16D14907D57F7 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 0CC7DC380B9CF2C656C97343 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 0D98A14FE6EF5931D920EE64 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 10869DB2A2EBE4CA8D057F65 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 1206A25E8FBEF5CA014F8624 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 12EB63C51EC128BC14B82A40 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 1671ECE2C827E3A2168CC3FD /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 17144D2EE9A103FA586999D9 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 173741345F1FD09E8EF73749 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 1DF1C94AE6AA6B9C4A049B2D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 1EC471CB50F46150C6DEEFE2 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + CBA3B07FFB9D427717826DF7 /* certs in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 21C9842E140F3F824E110F7C /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2AC58A525759A23119997BCA /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2AE620A5D57F1B21F3CBC54A /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2D7E6C414184E005C47D6E19 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2DB94351AB29963CC589DC89 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2E79756A91F8A158BC42BDBC /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 301CF86AAB62244AE803FA7C /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 3BBE1343E245BBD553764789 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 411731AA4FA6D1DE0C82F803 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 411C83FA178AC22A0D8F5C05 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 5086651D9AFD0342EB7B91DC /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 57D4C558B8E33CCB2C929D88 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 583FD9E995705D246D684F2A /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 5AFD5C54E7B280E8587D560D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 5C5BA62F39F51917F30E0F02 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 5CDDED1270C8779D3518107B /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + F3E0059C0B7E029B5C5E46F3 /* certs in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 5D4CDC8CA54BAD127117013D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 6B4223D3B7D3DE420786A786 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 6BD4ADD32B7268373E9478F5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 6BFFEC8F02D0B5F7DCABC1DB /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 6D53BEA8961034491371B44A /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 721D9BE8B71FB348378E8D18 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 78925E0910B6143F59ECA6D7 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7EA3EF0A11DDD9098F425AD9 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7EAB144477BA454C071D1C77 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 84E1C228A71501DF05832C72 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 894D7CF4B8AB143739745A50 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 8D373242EA40EF6D878096A6 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 944FD4A6A076D9EF3C36BA71 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 9B0F1C04398C47B43D324ACB /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 9CEAFAF5B8EA10E70384E64A /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 9D4B8E8DDBA5F35C5FACE564 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + A04185AF8D4D78ADFA775E51 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + A2AC10EFABF51F83DCADA768 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + A416458377F4F350AE5C27F6 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + A4282E77096772CCCDCE214A /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + A7C3BC642B4D93689B53FA22 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AA00569E3AEEE670AC1ECF60 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AB1F1426862C487BEC1E3F2D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + ABB0ED04F500E1EABB771BCA /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AEF2C65B68CE16EE8638CD81 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AFE082D3720381B756F9D65E /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B0DF1E81BBBBF867B30C5D76 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B331F55168B8E0A31C6BF929 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B38F698B5BAB17B20EC55AA7 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B473B726F4760A0D67C671B0 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B47D987A2BAF7F9A755279DE /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B7B22E4127E0D340AEEA4933 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BB46951AE40E9C1ABB782830 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BC20FADDA811D7452FA1C7A3 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + C19EF947A6AACF76301F8751 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + C4A5948524A4EC2C5185C19A /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + CB92180225130F77E2A198CC /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D43533345D0CCE764D351F6E /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D6305337ED9A257B89B88714 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D75D890D9E30BEB768BC214D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D9372544AE3E301D85E5AA62 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DA67C8C38AB2D19948B072FA /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 9C06D28AA9895CD485F0B73B /* certs in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DB18AB40FEE90460F64C9C34 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DC829882EF113EB4735FCD0C /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DEF0F9E31175CE53D8A65FA0 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EC3A8D8FA2C3B1D90749CB98 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F4CBEDC7A2EA9518272E46E0 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F6B3A795ECA905517829B5C3 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F6FAE3926987D2CA535A91DA /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F76516ACB895F0C72662DF40 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + FA6ADF5219FA99DA8E64EA5E /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + FB50D01A1BB55229D9A85C63 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + FC35415F93D1EF7E9612C6A4 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 019D14701A282DAD93A8B783 /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/ami\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + 024824571502FB19BC6BDA03 /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/operations\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + 048D98E8D09ED31C2385D983 /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/defaultServant\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + 06DAB9F2A3D320E57AD3C614 /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/inheritance\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + 091E4E51D2493619A434022B /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/operations\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + 0BCD59F4FD35D65C446001B9 /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/servantLocator\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + 1058E35C96B52E4750891F56 /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/stream\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + 14E03261EBB4B8396560906C /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/slicing/exceptions\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + 157182C7131B506457B6E557 /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/info\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + 17E3F816C8C4E8180745EEFE /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/TestCommon\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + 19FA46F3586E6B00AD655061 /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/acm\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + 1B6B252C34A4CA19795BED55 /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/timeout\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + 1C00E3B49771E182AE3B353F /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/exceptions\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + 20875BB188EC7D63393F015F /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/servantLocator\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + 2842D4E34C893789A28506EC /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/proxy\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + 29F5937B853604F158B47DAD /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/enums\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + 2A51585447E25A160E8AE83E /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/operations\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + 2C58500566675790CA90C08F /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/scope\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + 323618AEC92BF94A1555CF2D /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/exceptions\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + 38C74A5EE8EEF4FA22F3A182 /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/properties\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + 3B8D632E6B178EB93D6BF2B3 /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/optional\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + 40B3DDDEF5A7A7E7F7506ADF /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/defaultServant\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + 531219FF4FD2350FAC9C4483 /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/src/Ice\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + 5B176D693FEE448B7AE991FC /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/invoke\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + 5B1AB4415C3B92E1EA29C4D9 /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/adapterDeactivation\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + 5B2F3ADA2C2F1EF4FDC1AC26 /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/facets\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + 60435BBC810217A7EDCB6C14 /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/objects\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + 692F770167CE5E6F6FFC4F6B /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Slice/escape\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + 6A996D7C3B06A32006B33D81 /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/retry\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + 6B96FAEAF568395E69EAF811 /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/src/Ice\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + 6DAFC6F54760BB21DC5190C8 /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/hold\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + 74A52E8934779CBFC16B8DB4 /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/defaultValue\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + 74C20D18A4D815E0CC532106 /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/slicing/objects\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + 776A8DB1FF108E0A92835029 /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/IceSSL/configuration\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + 78CC54A721E8FDB01902C7D4 /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/acm\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + 78D30F513F806756E3126D2E /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/udp\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + 790AF3F48CE496995B58F5E5 /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/optional\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + 792DD935E1AC48577FF668E3 /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/TestDriver\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + 84102B3C1B69D388844B7C61 /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/enums\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + 880CE31A63BB109A3B078F7F /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/udp\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + 8BC79F123960E8495CB78F57 /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/binding\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + 8CD763FF30689452C25A1C2E /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/exceptions\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + 8CDCF495DC29619530736622 /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/slicing/exceptions\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + 8D0756D07E35B5BCC58C6AC4 /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/proxy\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + 8E098D319385CA0F7BDBFF9F /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/inheritance\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + 8E60B19F21C5B4A4AF9D5732 /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/objects\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + 90C47B42F9AE96AE7004D723 /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/retry\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + 98CE746A717BE369A46619AC /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/slicing/objects\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + 98DA751757849041005E048C /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/invoke\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + 9A4F6E3D731A0ADFA8EA2344 /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/ami\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + 9C4025DBD0C1BE1AFC7693DF /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/slicing/objects\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + 9D9CEC51708DD348A7079579 /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/info\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + A3476B45230EAEB88F0A07DC /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/defaultValue\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + A38A839608B3470F399BABD9 /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/proxy\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + A6787936B6124FD0281B2DA8 /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/IceSSL/configuration\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + A845EA68BC93C0E049218CF9 /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/adapterDeactivation\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + AC22D6BEFF64BA37425F5CB8 /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/servantLocator\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + B50828C7CCBCD7DF9CF3EE26 /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/location\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + B820A6C4D3CEA5E2BB6FECC6 /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/admin\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + BCDE09022622AB4B24070211 /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/properties\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + BD649F1FECA070BB6C34E1C2 /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/slicing/objects\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + BE24F5C0AE46B781B9A701A7 /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/proxy\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + C36BB43C8F0ADC60651C5CBD /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/optional\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + C5F6A3EF8A1349C8320751A9 /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/facets\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + C8390CDF6F38C7C567D12DBB /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/TestDriver\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + CB39FBFFD99B12BD3675DCC3 /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/operations\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + CCC21152B963230577158241 /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/slicing/exceptions\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + CD14F29D897B1B08DA8189FC /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Slice/escape\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + CDBA3E3B5161F57700229A1D /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/hold\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + D050026B71C134BCE348B8E0 /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/binding\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + D118CA2B1E961E60485DAE5A /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/timeout\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + D2F494E642547597936C3733 /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/admin\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + E3B71D8E63266F05FC60CCE4 /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/location\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + E6D2C00720D7B35BA452A605 /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/TestCommon\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + EB72C016336F26A16E545E29 /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/optional\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + F0003C718737F91E88675B61 /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/scope\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + F0D401906882543C1102B73D /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/exceptions\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + F223BC967FFBD96D811C89B8 /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/stream\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + FDEDE4094F7B807F338DCCB7 /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/servantLocator\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + FF773AE065B1B2DCF6419C76 /* Swiftformat & Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Swiftformat & Swiftlint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint --path \"$SRCROOT/test/Ice/slicing/exceptions\" --config \"$SRCROOT/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 010B70C397B1B5787D630A28 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + C3399E137C776C910747E3BB /* ServerAMD.swift in Sources */, + 804601C12B4DCF8E2962419A /* TestAMD.ice in Sources */, + 9D66DF2D6A41A7293DB8E7B7 /* TestAMDI.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 04787228C271543062C16D52 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + E608DF14A2CE97C234B5988A /* ServantLocatorI.swift in Sources */, + DEA44F6A0AB868FF2BFEAA5F /* ServerAMD.swift in Sources */, + 18C25C3D5AA6FD0A45046AFE /* TestAMD.ice in Sources */, + B40EEC8F3097A83F82206E95 /* TestAMDI.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 04A6ADCE55EC019F165D750E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 2F22AFB1B431725502346E42 /* Admin.ice in Sources */, + D0E4225D745E9626F7613FFC /* Descriptor.ice in Sources */, + 2DAB164FFC676DDD181D6553 /* Exception.ice in Sources */, + 71BEAB0D45B7BE4086E29F29 /* FileParser.ice in Sources */, + B5FA5423DEB7C1E7A569CC8B /* PluginFacade.ice in Sources */, + 4D1FCAAC697DF43D03407210 /* Registry.ice in Sources */, + 0524C2C2105973ED9C0F3046 /* Session.ice in Sources */, + D5FD0793DAE372722CB1E62C /* UserAccountMapper.ice in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 0684B8F4DAC806C0960F0C1A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 89BEC7E895F43E38C321F17B /* ServerAMD.swift in Sources */, + BFD86052A4B9501EC9C5F204 /* TestAMD.ice in Sources */, + 470C3A3CD442AF4CE6F70905 /* TestAMDI.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 0910D6D2380151DF6979BAA1 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 43CA01BE6127F7874124EB85 /* AllTests.swift in Sources */, + 52234637B71BBFE6E47BA998 /* BatchOneways.swift in Sources */, + DED925DFB0508C59A174F8B3 /* BatchOnewaysAMI.swift in Sources */, + 90CB5BD15D8E665E71213FC8 /* Client.swift in Sources */, + 3C96DBD1FA7EBB19223698F0 /* Collocated.swift in Sources */, + EE8109AD999481A1F77CA24C /* Oneways.swift in Sources */, + 4124FA8D2F8E72F5A26183D5 /* OnewaysAMI.swift in Sources */, + DD8950903E38ED59CD455567 /* Server.swift in Sources */, + 68129D1BF2809A1F2BFF5F8A /* Test.ice in Sources */, + 8E7F7A35615E19366178CECD /* TestI.swift in Sources */, + CA747A545A8EE6629F68DC5E /* Twoways.swift in Sources */, + 479E5A0DB9CEF8BA8BDE4DAE /* TwowaysAMI.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 0A878E76A65CB96A3864C17D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 8317C8C456A6E3EEE423C17F /* AllTests.swift in Sources */, + 55BFF3A89DA5293672474A71 /* Client.swift in Sources */, + 6BA063BE944C4E0739EFA264 /* Test.ice in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 0BC380351975D42A306EBFB4 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + A274A8E64E8C0752DDA9DE22 /* AcceptorI.cpp in Sources */, + 71D1F940DF91A2A26122EC68 /* CertificateI.cpp in Sources */, + 7F406C6D7ED99031DC99A7A4 /* ConnectionInfo.ice in Sources */, + 14EB7CA690B8F9133A0CC32D /* ConnectionInfoF.ice in Sources */, + EB660F2F1B497A90F4AC77D1 /* ConnectorI.cpp in Sources */, + B048A06743619B09A0AEFD6A /* EndpointI.cpp in Sources */, + A21D71A242CF383C9CF03CE5 /* EndpointInfo.ice in Sources */, + 4B0D3B96EA5A4DF2F1679947 /* Instance.cpp in Sources */, + B69D1512B4B754D93ED1C72F /* PluginI.cpp in Sources */, + 0FF2847D2EFCB00FA045B40C /* RFC2253.cpp in Sources */, + 4827D8A80CD64FBB9606A5F5 /* SecureTransportCertificateI.cpp in Sources */, + 7DC14E0499B9973FDDB079B4 /* SecureTransportEngine.cpp in Sources */, + 4ABE82F802F40E18C41D8B00 /* SecureTransportPluginI.cpp in Sources */, + 1322CA62E8218E0BD774D6DD /* SecureTransportTransceiverI.cpp in Sources */, + 7F535B80DA419AB8A5A03A2C /* SecureTransportUtil.cpp in Sources */, + C15007417DF6EFA9CE6CD3DB /* SSLEngine.cpp in Sources */, + 161B62C32C7EAABE83DA6978 /* TrustManager.cpp in Sources */, + 398E6814A2DB7FB34355C3C8 /* Util.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 0BCD633A1019D57041B34AED /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 1A2C3EE38E327B1FF8435526 /* AllTests.swift in Sources */, + 495CBC593063F0ED91D8B333 /* BatchOneways.swift in Sources */, + 66EABDB0C3E73BFEEDEA939A /* BatchOnewaysAMI.swift in Sources */, + 4162BFE72F186050702ECA52 /* Client.swift in Sources */, + 44A9BD6A600D9E53EAFF72DC /* Collocated.swift in Sources */, + 7B405208E85F7EEB02A6F5FA /* Oneways.swift in Sources */, + D8E1295C8A14C52F8DD11480 /* OnewaysAMI.swift in Sources */, + 86E9FE7CF8A67D4094F8C15C /* Server.swift in Sources */, + ECEFB59767FD00E78241E38E /* Test.ice in Sources */, + CE6318F9E87BAE59007E25E9 /* TestI.swift in Sources */, + 8C863CF9C7AA5000EAF7D40A /* Twoways.swift in Sources */, + B71DA4A44BDD6C9CF847E2C7 /* TwowaysAMI.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 0E0E560947EA34296BE2C38A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 41DF08A739084FB0F05FCF05 /* Acceptor.cpp in Sources */, + 07DA0B970A916316DBB220D5 /* ACM.cpp in Sources */, + 9F88D21C75E00AD868EBF425 /* ArgVector.cpp in Sources */, + EA7C75657DCEB3B5AA6182ED /* Base64.cpp in Sources */, + C979BCC1921DAE4EBC2230CE /* BatchRequestQueue.cpp in Sources */, + F71F3CF170E5A790F6ED2E3B /* Buffer.cpp in Sources */, + AB27AA516E177CA868CCEF8A /* BuiltinSequences.ice in Sources */, + 4B72A4BE05BC8AF96B59B0D5 /* CollocatedRequestHandler.cpp in Sources */, + 582B82EAD403DACF681ECD58 /* Communicator.ice in Sources */, + C45CF9B624FBC3151A5F6131 /* CommunicatorF.ice in Sources */, + 36784DAE1087C3F2F1B0D55F /* CommunicatorI.cpp in Sources */, + B2391CBC402E2E55C8F51E7C /* Cond.cpp in Sources */, + 11254E7070871D3C72789AB7 /* Connection.ice in Sources */, + 833B8E079FBEE002618FF5E2 /* ConnectionF.ice in Sources */, + EC878004575426FDC25F29E9 /* ConnectionFactory.cpp in Sources */, + A62E6DCDE26EDAD67AF12604 /* ConnectionI.cpp in Sources */, + 637D443B11DBB33D4517E2A7 /* ConnectionRequestHandler.cpp in Sources */, + 896D746CB2DF64AF41A2FECB /* Connector.cpp in Sources */, + 0C73AD16B009068E720011FC /* ConnectRequestHandler.cpp in Sources */, + D9C4C6935F571833E7BCBA73 /* ConsoleUtil.cpp in Sources */, + 5679DCA440FDA5E5D2580808 /* CountDownLatch.cpp in Sources */, + D7F5D39AFB9326C71F03138D /* CtrlCHandler.cpp in Sources */, + 3EB6D69172321B286B3EEAFB /* Current.ice in Sources */, + 1ED0538B6101C3F018204E77 /* DefaultsAndOverrides.cpp in Sources */, + D1BB5FD37A0527CAAD1F3FE1 /* DispatchInterceptor.cpp in Sources */, + D4558D79943AD6B71429B41A /* DynamicLibrary.cpp in Sources */, + 6C36DEDA6799ABA53BC3AFFC /* Endpoint.ice in Sources */, + D4BFA8B08DCB4334DFB7E44D /* EndpointF.ice in Sources */, + 6DFB1EBF5818B4EAB7ECD787 /* EndpointFactory.cpp in Sources */, + DD9513B7825BC1773B082AEE /* EndpointFactoryManager.cpp in Sources */, + 0207A29D754D2B128489D90C /* EndpointI.cpp in Sources */, + 3925A587BEBFD5563B28B337 /* EndpointTypes.ice in Sources */, + 9305DB46B28E8E729A7119C9 /* EventHandler.cpp in Sources */, + E0B6E068ECC30F21B76F4DD1 /* Exception.cpp in Sources */, + 103DC65AAC1737D29E71EB42 /* FacetMap.ice in Sources */, + 11CFC6D8BCA000967B1A023D /* FactoryTable.cpp in Sources */, + C1147F466747FE807E2DBC0C /* FactoryTableInit.cpp in Sources */, + 4EAA256AAA98DF58F1E673C0 /* FileUtil.cpp in Sources */, + D37D192A024FA7595A232F9A /* HttpParser.cpp in Sources */, + AFF30307E50DFE9E163C5D93 /* IconvStringConverter.cpp in Sources */, + B4114345FC2F2412DA28F9B5 /* Identity.ice in Sources */, + E4091AB80B01CE002CB56E50 /* ImplicitContext.ice in Sources */, + D15056EEFBFD97E2CE7E5057 /* ImplicitContextF.ice in Sources */, + 379A65604C82A0A96199109B /* ImplicitContextI.cpp in Sources */, + 04E9AAB3EE515276D8335D45 /* Incoming.cpp in Sources */, + 37583621DD8B4D0198D9DB94 /* IncomingAsync.cpp in Sources */, + 8480D0E872A2C04C2D5BC30F /* Initialize.cpp in Sources */, + 60B467253C55EDE975E78CEA /* InputStream.cpp in Sources */, + E9EDE821468A972FD1423265 /* InputUtil.cpp in Sources */, + 3CF1089FE298ADF25FA0DB98 /* Instance.cpp in Sources */, + 08BF1EF9E9879316EE783B96 /* Instrumentation.ice in Sources */, + F1C33ABC8C571417C321EAFA /* InstrumentationF.ice in Sources */, + 4CF0B8D0A7D2835AC4CC1346 /* InstrumentationI.cpp in Sources */, + 50BBC6ABA9A4EDB9C739BD41 /* IPEndpointI.cpp in Sources */, + 0B3DB7966E6D54D6681FAA6E /* LocalException.ice in Sources */, + 2D8612D799BD9AD5FDA4DED7 /* LocalObject.cpp in Sources */, + 19DCB33E479104CECD613510 /* Locator.ice in Sources */, + 16242CCCAB9343118922A028 /* LocatorF.ice in Sources */, + 9609B9E06CF45255304A6C49 /* LocatorInfo.cpp in Sources */, + 1134352FB4B1AA10585A69A3 /* Logger.ice in Sources */, + D59E1198863C8BF1DD5826C2 /* LoggerAdminI.cpp in Sources */, + 3356908D4AB2230AC735A111 /* LoggerF.ice in Sources */, + D55CD451BD753C641225BE52 /* LoggerI.cpp in Sources */, + FDA8AF747206FE5E33340C0F /* LoggerUtil.cpp in Sources */, + 7833830A8977C394236E3789 /* Metrics.ice in Sources */, + AB9EEF334EBE6B5C8ABBC0C5 /* MetricsAdminI.cpp in Sources */, + 40C1AAC31177345201CE5255 /* MetricsObserverI.cpp in Sources */, + 1511E2FD5FCE84CBB84528BC /* MutexProtocol.cpp in Sources */, + BBB69025B457EC2006D171E6 /* Network.cpp in Sources */, + 1BEE11E294F149B37303F51F /* NetworkProxy.cpp in Sources */, + F1DBC0A7B3889ED0D0E0F0C1 /* Object.cpp in Sources */, + CD35C5B6BF215E123503EBBE /* ObjectAdapter.ice in Sources */, + 22E6B2C97E645E727D6846C2 /* ObjectAdapterF.ice in Sources */, + 03530715ADB5BE824E31EB3F /* ObjectAdapterFactory.cpp in Sources */, + A1705E2DDBD274DF1EF80EF5 /* ObjectAdapterI.cpp in Sources */, + 90F8A98AFA2D1F259DBD38D7 /* ObjectFactory.ice in Sources */, + 71DF2A8B89806ADA307C0795 /* ObserverHelper.cpp in Sources */, + CF40CAF8D294FFFC56EE3722 /* OpaqueEndpointI.cpp in Sources */, + E95ECC274865156F682F1B60 /* Options.cpp in Sources */, + 1E101E298583A48138E15A74 /* OSLogLoggerI.cpp in Sources */, + FF6D412C846979421B6B6A3E /* OutgoingAsync.cpp in Sources */, + 36A33E74A48DF60595D94BD4 /* OutputStream.cpp in Sources */, + 2F0328BEA29038D125A04AEA /* OutputUtil.cpp in Sources */, + C5E54400A8F2F03D41B0ADB4 /* Plugin.ice in Sources */, + 0CF65747AEA1C642B61FBEC8 /* PluginF.ice in Sources */, + BFA6AE1DC11376F2A64B09C9 /* PluginManagerI.cpp in Sources */, + 504CFBADDBF2915A5B357C4C /* Process.ice in Sources */, + F90BE75822BAC37855FD0289 /* ProcessF.ice in Sources */, + 147CF1E78C0647C531A533AA /* Properties.ice in Sources */, + 36E3FE9128313023BD1058B0 /* PropertiesAdmin.ice in Sources */, + 1754868FDAAFF2EBF6F534C9 /* PropertiesAdminI.cpp in Sources */, + B04741B3EBC407C23184701D /* PropertiesF.ice in Sources */, + FBC8B32B7C9079BC8A11772E /* PropertiesI.cpp in Sources */, + 473EF10F3DC9F5883D4CA1D6 /* PropertyNames.cpp in Sources */, + 8CF3759C7256686F4ECC007B /* Protocol.cpp in Sources */, + 3D1A4B8E5D80D564A6C0A587 /* ProtocolInstance.cpp in Sources */, + CD32888BA5C6112233F483A6 /* ProtocolPluginFacade.cpp in Sources */, + 8FD77B93B37B5CEDD1B365A9 /* Proxy.cpp in Sources */, + C9075386C8734CD4851E987C /* ProxyFactory.cpp in Sources */, + E306589E9AF4443EFB1F8063 /* Random.cpp in Sources */, + 6C25E89E6678CEEC1637E6C2 /* RecMutex.cpp in Sources */, + 6962AF95205DE0970459BC46 /* Reference.cpp in Sources */, + 6B3CF5EFA06ABA6FA02B3F8E /* ReferenceFactory.cpp in Sources */, + 0B2716A6299442BC5FD16D71 /* RegisterPluginsInit.cpp in Sources */, + 5FEF525C8F50BABE052AC2AE /* RemoteLogger.ice in Sources */, + 3D9E046AA5327DA1B5A00D7F /* RequestHandler.cpp in Sources */, + F2C890111E8F0A4E1381EE68 /* RequestHandlerFactory.cpp in Sources */, + 0E98D65EEF9AB20E59219177 /* RetryQueue.cpp in Sources */, + 87A73CC0117A10B57A847CB7 /* Router.ice in Sources */, + E3533DC78763C626AA57DE5F /* RouterF.ice in Sources */, + 310CFE1D3DC3AA4FD8D70A47 /* RouterInfo.cpp in Sources */, + C3348B616AAD769B094B3C6F /* Selector.cpp in Sources */, + E36316690AD1BB71BBD327F6 /* ServantLocator.ice in Sources */, + B374A81C882FB9A2D9998686 /* ServantLocatorF.ice in Sources */, + B3746F4A950B960B70011143 /* ServantManager.cpp in Sources */, + B5B2A9B8B6191AC23C7BBBC8 /* Service.cpp in Sources */, + 271BECBF433A2B9DBA94D2B2 /* SHA1.cpp in Sources */, + D6D201ABCAE22FA5830547AE /* Shared.cpp in Sources */, + 41265E253FBDBCAC86A8235C /* SliceChecksumDict.ice in Sources */, + 9C73A24ED5297F2F2C3EA400 /* SliceChecksums.cpp in Sources */, + DC78D8C62CF5D31E463617A4 /* SlicedData.cpp in Sources */, + E7A811EF66651879FF3D3932 /* StreamSocket.cpp in Sources */, + 1AC8F65D4457FD557E68CF25 /* StringConverter.cpp in Sources */, + 42F74A6810D9C50990D50876 /* StringConverterPlugin.cpp in Sources */, + 695DF9D1E2B739FE5C89576A /* StringUtil.cpp in Sources */, + E242C30394804807E1886C05 /* SysLoggerI.cpp in Sources */, + 22370DB643D68C7F2AC452B2 /* SystemdJournalI.cpp in Sources */, + 3D25B6CA762260D9CC05D14D /* TcpAcceptor.cpp in Sources */, + FE69D630CEBB0D3A2CA21EAB /* TcpConnector.cpp in Sources */, + 2EB68AB41E09C0EB1E7E115A /* TcpEndpointI.cpp in Sources */, + D2051B9E813049B5BBF24BBC /* TcpTransceiver.cpp in Sources */, + 1F297C927FE9248694042109 /* Thread.cpp in Sources */, + E7B6475531861336F10C9855 /* ThreadException.cpp in Sources */, + DE078DB0B4482F4330681574 /* ThreadPool.cpp in Sources */, + 19CEDF36D236870EB6116849 /* Time.cpp in Sources */, + 80478388702B52A7CAB1004F /* Timer.cpp in Sources */, + 00A147E234F95EA8645B27FF /* TraceLevels.cpp in Sources */, + A3775E9539C7C91B33E366DF /* TraceUtil.cpp in Sources */, + 124C3AF25C8C378A27B7EBBF /* Transceiver.cpp in Sources */, + 5AD0DCE6240D4BDD39F54FF5 /* UdpConnector.cpp in Sources */, + E7375234F20297C3B262C9F9 /* UdpEndpointI.cpp in Sources */, + 7AFEA1E29CBF0B9537735D09 /* UdpTransceiver.cpp in Sources */, + D1059BC659028A5F22837A15 /* UtilException.cpp in Sources */, + 38A690BB0204258D7CC71A94 /* UUID.cpp in Sources */, + 0387CC3DD26CB7E81BA47927 /* Value.cpp in Sources */, + 48513BEE11D5372F7AF7958C /* ValueFactory.ice in Sources */, + D9034D49282DC46A2903C15E /* ValueFactoryManagerI.cpp in Sources */, + 04923DBF0E7D3AD4A5B72F55 /* Version.ice in Sources */, + 4024CF376A89303C2F4558C7 /* WSAcceptor.cpp in Sources */, + 5E4F4C13FCB879E06823EDC9 /* WSConnector.cpp in Sources */, + AC23434D9BCBD401F19681A8 /* WSEndpoint.cpp in Sources */, + 45628CD9E91095399F9A05B5 /* WSTransceiver.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 14695E9CCE085772DBBCC13B /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 0066FB05A623D454E52FC155 /* AllTests.swift in Sources */, + 5282E2A6C655E985C00FAB37 /* Client.swift in Sources */, + FA15135328B6A1461228F072 /* Collocated.swift in Sources */, + AB4BB965E090B3E55945BE33 /* Server.swift in Sources */, + 6C10B844C0C956D9B50D6E9F /* Test.ice in Sources */, + E680A322D275EAB392321E13 /* TestI.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 17886823F20D19C6FE38E5F6 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + F511BFBE2962D74D66BB8A23 /* ServerAMD.swift in Sources */, + 2C35645A3D8CF45B184307A5 /* TestAMD.ice in Sources */, + 7C122F8F5FF5F386B7979917 /* TestAMDI.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 18EFC8B013F6D95A6EA9A8DF /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 2055394AD261FB35FFA6E352 /* IceLocatorDiscovery.ice in Sources */, + 6100019FC210186DDB824614 /* PluginI.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 1B55E537488697782CDD04A0 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + CB951DA8DAE9867FEFBDAA00 /* Metrics.ice in Sources */, + 2980A864D03FFAB2715E9B18 /* PermissionsVerifier.ice in Sources */, + 3EE95E63573BE5750100B4BD /* PermissionsVerifierF.ice in Sources */, + 64B592B618D4B70E0C669F6C /* Router.ice in Sources */, + 6817A1CACF24FF743DAA50B9 /* RouterF.ice in Sources */, + 5FF91E481D7ECC810B9BAD53 /* Session.ice in Sources */, + E99679CB0F9EF41E13AA312B /* SSLInfo.ice in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 1C6C119563C3CADBA68365CA /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + D3A63F0888DF7F03715A38D4 /* AllTests.swift in Sources */, + F77819754B2D6816DEC132BB /* Client.swift in Sources */, + AEE1EC2A3F2E53A79360847D /* Server.swift in Sources */, + 39F4F2F439211047D2199843 /* Test.ice in Sources */, + 2F17C2E71F52076551DA4C7E /* TestI.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 21FFD1FCEB2C89BE190E80A9 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + BCFC1A990B25B2F212A2E6F0 /* AllTests.swift in Sources */, + 7A8AE539388B038C63648969 /* Client.swift in Sources */, + 55CC49454A5231962381E7B8 /* Server.swift in Sources */, + C5C9BB33F18E381BE1AA92B6 /* Test.ice in Sources */, + 54FAB63222FA8E0C8309EBFF /* TestI.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 24088B29D714E43AADFF8D3A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + F3EA5D1C77E3A878C1EA962D /* AllTests.swift in Sources */, + F653196F236306F68B258D16 /* Client.swift in Sources */, + 551B6FDE64F4FC45AD5AC44F /* Collocated.swift in Sources */, + 598EFAEF2A03A35F64A4928C /* Server.swift in Sources */, + 196AEA543D0F1BBE65CCB907 /* Test.ice in Sources */, + 9F4FE503B03F3DD0A41C2C47 /* TestI.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2846570AF5CF1546884EB2BB /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 5F8FB4DA29D4A3FE1642B697 /* AllTests.swift in Sources */, + 8DC9025489BEF2487C2F5734 /* Client.swift in Sources */, + F30E1666D7261C07F7151927 /* Test.ice in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 29B68F02E05F83DCAFEF8B5A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 6E6F617F64725625A1270CE6 /* AllTests.swift in Sources */, + AC0B69FE480108291EB2124A /* Client.swift in Sources */, + 1BFD51F465639535C2F791EA /* Server.swift in Sources */, + 8D56486B473522E645D69765 /* Test.ice in Sources */, + 4FCF7E7D9DDDDA88B9F91B09 /* TestI.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 29BEF6C44E97860CD25C8723 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 2BDC55071E4DE407042F0A19 /* IceStorm.ice in Sources */, + A585B90A5E47BDEB13C41C5F /* Metrics.ice in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 3077B7C4CFAD36E055A50915 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + B66C409ECE0FD6DA906A6388 /* AllTests.swift in Sources */, + 314F57A03CD6516ABB10A2AE /* Client.swift in Sources */, + D049595ADB83D16C4F0B3C43 /* Server.swift in Sources */, + EDB01B97FB9837AA73391EEA /* Test.ice in Sources */, + 491229905A5F5890E0A6392C /* TestI.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 30ABAEF8FE686F10F4D1978C /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 592F2C9D6D7EC25258AB39D1 /* AllTests.swift in Sources */, + DA57AC8E673A528515612358 /* Client.swift in Sources */, + 9AB32FD9C2646ACAFEB7FD0D /* Collocated.swift in Sources */, + D21CFB3C95D66603D2BB0702 /* Server.swift in Sources */, + E7A10292DCE7A05797F4AD12 /* Test.ice in Sources */, + 34F3A3C1EF977FFA8BC8AC23 /* TestI.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 31E322B8EF102964F7CA79F2 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 725F4F302F3170E9E7345D66 /* AllTests.swift in Sources */, + 15B84448322C0BC254EDE36E /* Client.swift in Sources */, + 07E0B792B0CADEEC82ACE9ED /* Collocated.swift in Sources */, + E5AE6B4B245605D048EB6AAC /* Server.swift in Sources */, + 15254EECA5F1DCE304A10D6A /* Test.ice in Sources */, + 3F0CAC7FE95F6EE526523D69 /* TestI.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 338F73FF6E01277814F21810 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 82948E7AAA13ECE7BD6B2DF0 /* AllTests.swift in Sources */, + AEB2FFCD134422D2EC0D378A /* Client.swift in Sources */, + 664D01E1B6E4F0B89DC13D72 /* Server.swift in Sources */, + 1ABDE1F3B058A08D67A99D2C /* Test.ice in Sources */, + ADD6569B945D243B753160F6 /* TestI.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33963F1BC6E9C324D7C02CB5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 95DD355FC2536BD349460D31 /* Client.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 34E57026386C0FA068374E85 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 0B88C6CF3E0220E0CBF85264 /* AllTests.swift in Sources */, + B5285AB65F75D6D1899ED35F /* Client.swift in Sources */, + DFCCB6820FC9EDF90E578FB8 /* Server.swift in Sources */, + 430DA8B247990F2D21BE3F19 /* Test.ice in Sources */, + B770CBEAF066581D82B75288 /* TestI.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 35B0F84E247E29707BE6358E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 062B9241F6888AF7FE424F85 /* Metrics.ice in Sources */, + 246A078751FC2E59CEB8F105 /* PermissionsVerifier.ice in Sources */, + 3EB3B89CAB872154D67B8D75 /* PermissionsVerifierF.ice in Sources */, + 7BF6FD90EFBD365BAACEB5F5 /* Router.ice in Sources */, + 4D17D4F49F4E88F2C40413BC /* RouterF.ice in Sources */, + 66A562F1BC64BA7BA3082BD0 /* Session.ice in Sources */, + 8228BD42AA5A25AC6E87D187 /* SSLInfo.ice in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 3BBEF1222FE03CD4F360309A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 57B07AB2245B951AEEB5E07A /* AllTests.swift in Sources */, + 21D161D034F0F7117EBD56BE /* Client.swift in Sources */, + 53B9D57AAB98250D387DE09F /* Server.swift in Sources */, + EA3438F7CBD76ED4A28CACF9 /* Test.ice in Sources */, + 6EE715E5515B2CB696CB0AFA /* TestI.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 3CDBC07EDCA7FFD99EBBE999 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 193874554671D567CEDEB883 /* AllTests.swift in Sources */, + B8E66C08C864FC497D65EA2B /* Client.swift in Sources */, + 66D6EA78E241EA02D548D7C8 /* Collocated.swift in Sources */, + B255F941E152F865C6E30339 /* Server.swift in Sources */, + D8A53BBF3E074BE8B3B19BD9 /* Test.ice in Sources */, + 9F851879E9A627089340C94B /* TestI.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 3ED709653FCDE2621BA9928D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + CE07EA7451F810329A28DF5C /* AllTests.swift in Sources */, + AE3CAE3A1F5504E58D02F1A8 /* Client.swift in Sources */, + F891773E44EBD73C572D2453 /* Server.swift in Sources */, + 2366BCB4D4545C8CBE7C63F3 /* Test.ice in Sources */, + 47A5F31359C4718350AA7798 /* TestI.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 3FFB14E99DF72795B5E81AD8 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 3DEA7841B90067E7A3244E01 /* AllTests.swift in Sources */, + 927032EBA2B1F40DC8487E63 /* Client.swift in Sources */, + 09CA76FF336297E541B38F62 /* Collocated.swift in Sources */, + 19CD8F010E169FC6028AD24E /* Server.swift in Sources */, + A4E5E6E77F6F458E1D72C496 /* Test.ice in Sources */, + AD19E63990B7BE1D9358DBB7 /* TestI.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 456CE9910196B9E05D859E20 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 57D3BF94BB46CA8E1D816E2B /* IceStorm.ice in Sources */, + F0299CE966177686FE7E01F0 /* Metrics.ice in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 46D25EEFF3F8DAE062FEEEF7 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + CAABDA28D4BA95CBD2B8E6AB /* ServerAMD.swift in Sources */, + 7C1CEF47029DF7C68531CCC3 /* ServerPrivateAMD.ice in Sources */, + 33E10CEECCB7C180B466EA38 /* TestAMD.ice in Sources */, + CE59499E72129B5335F78831 /* TestAMDI.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 46E64B10210FAD77E3812AA7 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 8374A1E756FC4199EB747D37 /* ConnectionInfo.ice in Sources */, + 8DF3B87B9D092675497D4219 /* Connector.mm in Sources */, + A027DEB34D2A5AE08D7546C7 /* EndpointI.mm in Sources */, + 0E1260BB84A8814798CBFF68 /* EndpointInfo.ice in Sources */, + 1C146741585801C85CFD69DE /* Transceiver.mm in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 48B7292D276F85B96BBACA80 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 37235F125F0F5ED17183970D /* ServerAMD.swift in Sources */, + 90AE1AE1E1A015A4B0AD3A89 /* TestAMD.ice in Sources */, + 3BF9D91C1C098EBF2CA42457 /* TestAMDI.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 48F70FC33BED6A840925D74E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 0D2F9685B7C040AD3F6207F4 /* ServerAMD.swift in Sources */, + 8EB5D214C134F6A55688AC8C /* TestAMD.ice in Sources */, + F5F50597A730B437D899DE8B /* TestAMDI.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4CD852637B5C47C440C77D9E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 131D6777B9244CD128038CC7 /* AllTests.swift in Sources */, + 51FEB5590829C3ED15D9D873 /* Client.swift in Sources */, + C8ED38CDD2CB6C9310004A3F /* ClientPrivate.ice in Sources */, + B748CCD87EE9D9F3E023B28C /* Server.swift in Sources */, + 2D63E46FAC27E272B060E677 /* ServerPrivate.ice in Sources */, + 7AAD0C1D4E6910E763F2B98F /* Test.ice in Sources */, + 756520CA5CAFBD8F5E7E0802 /* TestI.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 52E1E89BDA9F4A5FB2B12A0D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 027620F4E5DD6F3D9D794299 /* AllTests.swift in Sources */, + 4F197D85E7E66A6660146FDF /* Client.swift in Sources */, + 24035600F3E8C9CC4C419E53 /* Server.swift in Sources */, + CBA9ECA116410102129638BD /* Test.ice in Sources */, + 801E59CEA3CEE160729B3FB3 /* TestI.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 5509D5965F363B1A150888DA /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 881E80BE4D93AF2D69E9D540 /* Clash.ice in Sources */, + 47D08B40D720DC120A5DB9C9 /* Client.swift in Sources */, + E9142FB3A8C7BE8F3D8C3E3D /* Key.ice in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 57CB86ED42F935F70F39CCEC /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 70DACA9BD5065DC68F95369A /* ServerAMD.swift in Sources */, + B6B9595FF0BB44D8749A6C41 /* ServerPrivateAMD.ice in Sources */, + 49F24CFCB16E4120A1B6A504 /* TestAMD.ice in Sources */, + EBB6BB023EE12E36BDE9B312 /* TestAMDI.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 59082FA8555687DDE3A718F4 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + F00BB5DF9FAA09F8809FE458 /* IceDiscovery.ice in Sources */, + DA6B37DE040DD778FBE5F704 /* LocatorI.cpp in Sources */, + 5E8086DBEC03B567EF8D04FD /* LookupI.cpp in Sources */, + 12A1C34D2900381FC44D3576 /* PluginI.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 5B99C997C342CF7999416E06 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + DBAAA12ACCC78CB0BADB3C13 /* ServerAMD.swift in Sources */, + EE0F4B1C01AB7E9B3F379AD2 /* TestAMD.ice in Sources */, + 27386722D3B6F16AD5823C41 /* TestAMDI.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 639FC0622D98B50B4EF36774 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 6EBA6989B042BC80A4EF7163 /* AppDelegate.swift in Sources */, + B59A513DBD23712D26E14029 /* Assets.xcassets in Sources */, + 4F4554B117F7470488857CCA /* Controller.ice in Sources */, + 752A78750F102386AE7A3A61 /* ControllerI.swift in Sources */, + C0816E68324CC4346341D7A1 /* LaunchScreen.storyboard in Sources */, + 102D580D0EADC27ABD848AB6 /* Main.storyboard in Sources */, + D7652F0FEAA676A4D7764A07 /* ViewController.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 6508E2AC3C86E305BE6F946D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + EEDAFCB661A89A7CE301F85E /* AllTests.swift in Sources */, + 7AD2F93AF42DA619A4397A05 /* Client.swift in Sources */, + 97A7275AC7365D50F90BDF91 /* Server.swift in Sources */, + F01040E83454B9EE67B1CE19 /* Test.ice in Sources */, + 3BFA5FC721C782DE8B8FE580 /* TestI.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 653202CEE092EE2B84DC1FD5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + A00A51BF861E7BD0905E5EEF /* AllTests.swift in Sources */, + A4D2895060CC261A1BFA9734 /* Client.swift in Sources */, + DBCA14035C3233D303A1AE73 /* Test.ice in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 6593B7827CE0E2777768F254 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 2F850A0F4EEA9414010292B3 /* AllTests.swift in Sources */, + B778653C3033E06DDF48E9DA /* Client.swift in Sources */, + E62788E0786FC8C20E8F8FBD /* Server.swift in Sources */, + 33CB0655CD72D88C4F79B1F5 /* Test.ice in Sources */, + 87BEB96248BAE545D255536C /* TestI.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 698EFE4F045A30BF8B42B0D2 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + BA6DCCFFAF6332BD70D0297C /* AllTests.swift in Sources */, + 49D0B5C7619486D003C2A9F4 /* Client.swift in Sources */, + 7FB99ECE268712E36B7B53E6 /* ClientPrivate.ice in Sources */, + 319EB6ADDABE81055D66844A /* Server.swift in Sources */, + 0799A3BB7DDD3834B48E8A6A /* ServerPrivate.ice in Sources */, + B337EE7326BA19D34A7EE73C /* Test.ice in Sources */, + E1320B4398C56859169F6BAE /* TestI.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 6F6DD4F8F2D8420F6ABDDD53 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 6CCFF40D49FB56958A6A86B0 /* AllTests.swift in Sources */, + FBEABB6958818B553B5F54D6 /* Client.swift in Sources */, + 89C4ADD39592781BEF5C7C06 /* Server.swift in Sources */, + 9C75D5C1E5BABD42CBCF437F /* Test.ice in Sources */, + 7D4244581C14997214F8C6A3 /* TestI.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 70BB71436D583DAC4F501086 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 0D9CC34F57CD386352643C96 /* AllTests.swift in Sources */, + FCC595798F1E7CD5E248E665 /* Client.swift in Sources */, + D2BE0C5FCC73151733E481FE /* Server.swift in Sources */, + 35BFCCDF41E420E108D463EC /* Test.ice in Sources */, + A23B290F3FC39D873B9743CE /* TestI.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 74A1A11CF5BB04466E9662FD /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 9182A3EE4ABF58E0BEF936D1 /* AllTests.swift in Sources */, + A13A75687B50F9355CAD529E /* Client.swift in Sources */, + A589C74CB63780D6603AE7A9 /* Collocated.swift in Sources */, + 0E106C35889ACD1035538DF7 /* Server.swift in Sources */, + 3F5F3AD2135FC9981B647FFE /* Test.ice in Sources */, + 070FEAC25814B75236C5A584 /* TestI.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7788041C047156D77683C2F4 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + CF5FAAFEF98E4D493CB90713 /* AllTests.swift in Sources */, + CD424E5DEA0F488227CA7F86 /* Client.swift in Sources */, + 43F3C63558484B3A33025FF9 /* Collocated.swift in Sources */, + C2D7BB68F2D12D32277849CC /* Server.swift in Sources */, + 4A1B351D93A06125870278C5 /* Test.ice in Sources */, + BEA587FF48A6EF94C58F01E0 /* TestI.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 79D6F33478AE90D4AF3698AF /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 0BC9B04F73488B313EA01F0F /* IceDiscovery.ice in Sources */, + D8310B7A2125E304CC8D39C2 /* LocatorI.cpp in Sources */, + A6B50494CF67F672EA1F3F24 /* LookupI.cpp in Sources */, + A511501ABDA208A416C31901 /* PluginI.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7EF1C3DD1FED1DD1C07154B8 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + BC06DC8E342FFFD8342B33F9 /* Client.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 847CA7DD459214D417C2ACA6 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 6B605EBF542480A469A6675B /* AdminFacetFactory.swift in Sources */, + FBECB69B0CA5A07CB92BEB8B /* Blobject.swift in Sources */, + 29C62000FE11F6F365EBB29B /* BlobjectAsync.swift in Sources */, + 90AE016C11083EE0C82DF159 /* BlobjectFacade.mm in Sources */, + CE2C932A1ACF31F0501CB355 /* BuiltinSequences.ice in Sources */, + 6024B382677A0B28FF0B2417 /* ClassResolver.swift in Sources */, + E5A4FC209F85E660EAEA21F9 /* Communicator.ice in Sources */, + FB20D197A460753D47793E48 /* Communicator.mm in Sources */, + EF574EC9D5E4241C235505E0 /* CommunicatorF.ice in Sources */, + BB7C9A733CE7E0FB0B7400B1 /* CommunicatorI.swift in Sources */, + 72B2C464EC9672BA5424475F /* Connection.ice in Sources */, + 361A4990DDFBDC01553B314F /* Connection.mm in Sources */, + 0F5DBE402E6F5D3C8F4F5717 /* ConnectionF.ice in Sources */, + C6D91F455776D85F216BC2ED /* ConnectionI.swift in Sources */, + E07884BD1D162130CC9951F5 /* ConnectionInfo.ice in Sources */, + 6E730C7CF2F0EFEBB5C53B1B /* ConnectionInfo.ice in Sources */, + 79CFFE190D403FD872C555F8 /* ConnectionInfoF.ice in Sources */, + A46BCE5B5B5647639CD2099E /* ConnectionInfoFactory.swift in Sources */, + FDF12300FE4512F28088A4BF /* Convert.mm in Sources */, + F08880AB116C9B066A97A172 /* Current.ice in Sources */, + 2F398F42089092F1F55647BE /* Endpoint.ice in Sources */, + 86809D246C88517A3F6A3890 /* Endpoint.mm in Sources */, + 9483E80F3F4A2889E4969CE6 /* EndpointF.ice in Sources */, + FE5A614B6DA7EA5585420628 /* EndpointI.swift in Sources */, + B53282FBC297CAE847881427 /* EndpointInfo.ice in Sources */, + 9C4813DCA89FC4E87EA6D2A6 /* EndpointInfo.ice in Sources */, + 6AF332D62AA38D0F57B22202 /* EndpointInfoFactory.swift in Sources */, + 56AAF03AE429CD6C278DA510 /* EndpointTypes.ice in Sources */, + CC808CD88901678086E38F9F /* Exception.mm in Sources */, + FA5242A27E5401D2CE644EEC /* Exception.swift in Sources */, + B048ABD5E04694AE41279B73 /* FacetMap.ice in Sources */, + D3C3E3D3B52717218741E5AE /* FormatType.swift in Sources */, + 47408314A93EFE6682AB207B /* IceUtil.mm in Sources */, + DC60FD1331F6F96F47F266AD /* Identity.ice in Sources */, + A8B6CFAB24460B2BDE7C58B7 /* ImplicitContext.ice in Sources */, + 2E60FCCD0A298E94DF3A1DBE /* ImplicitContext.mm in Sources */, + 37B434042D4A50299206AA2F /* ImplicitContextF.ice in Sources */, + AA0294E00C2FE7652DD592C3 /* ImplicitContextI.swift in Sources */, + 27A368D789B51D658B2527A9 /* Incoming.swift in Sources */, + 27D895095EA59A7115DEC5D3 /* InitializationData.swift in Sources */, + 2571886FA0167BF4E08BA18D /* Initialize.swift in Sources */, + 0E73FDFC58DA51C3EA9A3230 /* InputStream.swift in Sources */, + 92324A8D3D4F9197D56623AF /* Instrumentation.ice in Sources */, + 07B19A8F67DA6623D50D6525 /* InstrumentationF.ice in Sources */, + 9534BC69723BA50D6E4F9051 /* LocalException.ice in Sources */, + 0A92ACAF7069C4CDE7907C53 /* LocalExceptionDescription.swift in Sources */, + 5AAEC639875C0F5E8A0780D2 /* LocalExceptionFactory.swift in Sources */, + 31E36AC26107A4EF2817236A /* LocalObject.mm in Sources */, + DE35A55B451C09A63056F780 /* LocalObject.swift in Sources */, + E435BC0E41C7CF140D4C600A /* Locator.ice in Sources */, + 2CABFE586BD21D70A8F656D3 /* LocatorF.ice in Sources */, + A6C53DA685719DAC77545B98 /* Logger.ice in Sources */, + 96061FF79BD52CE567BAA565 /* Logger.mm in Sources */, + 10BE066CFFEA63DF949C17F7 /* LoggerF.ice in Sources */, + 95329B737CA36A0BE38A03CD /* LoggerWrapper.swift in Sources */, + 6F3D1CB96C862E4F6914A703 /* Metrics.ice in Sources */, + FA904F7785FFB5FEE0FC7B02 /* Mutex.swift in Sources */, + 15527A2DCF387F1DC268F522 /* NativePropertiesAdmin.swift in Sources */, + 99D78D6FA84D5F11CC089730 /* Object.swift in Sources */, + C4315D2423B14D2D8E755534 /* ObjectAdapter.ice in Sources */, + B1E863077DB39FB50DCCDCA5 /* ObjectAdapter.mm in Sources */, + 0D4A0FDF123411285994065F /* ObjectAdapterF.ice in Sources */, + EAA15213C48C51F5908B6C73 /* ObjectAdapterI.swift in Sources */, + A6FF773BDF6A0624BFF283F8 /* ObjectFactory.ice in Sources */, + 5A870025C9BD4B44A093FE9D /* ObjectPrx.mm in Sources */, + 6F68B67F93F60FD6BFD63BA5 /* OptionalFormat.swift in Sources */, + 334E5B86040998937B000AA5 /* OutputStream.swift in Sources */, + 7B425A2330D538AFDC72C3C4 /* Plugin.ice in Sources */, + A85E11AB40B665E8D1AEEBEF /* PluginF.ice in Sources */, + 69A613620753010D4C7784F5 /* Process.ice in Sources */, + 4D2ABB3DFA3FDC32953DD121 /* Process.mm in Sources */, + E71F32895E06E7F4478FD23A /* ProcessF.ice in Sources */, + 0B3168B5CC64A8343CD56489 /* ProcessI.swift in Sources */, + 7802D481AC74B804AAE0628F /* Properties.ice in Sources */, + FA2DA9981FE05E12EFB7297D /* Properties.mm in Sources */, + 7442D1A85F5BB7F0E28BC813 /* PropertiesAdmin.ice in Sources */, + FC0A3921D5646C58A0214C0D /* PropertiesAdmin.mm in Sources */, + 0DA47AC99EB0372FE55FB5B7 /* PropertiesAdminI.swift in Sources */, + E0C01D24062418BE54318D9B /* PropertiesF.ice in Sources */, + 07F8524E908A86039CD41579 /* PropertiesI.swift in Sources */, + 26B72F7E195520DD3C53A701 /* Proxy.swift in Sources */, + 178B82AD768A37F439841B4C /* RemoteLogger.ice in Sources */, + CBD3ADE1DDCCFD0CD77AEF6C /* Router.ice in Sources */, + 15F4C897B04F59357E1D7776 /* RouterF.ice in Sources */, + A97771ADBEF1A6EDC22F9FC6 /* ServantLocator.ice in Sources */, + 1B93FEC954CD2CDBDCDDD93A /* ServantLocatorF.ice in Sources */, + D69B59E0CD89B552A1D89F65 /* ServantManager.swift in Sources */, + 0173C2108DE4B2F4FCD4BE55 /* SliceChecksumDict.ice in Sources */, + A68C1BC7960FC884E2D1376A /* SlicedData.swift in Sources */, + DC54C632154762C8E3961AA3 /* SliceFlags.swift in Sources */, + 56824B7B1FDCB6B72AAB53BB /* SliceInfo.swift in Sources */, + 17329A4BE8E1743CB567EA4A /* TraceUtil.mm in Sources */, + 8C3F66D108C0E934A1382B57 /* UnknownSlicedValue.swift in Sources */, + 51443C4B8A5CAA3659DC3963 /* UnsupportedAdminFacet.mm in Sources */, + 29951E9C484005A7D898C1A4 /* Util.swift in Sources */, + 411888CB84707FF354BDF408 /* Value.swift in Sources */, + 25E7343180B4033A6E217616 /* ValueFactory.ice in Sources */, + D02B662F0C47FE9E48EBF039 /* ValueFactoryManagerI.swift in Sources */, + 4A8A96B5FAEF07DC167CC0A8 /* Version.ice in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 8700FF4E250B0112EC4C3A44 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + B7995A5E7329E8FF7F46404A /* AllTests.swift in Sources */, + 90B8A5497FE4A13C9B0F0EA5 /* Client.swift in Sources */, + A9243EB153450F0DE53BA660 /* Server.swift in Sources */, + FC519EA71C5B7294EDE44BBC /* Test.ice in Sources */, + 87101CEFB8D326A7FBF2CF51 /* TestI.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 89274EFC9F0FCBE53A2B07B6 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + D9D865292AAD526E093CE75E /* AllTests.swift in Sources */, + 4FF58213C642678204BD0BDF /* Client.swift in Sources */, + 33B1079CED187701D69550A8 /* Collocated.swift in Sources */, + 90C0D0B653B21376C3EC5221 /* ServantLocatorI.swift in Sources */, + 9EC43732C579C6A1457FCAA6 /* Server.swift in Sources */, + 1D5227E6239D1A6D22605E73 /* Test.ice in Sources */, + 612AEC796457B50C8A8CB078 /* TestI.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 90AABFF49934AAEE5F066EE0 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 64EFF71A150817E11D820BE9 /* AllTests.swift in Sources */, + 2DBC52523B0B8051A0E77869 /* Client.swift in Sources */, + 034A3116A15B2244F71CB396 /* Collocated.swift in Sources */, + 8654AAE1C07FF10C18E089D6 /* ServantLocatorI.swift in Sources */, + F7211770B3DE7E5712348E19 /* Server.swift in Sources */, + 1AF9D01D78090698FC5FE71E /* Test.ice in Sources */, + 943AB310D41F6110D5403509 /* TestI.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 91267EC23AE3EEB81A311247 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 3931BBCB99D7EF495920569B /* TestCommon.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 9458BCA180C2C6BD479F8E78 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 238223EBAA43A9900E5C6674 /* AcceptorI.cpp in Sources */, + 6D2FC3E081CD97D1555F5240 /* CertificateI.cpp in Sources */, + 646D91733A4D08712E9D554B /* ConnectionInfo.ice in Sources */, + 93AFBFEC80ABBDA5CAB51A8C /* ConnectionInfoF.ice in Sources */, + D06EFF868D74B9306FE0D22C /* ConnectorI.cpp in Sources */, + 133053EAA0D8A8381CF1C508 /* EndpointI.cpp in Sources */, + 752820FB35AB5199840AB02C /* EndpointInfo.ice in Sources */, + C48F2403CA3BA0E75204A81E /* Instance.cpp in Sources */, + D0D6C65F00F894885310792B /* PluginI.cpp in Sources */, + 41D13FFF690C640262A7E72B /* RFC2253.cpp in Sources */, + 3B26B235184670A160541BB1 /* SecureTransportCertificateI.cpp in Sources */, + F67C6737BB738401553D79CF /* SecureTransportEngine.cpp in Sources */, + CF5F5A7A7E5F6C4A371B8091 /* SecureTransportPluginI.cpp in Sources */, + DA294686E94A1EAD268E5EDB /* SecureTransportTransceiverI.cpp in Sources */, + B76FEB2700DE8349A2567CE2 /* SecureTransportUtil.cpp in Sources */, + DDE97BD8F342A06E03D0EACF /* SSLEngine.cpp in Sources */, + AD613B0F2C16C825D4B5499C /* TrustManager.cpp in Sources */, + E29FC2971C1A98E31416A103 /* Util.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 965D616FC3AD2DDC701B1DAE /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 8F142B8D24C102CC58D52386 /* AllTests.swift in Sources */, + 3EECBF13D68C5CAD2059625B /* Client.swift in Sources */, + 52EC1AC098B5A5905F91B146 /* Collocated.swift in Sources */, + BDC25192E4B4781A26EC1277 /* Server.swift in Sources */, + 9ACD1E8099130F8CC27CE2E9 /* Test.ice in Sources */, + 0B4437075D5D65B411DF757B /* TestI.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 9B6E729721B89272F5E9F530 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + FEDEE16C6BA2564B41AAA519 /* AllTests.swift in Sources */, + 9D3615757B81A26C2445F7A9 /* Client.swift in Sources */, + 7B2E17D63F1E14FAD4F3071E /* ClientPrivate.ice in Sources */, + 81D2BCF1FA22A2D1CFE00B32 /* Server.swift in Sources */, + BBD8F160EC07351944FEC9E7 /* ServerPrivate.ice in Sources */, + 5E5A410E1CB83E626F3669BB /* Test.ice in Sources */, + 02415C47C5B09F8838DCBC4E /* TestI.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 9FA6264366207A92DE3B6D70 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + C34A5D0003A785FA587C6FEC /* AllTests.swift in Sources */, + 4F4FAE8F3AB1B270A0C106E3 /* Client.swift in Sources */, + 403F2CFEA4E5FB7AB862094C /* Server.swift in Sources */, + F094B2AD3747FC38D7B4ADEE /* Test.ice in Sources */, + 70107528CA1D74A5B039F716 /* TestI.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + A12B01FEBF9D55F44E06FB69 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + F627C21F7A049B2498AF9443 /* AllTests.swift in Sources */, + E73BF1CADB1E220174F754B1 /* Client.swift in Sources */, + BDEA4C39D654452D17EA2527 /* Server.swift in Sources */, + 4126DC7CB12943CA6164618D /* Test.ice in Sources */, + 4B9C6E253EB0B8A2E528F40A /* TestI.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + A7CEDDED20999C5E17CF1E6E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ECAE97125274475653024076 /* Acceptor.cpp in Sources */, + 371C63738EE0582715C6AD29 /* ACM.cpp in Sources */, + C90841CD0224B0CF74543DA9 /* ArgVector.cpp in Sources */, + 810C6BC3873156BD3160FAEA /* Base64.cpp in Sources */, + B506652FDECE9CDC6CC7E509 /* BatchRequestQueue.cpp in Sources */, + B864054CD4BA515A78F04A19 /* Buffer.cpp in Sources */, + 06C059ED7A9206DC215E9106 /* BuiltinSequences.ice in Sources */, + D04B38BB70AD720FF1552234 /* CollocatedRequestHandler.cpp in Sources */, + AD2319B690F6B21CB910F7E5 /* Communicator.ice in Sources */, + 967A22E037FCDADCF2D49AB7 /* CommunicatorF.ice in Sources */, + 2A7A7DAF6B232AD281F95812 /* CommunicatorI.cpp in Sources */, + 41F02240D0189C2AD26E8C1C /* Cond.cpp in Sources */, + CE1EF0EB6121162D1D31642E /* Connection.ice in Sources */, + B35F1AAE24DD524FFEC2A740 /* ConnectionF.ice in Sources */, + 67417F5726A96BAE4D210690 /* ConnectionFactory.cpp in Sources */, + 0EA80D5F90DA744A548F8416 /* ConnectionI.cpp in Sources */, + 140965E65CDB7F5C13A53AE3 /* ConnectionRequestHandler.cpp in Sources */, + 76CB1FD2A00322F3E359E634 /* Connector.cpp in Sources */, + A6D90B46E6BCEC345B576790 /* ConnectRequestHandler.cpp in Sources */, + 0684FB73646DC143EC99F6B7 /* ConsoleUtil.cpp in Sources */, + 9BE2C0ACD688691E7E409020 /* CountDownLatch.cpp in Sources */, + 1200090E7C8A288CAB15A546 /* CtrlCHandler.cpp in Sources */, + CCB53890A6B006005BEE9A00 /* Current.ice in Sources */, + A8CCC4602948BC4C7B5503C0 /* DefaultsAndOverrides.cpp in Sources */, + F0506D00B7D4A93C9EA376CD /* DispatchInterceptor.cpp in Sources */, + B6518FA8F55D0214A37C2D50 /* DynamicLibrary.cpp in Sources */, + 245D0FD5B61BF7B9D30066CD /* Endpoint.ice in Sources */, + 8207516B2FA51F6FCE0C42BF /* EndpointF.ice in Sources */, + EB76674F5A0027A5CF96C47C /* EndpointFactory.cpp in Sources */, + 73ADAC124BC4F1ACCED2C11A /* EndpointFactoryManager.cpp in Sources */, + BDF2159E6EBDFFA80ACAF39A /* EndpointI.cpp in Sources */, + 6B84B920125EBA7C77567B67 /* EndpointTypes.ice in Sources */, + 0C45F9D7143331F1EA9EBE6D /* EventHandler.cpp in Sources */, + 0F49645BBD38E1B9D3DF58B4 /* Exception.cpp in Sources */, + 736FF44FB057118FC48F16DC /* FacetMap.ice in Sources */, + 53B26396C7E01A51829D1738 /* FactoryTable.cpp in Sources */, + 492C4CB8D338C1F6E2CECC2D /* FactoryTableInit.cpp in Sources */, + 353D30FD103BAD4BA700FEFD /* FileUtil.cpp in Sources */, + FE420ABD3743883EB8C0A073 /* HttpParser.cpp in Sources */, + 6F2C0EDB12BA10940528DDF6 /* IconvStringConverter.cpp in Sources */, + 57A7F8A69EA4A03EF83F3E41 /* Identity.ice in Sources */, + 26D03EF0E31501EA5BA4877C /* ImplicitContext.ice in Sources */, + 697927485283FD54A69E06E5 /* ImplicitContextF.ice in Sources */, + D74F85D881F80F1D2F9BC718 /* ImplicitContextI.cpp in Sources */, + 05258514E8858952981AA10F /* Incoming.cpp in Sources */, + 4C9AEB59E6EC27A16FFB3221 /* IncomingAsync.cpp in Sources */, + 50FF73531C6BBA75568573AC /* Initialize.cpp in Sources */, + CF10CB5FBBC03CE5AD3D8DBE /* InputStream.cpp in Sources */, + 5CFAA092BAD3304558EF7491 /* InputUtil.cpp in Sources */, + 41458C8D7C4AF7B69614B7EA /* Instance.cpp in Sources */, + 382F77949F441CCDA40237FD /* Instrumentation.ice in Sources */, + 748001715EC2DBD0F861065C /* InstrumentationF.ice in Sources */, + 141B0C6DC4820DBCC978C3AB /* InstrumentationI.cpp in Sources */, + ABBE6A3DAFFB6DF549C7D01B /* IPEndpointI.cpp in Sources */, + 00792C77914DC758FE793EA3 /* LocalException.ice in Sources */, + 5F5414DC8A5D4B131A4E73DD /* LocalObject.cpp in Sources */, + 737C68396B303FDB46A86AD3 /* Locator.ice in Sources */, + DC7DA3588064686BF69F974B /* LocatorF.ice in Sources */, + 3C124267EB06BCE333034FED /* LocatorInfo.cpp in Sources */, + EE793F0EF681D01DC0651381 /* Logger.ice in Sources */, + B1062E1B9BDEE598B473650A /* LoggerAdminI.cpp in Sources */, + B059D05077DBE2076B836D77 /* LoggerF.ice in Sources */, + 71E1A8532021DA4EACB824D5 /* LoggerI.cpp in Sources */, + C9843CF4FC0367B3B8ABCD61 /* LoggerUtil.cpp in Sources */, + 8E884AA4A0FFDEAE1C69C536 /* Metrics.ice in Sources */, + 06C96E8932554223A840AE0D /* MetricsAdminI.cpp in Sources */, + 20CCF09AA09AB304FCCCCAA6 /* MetricsObserverI.cpp in Sources */, + C797DA61BF1FDAD566C0FB25 /* MutexProtocol.cpp in Sources */, + 226F8576B8B318BC5840F69C /* Network.cpp in Sources */, + 516F6BB6A35BB4EB58214498 /* NetworkProxy.cpp in Sources */, + 331D2A4743EE0EBF4369EDB8 /* Notifications.mm in Sources */, + E1CFECEBC391B31B74C724CA /* Object.cpp in Sources */, + 4EA2EFA909184BF57E4A8821 /* ObjectAdapter.ice in Sources */, + 2C14FC1079EBA5A3D607112F /* ObjectAdapterF.ice in Sources */, + AC91AA266BF85CE025254520 /* ObjectAdapterFactory.cpp in Sources */, + 87E1796B9EE2FA728DB4A7B2 /* ObjectAdapterI.cpp in Sources */, + FB31778FE73AAA93BD7C9C97 /* ObjectFactory.ice in Sources */, + 35BE914D175254D87B52F79C /* ObserverHelper.cpp in Sources */, + B1029866DFBA033EAFF3A472 /* OpaqueEndpointI.cpp in Sources */, + 46BB70B3651E7C64F90B5837 /* Options.cpp in Sources */, + C0A55EDF637D2B9BC40907F7 /* OSLogLoggerI.cpp in Sources */, + 0FE199E050C697DEDE7E37F5 /* OutgoingAsync.cpp in Sources */, + D9373CB8FCF881F9112E7423 /* OutputStream.cpp in Sources */, + 393D79B00E02566DC29BC6D0 /* OutputUtil.cpp in Sources */, + C859C5EE6D93C054B41EEC22 /* Plugin.ice in Sources */, + 343A2365223EF022186D9078 /* PluginF.ice in Sources */, + 315D356975870C84B3977579 /* PluginManagerI.cpp in Sources */, + 72E045BE45E0CBBF36E73674 /* Process.ice in Sources */, + FEDD1CC595C4F136AEFB25E5 /* ProcessF.ice in Sources */, + 7D67F533D4FF72774872EE43 /* Properties.ice in Sources */, + B6D66D7FE249EC682A7E004F /* PropertiesAdmin.ice in Sources */, + A2656E627CEB8C1CFC24D633 /* PropertiesAdminI.cpp in Sources */, + 0CAB78C8497337E1B93BE811 /* PropertiesF.ice in Sources */, + BD51056E6C09EF7EDE87C66B /* PropertiesI.cpp in Sources */, + 13C88E98118243BFAE8A2071 /* PropertyNames.cpp in Sources */, + 9F324086BBE7C8BA08E6198D /* Protocol.cpp in Sources */, + BF77F7D67CAABA1FE6D5F50F /* ProtocolInstance.cpp in Sources */, + CD98EC598459410E3BF69474 /* ProtocolPluginFacade.cpp in Sources */, + EA45BAF5D0476A968AE85A29 /* Proxy.cpp in Sources */, + AD5AB6A52D6C9EB257C2D04C /* ProxyFactory.cpp in Sources */, + 283E8AEC23A3AF1C2F0229F2 /* Random.cpp in Sources */, + F4F9DF62AA2FE1DDA204D14F /* RecMutex.cpp in Sources */, + AF7779DEDC41D17ABED0F025 /* Reference.cpp in Sources */, + E2F10511C234DE595075315D /* ReferenceFactory.cpp in Sources */, + FB43C16CD04823ADFAAA88D2 /* RegisterPluginsInit.cpp in Sources */, + B3BDDFC18CEDB47AD01F4E02 /* RemoteLogger.ice in Sources */, + 36BCD811BC01E4274BCF2568 /* RequestHandler.cpp in Sources */, + CDD1FAE8B83A23AF373D8C4C /* RequestHandlerFactory.cpp in Sources */, + 7552C7DECFF4E57E4011CF74 /* RetryQueue.cpp in Sources */, + 878653A47C4AFA3DA2AD6970 /* Router.ice in Sources */, + 14C963AF776260AFA81C0010 /* RouterF.ice in Sources */, + 61B37448B215A87446A7A30E /* RouterInfo.cpp in Sources */, + 8440CFF5937793683F5B8E1F /* Selector.cpp in Sources */, + 511F6D1D114453414AAEFF71 /* ServantLocator.ice in Sources */, + 8B2F6A920D423DB3E9272CD9 /* ServantLocatorF.ice in Sources */, + 28EBB364FDF91A8461EDC0C4 /* ServantManager.cpp in Sources */, + 6C09EC64DB5D55FAA0D423FD /* Service.cpp in Sources */, + 91558ABD0D796D04ED3A6ABA /* SHA1.cpp in Sources */, + 6A7CA305A3D666C861930F02 /* Shared.cpp in Sources */, + 81CEAEB60E6B5F2FC1CA966B /* SliceChecksumDict.ice in Sources */, + 8E8CC6E805E88F33C69866C8 /* SliceChecksums.cpp in Sources */, + 8282A2CFB899B21538391DC8 /* SlicedData.cpp in Sources */, + BE3044FD751678C0CBD8E364 /* StreamAcceptor.cpp in Sources */, + 4A504E8A39C05CCE025CDBE6 /* StreamConnector.cpp in Sources */, + B42409E28B853D363B40EA8B /* StreamEndpointI.cpp in Sources */, + DDFA4931EB1234ABCCBAD854 /* StreamSocket.cpp in Sources */, + FE9ABA442B2FEAF197A8A5F4 /* StreamTransceiver.cpp in Sources */, + 16A9AC4A541EEF2061BDABAD /* StringConverter.cpp in Sources */, + C5EBA2C3CFCDD0B4D05EC66B /* StringConverterPlugin.cpp in Sources */, + E77BA79FAFC5578026CCCC54 /* StringUtil.cpp in Sources */, + 20E3F1D7ADBE03E93602402A /* SysLoggerI.cpp in Sources */, + 4F215DB352B5198C36B9A858 /* SystemdJournalI.cpp in Sources */, + 8ED66F8FEF1F6649227B911C /* TcpAcceptor.cpp in Sources */, + B3BA06CE2BEDBF4F400FB941 /* TcpConnector.cpp in Sources */, + 0D040353EA5624B097DEC0F3 /* TcpEndpointI.cpp in Sources */, + DB6A51AE7279B949C96C5B63 /* TcpTransceiver.cpp in Sources */, + C576D44F9D324CE414B1A49A /* Thread.cpp in Sources */, + 5F3F57CB6D2B1F09CE21D13E /* ThreadException.cpp in Sources */, + 556A809A85FC84A62C3E6D94 /* ThreadPool.cpp in Sources */, + 8A169B84739D2F9FF8FC87AD /* Time.cpp in Sources */, + BDD58FC0CE760DC3D947BAD9 /* Timer.cpp in Sources */, + ECA7EFDE949B4DF4A9F94045 /* TraceLevels.cpp in Sources */, + FC96865A8E1F329B5679EB2D /* TraceUtil.cpp in Sources */, + 4CAC33C2A1F9F719665D0DB7 /* Transceiver.cpp in Sources */, + E4E9040296A1F3A97D8F4FEA /* UdpConnector.cpp in Sources */, + 19B3B8A5A77340E581A4E993 /* UdpEndpointI.cpp in Sources */, + 9ABB9C0E752D3012752968CC /* UdpTransceiver.cpp in Sources */, + 29FF2A74A4B599A629F2DEC1 /* UtilException.cpp in Sources */, + 2B8FBF0D9552DFD0CAA3D330 /* UUID.cpp in Sources */, + 602F919083A006A14F973273 /* Value.cpp in Sources */, + 252093E4966061D18C34A717 /* ValueFactory.ice in Sources */, + FFD11263F199F7C2E70D4B95 /* ValueFactoryManagerI.cpp in Sources */, + A1629F176A5E2774C553FD0A /* Version.ice in Sources */, + E7858833DF00D16DC1390215 /* WSAcceptor.cpp in Sources */, + 52A453FB0AF6205567BD4497 /* WSConnector.cpp in Sources */, + BEB0A2C210A82C4A0EF69545 /* WSEndpoint.cpp in Sources */, + C5F68321A95A14D6499933A6 /* WSTransceiver.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + A88A62CE8C3B2DF6FB2FD702 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 316A86CB63D0D7C9E8057DE0 /* TestCommon.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE29C3466F250BD3A29EFE59 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 34BE044B0EAF225B177C3CE2 /* AllTests.swift in Sources */, + 7EBF4A2531C083AA753C685A /* Client.swift in Sources */, + C8D9961559B0BF48CB37F7D6 /* Server.swift in Sources */, + CD6D079F705F31CA133CFE3A /* Test.ice in Sources */, + 955248EA6392CDF13EC13C50 /* TestI.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B04064040DF2494F1056FAEF /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 82CB458EC25B0D7016BBCB69 /* AllTests.swift in Sources */, + 5415E34F248D5BD76EC6F21C /* Client.swift in Sources */, + 608AC87C538A0ED4FE0CBDCB /* Server.swift in Sources */, + A344090C94E205038F1A42E9 /* Test.ice in Sources */, + E65ACF9C238173AA3DD589C4 /* TestI.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B21486CA78E4E77A9D1EDAA5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 1D37C2057FBFA8924D102337 /* AllTests.swift in Sources */, + 225524BC1FA7587DE0E46A5F /* Client.swift in Sources */, + 0332AE15E3D9DA0745162B72 /* Collocated.swift in Sources */, + FBFEFCA12386355923D9787C /* Server.swift in Sources */, + 0EFBBD15D2527804387E6290 /* Test.ice in Sources */, + AAC43E2826D7C8C775C07ADA /* TestI.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B4E7CED0CD85F014EBDB3410 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 1115456314096D06AB701C0B /* ServerAMD.swift in Sources */, + 9F174518AD0D9F138558DEC0 /* TestAMD.ice in Sources */, + 2F95B31D192119D7F2FC4570 /* TestAMDI.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B76807A5513FE776CEC36C86 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 0A403FBA1FB1CABCFFDDC7E2 /* AllTests.swift in Sources */, + DF48DDC8F5BE44C7F2700F0F /* Client.swift in Sources */, + F84A837E4BF6F89D2FFB4A09 /* ClientPrivate.ice in Sources */, + 269072A92ECEB0C74B35624E /* Server.swift in Sources */, + 0989AFA0C5B5E41EF2B3AE91 /* ServerPrivate.ice in Sources */, + FAF36E98C1F18CCCC873BE56 /* Test.ice in Sources */, + 10EB2433EB852D7E3A50C7D9 /* TestI.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B8B9998F41B71993D900709C /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 70ADA831C1C5C210340B7A52 /* Admin.ice in Sources */, + 0408FBF4731356EE15F03B29 /* Descriptor.ice in Sources */, + 0081B391BB9E4C1691F75675 /* Exception.ice in Sources */, + 4F36CD93277C18F9891C92BA /* FileParser.ice in Sources */, + 8B13A5EB8AD8D9494BDC2ADE /* PluginFacade.ice in Sources */, + 321485FE3F8C35C5A258B489 /* Registry.ice in Sources */, + 42EACDFF54E8E05AB80EE32C /* Session.ice in Sources */, + 4CF9E41D9F3534CEFE02277C /* UserAccountMapper.ice in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + C0306080D7A2ABCA9B48D54E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + CCA19CECCA956EC81584313D /* AllTests.swift in Sources */, + 9A14E0C94C5EEF25C03F08DB /* Client.swift in Sources */, + 22AC18A400F59DA741B40196 /* Server.swift in Sources */, + 5663BD12D4CCA16C9E776431 /* Test.ice in Sources */, + 19B6FB9FBE7F6C835A2FA1EB /* TestI.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + C240BB11592A5CB0A586891E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AD2AC03AA21DAF4F6669F042 /* Client.swift in Sources */, + F567FAE9AE3D1D16DCF6A8DD /* Test.ice in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + C62D406F3E7014A9934F9C0A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 8E904C680D817A0A95E2F3CE /* AllTests.swift in Sources */, + 7FA26E6B4603B73F45AE5007 /* Client.swift in Sources */, + 97E7472656EB049051D43CD5 /* Collocated.swift in Sources */, + 1D12A96FC7C7628ECC3291EC /* Server.swift in Sources */, + 9950EF11DE2C24CA6C3B5295 /* Test.ice in Sources */, + 93C77C6C27628580319C283C /* TestI.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + C818275ED716C7F9D2C08F69 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 545D160D4C8401AC81EDB199 /* AllTests.swift in Sources */, + 6626D76E627AE62AF5E4254D /* Client.swift in Sources */, + 06E95584CC8ED0956F2E01AB /* Collocated.swift in Sources */, + 971F710A781358F5305F22F1 /* Server.swift in Sources */, + 84FAB5CF6544CF7654634891 /* Test.ice in Sources */, + 48DBE64DD41784B778D0D5BA /* TestI.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + C86C273044280C495E633F1C /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + B49EABE6CA5AD0911E9FC16B /* AllTests.swift in Sources */, + EB7EBAF12B550CB70076230B /* Client.swift in Sources */, + 4DBAAFAEFA3C883CC9B8C70F /* Collocated.swift in Sources */, + 0B592828833EDAA6BC430E27 /* Server.swift in Sources */, + 2461BF59BCE9C690D420F662 /* Test.ice in Sources */, + B73AF4E022361F7D3EFDCB16 /* TestI.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + C99D9A84A446A57633B5A227 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + C45AC5DF4085D41B1F1900C1 /* Clash.ice in Sources */, + 14B1DE2AFA42B56EFFCD0B4E /* Client.swift in Sources */, + B603CD61A5042CF2474FC487 /* Key.ice in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + CA47D98B43DA80DDD0FC872C /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 51C4F416B113B3A672F60869 /* AllTests.swift in Sources */, + 503516A7A146442AD1441BDB /* Client.swift in Sources */, + CFA19707B03AB69A7BF110FE /* Server.swift in Sources */, + 75091471F123616ED861328B /* Test.ice in Sources */, + CCD6374D0088CB4E4060BE68 /* TestI.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + CB38564D035A6D6CD3CDB4E4 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 02658C6221656BD7A99DB740 /* AllTests.swift in Sources */, + 42F4011C73DF9851A3399AEC /* Client.swift in Sources */, + 549632510F55EB65F2929D79 /* Server.swift in Sources */, + D5C6D577ECDFAC2FFB6E2091 /* Test.ice in Sources */, + 61BF1349924F9B274DA828F4 /* TestI.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + CD11177610E4E8419738722E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 9F84BE91EF951B50498893A7 /* AllTests.swift in Sources */, + E4B88B9050A5B2C8B87C30DF /* Client.swift in Sources */, + 9C285E575802C41F1AA533A4 /* Test.ice in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D153CDDA80CD446CA8D111C3 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 2D1A757825819086C7721170 /* AllTests.swift in Sources */, + 9C1EA8A782106DEC2C9DC104 /* Client.swift in Sources */, + B6DC2394F0DB736BB6751758 /* Collocated.swift in Sources */, + 7C212DBE98D5C38A5C94FA24 /* Server.swift in Sources */, + 7EC4A99947DB3AA55E8407A7 /* Test.ice in Sources */, + D0CB75218E4FB420AA4C64F4 /* TestI.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D42229B03A20636AAAAB0E47 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 0A0C93299CC8C331BA803E40 /* ServerAMD.swift in Sources */, + 60DC99088471F3DCE7AAE1BD /* ServerPrivateAMD.ice in Sources */, + 6B8CA9647DE9323520604BD8 /* TestAMD.ice in Sources */, + 5C2DC71443437944BB6F7B5C /* TestAMDI.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D478724FE8383902D5F0F264 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + CFA683B9B090DD5CBBDD63F9 /* AllTests.swift in Sources */, + F9A33D6B31B1A53E0D787E9D /* Client.swift in Sources */, + 0289FB77EA23F8BCB92BB224 /* Collocated.swift in Sources */, + 86B70C52CCA873564E80DD2A /* Server.swift in Sources */, + 50B543BF29499BE7BE039ED4 /* Test.ice in Sources */, + 076A9FAB341C820C39D4899B /* TestI.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D5AA16D963639A9C34378C30 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 81951EFBCF6AFA70E508784F /* AllTests.swift in Sources */, + 78A0A3ECBC976096141EB5A9 /* Client.swift in Sources */, + 08782D5FB89840CF6FF62423 /* Collocated.swift in Sources */, + 4F0EA1B64CAD65766A64B03A /* Server.swift in Sources */, + 93FCFC220E1DB15B5607A83D /* Test.ice in Sources */, + 129E7BC2B182103CEAA52424 /* TestI.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DA551386C6E8005A91839105 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 30D91F750423EAF6E0A3AA4E /* IceLocatorDiscovery.ice in Sources */, + 5391BAF5A6B58CEEE12EEE37 /* PluginI.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DAE8355EA9B9AE891DCFC72A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + C213A4DC1F9FF94521CDACFD /* AdminFacetFactory.swift in Sources */, + E078B63F168092ED1E29AD07 /* Blobject.swift in Sources */, + 8C38404A0612603410A3A8FE /* BlobjectAsync.swift in Sources */, + 1AC281332068D5FADC6A31B7 /* BlobjectFacade.mm in Sources */, + 98296B67F02DC475B219EBB5 /* BuiltinSequences.ice in Sources */, + C1C3B895E352E20AD255B4AC /* ClassResolver.swift in Sources */, + D33B60D572410030B5DB6F7F /* Communicator.ice in Sources */, + 93C7E81353EEF247F3962543 /* Communicator.mm in Sources */, + 1DDE57276F39699117FC1821 /* CommunicatorF.ice in Sources */, + E6BD4B6E8F70808ADEB8D494 /* CommunicatorI.swift in Sources */, + F094A468A7F849D3D26616CC /* Connection.ice in Sources */, + 6F9F0B61EE226E2666F4A5F2 /* Connection.mm in Sources */, + 6A15DA51E4735BC529DAFDA2 /* ConnectionF.ice in Sources */, + B47A880D4E623F08EFB1B235 /* ConnectionI.swift in Sources */, + 10A6EB3407CEEAA4A71AA023 /* ConnectionInfo.ice in Sources */, + 6F7B3A0F5193763E9DCC6464 /* ConnectionInfoF.ice in Sources */, + 1F207049945C2BAEAB7984DF /* ConnectionInfoFactory.swift in Sources */, + 4FC1554C1005AA727A9AA74D /* Convert.mm in Sources */, + 4257E054C3DA0D6C20A74C01 /* Current.ice in Sources */, + 9115E061CAAA1563B2222D34 /* Endpoint.ice in Sources */, + D44AE2CA9832942F0903F621 /* Endpoint.mm in Sources */, + DE6BB51BCFA6E7695CBA2CEA /* EndpointF.ice in Sources */, + CECC8AA351A36EDFD46914AD /* EndpointI.swift in Sources */, + E1B42CD5A640264FB00D079C /* EndpointInfo.ice in Sources */, + F79E1E2A08969F847891F24A /* EndpointInfoFactory.swift in Sources */, + 9D01EE4DD908E7B5A1B79245 /* EndpointTypes.ice in Sources */, + AFB439D96AECF5840AECBAC0 /* Exception.mm in Sources */, + 095C819136C5A2F0B46E5454 /* Exception.swift in Sources */, + 08601749EC3C097B6AB0DD0A /* FacetMap.ice in Sources */, + C9C17C0754EFFDBD7ED1EF8B /* FormatType.swift in Sources */, + 80489A9181F3EFC1FBE3C63B /* IceUtil.mm in Sources */, + DAB4C3F45D91133CEE978F55 /* Identity.ice in Sources */, + 89196C3343A05B724A057DAD /* ImplicitContext.ice in Sources */, + 1876C9A3C65DD2703F1F3ACC /* ImplicitContext.mm in Sources */, + 61E8DAB4557F7FE2BBAC0059 /* ImplicitContextF.ice in Sources */, + 9B2DFFE5EB15B108F30D0915 /* ImplicitContextI.swift in Sources */, + EE056A55A5DC8CDCC8E66C16 /* Incoming.swift in Sources */, + 3079A1D67984402AE8474CFD /* InitializationData.swift in Sources */, + 9DE28D7CCA347C26D9A58546 /* Initialize.swift in Sources */, + 8BE12B44A43BA5372393CA7B /* InputStream.swift in Sources */, + 6EC92CF0764545FF2B62956C /* Instrumentation.ice in Sources */, + CBDAA9E1626D6E8B27E355FB /* InstrumentationF.ice in Sources */, + 244F74385045B2ECF5448516 /* LocalException.ice in Sources */, + A161EA8E1757FBC5D68B69DC /* LocalExceptionDescription.swift in Sources */, + 5313289E3C96422E3AE27DEA /* LocalExceptionFactory.swift in Sources */, + EA154A67A0DFDEC5901E64DC /* LocalObject.mm in Sources */, + F301A1C283F3B041D7E34ED9 /* LocalObject.swift in Sources */, + E2D68EED7C54BF4D8BBAF9D7 /* Locator.ice in Sources */, + 1CE1858D654370A0F5A97699 /* LocatorF.ice in Sources */, + 335477464957FC3DB7EB547D /* Logger.ice in Sources */, + CF7B2085A2010076758D5C2C /* Logger.mm in Sources */, + A7BF56F7CF15C7F1918E2E52 /* LoggerF.ice in Sources */, + 0A93DAB54BE7666B4873A549 /* LoggerWrapper.swift in Sources */, + 6D652909B779AAF0F4B4D888 /* Metrics.ice in Sources */, + BA560B85D0D2A35F405509A5 /* Mutex.swift in Sources */, + 7631251651B3779E01F1C924 /* NativePropertiesAdmin.swift in Sources */, + A81DFD0B12ABA23D4771ED3D /* Object.swift in Sources */, + D48543D36056084EB09C55D5 /* ObjectAdapter.ice in Sources */, + 18216299BB52E0E1E4ED8B31 /* ObjectAdapter.mm in Sources */, + 25F8EDDC499DA91BC422C429 /* ObjectAdapterF.ice in Sources */, + 76E46DEAD8F0E40EEF87E15E /* ObjectAdapterI.swift in Sources */, + D2F27A10D87596A49EE9EE60 /* ObjectFactory.ice in Sources */, + A7D79C2160E1690B1B355FE3 /* ObjectPrx.mm in Sources */, + DC1EF5DDBFAEECE120D6FF47 /* OptionalFormat.swift in Sources */, + 54D9686EAE8FAEC0FD791A28 /* OutputStream.swift in Sources */, + E2E5DEA925171533E8C3AC88 /* Plugin.ice in Sources */, + 387F1BDB28D6BC841B257F40 /* PluginF.ice in Sources */, + A8004C0FF562C004722DA28E /* Process.ice in Sources */, + 9EEF26F05181D34AEFCF6DF1 /* Process.mm in Sources */, + 5D125A14DF1161A4286CFA6B /* ProcessF.ice in Sources */, + 28AE771787CE3654CB4C1BE5 /* ProcessI.swift in Sources */, + 55F0EE774650208E931D1626 /* Properties.ice in Sources */, + 7C47A2F289EE8C5B96CEED90 /* Properties.mm in Sources */, + FDF7C0FEB093B497BD55A9EC /* PropertiesAdmin.ice in Sources */, + 6B66EC20115DFE12727A149D /* PropertiesAdmin.mm in Sources */, + 9DF2210E1F7DD17814868F92 /* PropertiesAdminI.swift in Sources */, + 2BB4490C1624FD06B164D961 /* PropertiesF.ice in Sources */, + 712BF910D2B4C4517E3AD6D2 /* PropertiesI.swift in Sources */, + B6B9FB7A79A2C88C4B06B073 /* Proxy.swift in Sources */, + B93C9D08A73FB7E0A61EB328 /* RemoteLogger.ice in Sources */, + 38ADB9C2D855400F02A5288E /* Router.ice in Sources */, + 8062048D087502A5E6E44F54 /* RouterF.ice in Sources */, + 0FAF08B6B8F8630EE0F47126 /* ServantLocator.ice in Sources */, + AE3C0F67BF8E4E9032C87F42 /* ServantLocatorF.ice in Sources */, + 314CF076C9DF0B975C45BB07 /* ServantManager.swift in Sources */, + F737271EACBBCA57F964BB0D /* SliceChecksumDict.ice in Sources */, + 5235FF8FC3C88FE4A1458B80 /* SlicedData.swift in Sources */, + AAE3866DFAB4450003968986 /* SliceFlags.swift in Sources */, + 862C4E66B85E3ECF4A1521CC /* SliceInfo.swift in Sources */, + 6A19493DA30C55136603FD22 /* TraceUtil.mm in Sources */, + B0C358210EE980C18A902EAF /* UnknownSlicedValue.swift in Sources */, + B3EF1EBCF891C8FDF3C46A70 /* UnsupportedAdminFacet.mm in Sources */, + CFC7118AAF10A1D5FBE3BE4C /* Util.swift in Sources */, + 30931EB54C0C283804BAEF81 /* Value.swift in Sources */, + C0825C420B0340446F9E6FFA /* ValueFactory.ice in Sources */, + BDCAEA6ACC8CA744C0B7E76A /* ValueFactoryManagerI.swift in Sources */, + E6FA59A37B298550E743AA78 /* Version.ice in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E1DACD4FE26A355CBEBB48E2 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 7717D18EBF31682E681A09C3 /* main.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E7411A3FDA98C80A951B3D80 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 319577A24E9D3843475721F0 /* ServerAMD.swift in Sources */, + 554DDDFA9143C89B533457AE /* ServerPrivateAMD.ice in Sources */, + E859AABE689A2CBA31815C32 /* TestAMD.ice in Sources */, + 3EFB04269B0353AF52012041 /* TestAMDI.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E865C0CC7BEB8A9A7DAEE229 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 2D5850EB1105C16C1A4DE7B5 /* Client.swift in Sources */, + F44B8F47C1D5F6BF6921E5B4 /* Test.ice in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E950CA9EFE918DED875C9F45 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + D5343E2A16548A11EE8A9E95 /* AllTests.swift in Sources */, + 2EACEEB10AE9F7C01B2A04E7 /* Client.swift in Sources */, + 066722DF9120BF918C6E0536 /* Server.swift in Sources */, + 916715DA8664AE85F441A57B /* Test.ice in Sources */, + C8D45DE2C05F4A99CFEAAA78 /* TestI.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F515C258B1DD0477296D8A22 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 673D9553F3BA6F52B298E9B0 /* AllTests.swift in Sources */, + A3AD02B0A5E41F0D4C0090D7 /* Client.swift in Sources */, + F365B55BEF85C45835E8BC2A /* Server.swift in Sources */, + 815FE5DA79FF747CBD55369F /* Test.ice in Sources */, + B5B06F29860066079EF60978 /* TestI.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F5883CD437B7A0D82DCE900E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 5B2C9AC715B8900E7DA275C7 /* AllTests.swift in Sources */, + E17B2A5068393689A520D3B6 /* Client.swift in Sources */, + 3106DD435CA85253D14154DA /* Server.swift in Sources */, + 4D199B02FF62DA6F2C677018 /* Test.ice in Sources */, + D78ED2B922E0DA6581778305 /* TestI.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F6AF2442CFCEE58438D1BEE1 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 789E0A7DAB2AC4D06984BE2C /* AllTests.swift in Sources */, + 80581DA89E19746857EF4C89 /* Client.swift in Sources */, + D4C7CB694404F84ACAF6FE17 /* Server.swift in Sources */, + FC27B455E5CCB16667E6412A /* Test.ice in Sources */, + 1EC7FEE0B3D397C4EFAB2C43 /* TestI.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F861973553D003151EFAABFA /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 1625BD16048EEF46F5FDC8D7 /* ServantLocatorI.swift in Sources */, + 4041409F845FB5CC5DC7E025 /* ServerAMD.swift in Sources */, + FEC662A85E2195E2AC2890BC /* TestAMD.ice in Sources */, + 0B2D3057B9F25CFE669F74AA /* TestAMDI.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F8F3577B96576512D2B37AC4 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 7FB7F2E1B615DC5A1A6F482B /* AllTests.swift in Sources */, + FD0217AFE2D9DDCB463A141A /* Client.swift in Sources */, + 3E508BED680DE287A58E5088 /* Server.swift in Sources */, + 0320E320253B3D129FA475C5 /* Test.ice in Sources */, + 69CA7AFD93E0A74A6793AB77 /* TestI.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F9A4587F9B6D5EFF19522784 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 0561404BB3BE93E87079750B /* ServerAMD.swift in Sources */, + D153C7D322A894AEEB1A89C8 /* TestAMD.ice in Sources */, + 6FF956171BA9E2F342F32BCC /* TestAMDI.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 006B9B41F4F5EE6FF28D9C19 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceEnums macOS"; + target = 8570DC29A49AAFCC705FC566 /* IceEnums macOS */; + targetProxy = 256F964C7089164917C4241C /* PBXContainerItemProxy */; + }; + 008654CB5536D5C1838C9536 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceStream macOS"; + target = 25815E6D3B269988C01FB074 /* IceStream macOS */; + targetProxy = FE9C644EDE95DB0B769EB939 /* PBXContainerItemProxy */; + }; + 03F5897538846D93BE119B45 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceTimeout iOS"; + target = D393ADD0DC5B2DBF7615B695 /* IceTimeout iOS */; + targetProxy = D8EBB6E388D1BAA6C5E9E157 /* PBXContainerItemProxy */; + }; + 041ED8DE1EB27EAE73B94C50 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceProxyAMD macOS"; + target = F630FE1D71D3F9AE8117A44B /* IceProxyAMD macOS */; + targetProxy = 54F4B8F8F545574D7DF96047 /* PBXContainerItemProxy */; + }; + 08D349DA96F2240521AF0889 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceSlicingExceptions macOS"; + target = 5578B6E2AB09031CEEF966E5 /* IceSlicingExceptions macOS */; + targetProxy = 9EE5BAED84AD90EF7804015B /* PBXContainerItemProxy */; + }; + 0A4552BA697F64F18A929FE2 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceOptional iOS"; + target = 236F633B019405F93C02FB55 /* IceOptional iOS */; + targetProxy = CD28A9F076E76390B0A8F11B /* PBXContainerItemProxy */; + }; + 0C7F86FD4A3D98CB5A10166D /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceTimeout macOS"; + target = B40D564181E5D7DC364AC8AF /* IceTimeout macOS */; + targetProxy = D5A0BEF5C3CA3598C5A73F86 /* PBXContainerItemProxy */; + }; + 0CB3D611CC485324696280C0 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceDefaultValue macOS"; + target = 42BEFF63ED45F66D4DEB08F9 /* IceDefaultValue macOS */; + targetProxy = E96E03DF1A95C24CFDF4B36A /* PBXContainerItemProxy */; + }; + 107F5C037399DAB44183A533 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceOperationsAMD macOS"; + target = 74BF5B1E9E63F56637AF0C5C /* IceOperationsAMD macOS */; + targetProxy = C9F4DCB12E8B3E89B5481551 /* PBXContainerItemProxy */; + }; + 12AA5F6A616E5490AA1827C7 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "Ice C++11 macOS"; + target = 2493729D7F7E9B76236AE7E5 /* Ice C++11 macOS */; + targetProxy = 1DD74438CFD549271568EDD5 /* PBXContainerItemProxy */; + }; + 12CAA9280B6279BF0D6CBAEF /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceExceptionsAMD macOS"; + target = 68527026E5DA54703EEFFC18 /* IceExceptionsAMD macOS */; + targetProxy = 9E2A558A617DAEBE679075FB /* PBXContainerItemProxy */; + }; + 143DEB2A46BEEEC38F0F280F /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "Ice C++11 iOS"; + target = 45785A8A5F989B52F70FF09A /* Ice C++11 iOS */; + targetProxy = 3B9ED2C806044886CD53D5F8 /* PBXContainerItemProxy */; + }; + 17816D800CD521BBB25132C9 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceBinding iOS"; + target = 49F81B65F4CF3D68A954EB61 /* IceBinding iOS */; + targetProxy = F43ABE214D312A15DF56B597 /* PBXContainerItemProxy */; + }; + 186B5289B7476B9452DF85DE /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceProxyAMD iOS"; + target = BB5F7AA59CB20B5A1FF0908F /* IceProxyAMD iOS */; + targetProxy = C225C4741EB0CE4AF847162E /* PBXContainerItemProxy */; + }; + 190892129C0C09A4F3FC6EE0 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceInvoke macOS"; + target = F7AB901D020B23C997BEFBF1 /* IceInvoke macOS */; + targetProxy = 5B87B813E9F7869AB89C9146 /* PBXContainerItemProxy */; + }; + 1B17A469827E2EA0C102E7F6 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceUdp iOS"; + target = 881250C6D8BE80DB29A0385B /* IceUdp iOS */; + targetProxy = 5AA72E6FC288E2F71967BA25 /* PBXContainerItemProxy */; + }; + 20520F5711EDB357CAE528C2 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceAdapterDeactivation iOS"; + target = 9C752DD36F100CB9CBBD0EF7 /* IceAdapterDeactivation iOS */; + targetProxy = 24BD41A3DE78A2CCCE44D242 /* PBXContainerItemProxy */; + }; + 20D39827E0A9CBE128842097 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceSSLConfiguration macOS"; + target = C52C439B2C3C7D798C1D14E6 /* IceSSLConfiguration macOS */; + targetProxy = 467BD94340AF6DDCD91B5F9B /* PBXContainerItemProxy */; + }; + 259CBB80BB6DF1C0A6B9BDA9 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "Ice C++11 macOS"; + target = 2493729D7F7E9B76236AE7E5 /* Ice C++11 macOS */; + targetProxy = B5429F020C751AF57F2DC651 /* PBXContainerItemProxy */; + }; + 276C0A6E82F077250D45EB24 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceSlicingObjects iOS"; + target = 84B57B17572B472DB9473F3A /* IceSlicingObjects iOS */; + targetProxy = B14E88D1070DEF79F95C32A8 /* PBXContainerItemProxy */; + }; + 2BF0958BE813F113CF2363BB /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceUdp macOS"; + target = 8172B0B43BFF7CD036F8AAF8 /* IceUdp macOS */; + targetProxy = 29FF00FE59065850F898FE0B /* PBXContainerItemProxy */; + }; + 2C026F2375A6F7D61094583D /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceServantLocator macOS"; + target = 0F6C3879164CC37BCB92ED0D /* IceServantLocator macOS */; + targetProxy = 6BEA78D7E805D26DC0339DAB /* PBXContainerItemProxy */; + }; + 3130B9426808F5BE9894FC83 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceAdapterDeactivation macOS"; + target = DB5E14F78818BB1599DAB991 /* IceAdapterDeactivation macOS */; + targetProxy = B92535D8BC867A2BA5F15091 /* PBXContainerItemProxy */; + }; + 3534FAFA0F76209AEA6DF4D3 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceServantLocator iOS"; + target = 22F59FDE5EB8BF5D73B8AC27 /* IceServantLocator iOS */; + targetProxy = 00FD89823C84AAAAD61694D1 /* PBXContainerItemProxy */; + }; + 3C0933E62BB72399380A0F8D /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceProperties macOS"; + target = 91E917098ED4D8FE96B582B1 /* IceProperties macOS */; + targetProxy = D9AB5D0DBE63FA3707FEF416 /* PBXContainerItemProxy */; + }; + 4271FE212C67FEC8335FF699 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceExceptions iOS"; + target = F03BC2863420CAE44ADF6E43 /* IceExceptions iOS */; + targetProxy = 3608D8846AF1C5ABE5DEF5A6 /* PBXContainerItemProxy */; + }; + 42A13E71F5BF6E190CC2E47A /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceServantLocatorAMD iOS"; + target = 2DCD382A1A9C114E838BCE05 /* IceServantLocatorAMD iOS */; + targetProxy = 9ADB787A3F9DAB5DC5702E11 /* PBXContainerItemProxy */; + }; + 4395733CCBFB4B7FF475C199 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceOperations macOS"; + target = F919A202D3CC004235B7961B /* IceOperations macOS */; + targetProxy = 845101AC6838DF46B97D53B9 /* PBXContainerItemProxy */; + }; + 43BC2E82853835A7E41B8BC4 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceDefaultServant macOS"; + target = DB262AF5F08B0E38FBED3EC9 /* IceDefaultServant macOS */; + targetProxy = C06A3F4C2D613D1F6E4913E1 /* PBXContainerItemProxy */; + }; + 445FCF59AF98B87C3F790068 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceObjects iOS"; + target = 0E6EE25C3FEF764F7E917F19 /* IceObjects iOS */; + targetProxy = E5B7650E7D1A7B8DB737DA2A /* PBXContainerItemProxy */; + }; + 45024CA1DF02907D9843ED05 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceExceptions macOS"; + target = EFC33EE48CCBB18EF56B0FC3 /* IceExceptions macOS */; + targetProxy = 0CF53B19C4FF037D1940D9FE /* PBXContainerItemProxy */; + }; + 47792A8C4472EAFF1C842A8B /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceInvoke iOS"; + target = 9762E32D99613E83FD20D0D8 /* IceInvoke iOS */; + targetProxy = 7957009F78337E524E7597C6 /* PBXContainerItemProxy */; + }; + 4BBD801FFA279D24C2886034 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceAdmin iOS"; + target = 6AC0F4641FD881A3F9FDE7CC /* IceAdmin iOS */; + targetProxy = 08BAB59242DC4A13AA9C229D /* PBXContainerItemProxy */; + }; + 55946A6CA521FF27621BC827 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceInheritance macOS"; + target = 256AB7445137457382972306 /* IceInheritance macOS */; + targetProxy = 7EB3341DFE6A56B54C2D6913 /* PBXContainerItemProxy */; + }; + 5717DD03A56DA626B4C13D5F /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceAdmin macOS"; + target = C9ECE36CD6C3FDC548AE1395 /* IceAdmin macOS */; + targetProxy = 4E1591364724982BABBA2884 /* PBXContainerItemProxy */; + }; + 5BD4AF5FBBA39668DD028153 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceSSLConfiguration iOS"; + target = 9D14EA76CE6437452C395F6C /* IceSSLConfiguration iOS */; + targetProxy = BB7F9976E570A54D07EF8FF0 /* PBXContainerItemProxy */; + }; + 5CF36BCBA7080409B17A4F4B /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "Ice C++11 iOS"; + target = 45785A8A5F989B52F70FF09A /* Ice C++11 iOS */; + targetProxy = F06F755E560114922A5F4967 /* PBXContainerItemProxy */; + }; + 5DF04CCCC77A9FB75E5FBF71 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "SliceEscape macOS"; + target = DEAC294186758C2289786E09 /* SliceEscape macOS */; + targetProxy = 9478BD4DD5EFC51FD243F7B1 /* PBXContainerItemProxy */; + }; + 5E7598EF287879E963467616 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceFacets iOS"; + target = DAF8D0203D265E05C8E59904 /* IceFacets iOS */; + targetProxy = B7FC3068B34D369F9918B887 /* PBXContainerItemProxy */; + }; + 610C6CE0835E11219FF62416 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceDefaultServant iOS"; + target = 4217D4CAD719BC666712429F /* IceDefaultServant iOS */; + targetProxy = 299E7F5DE222690386DA72F1 /* PBXContainerItemProxy */; + }; + 61E07185501D6FE488B1AD2A /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceObjects macOS"; + target = 9824CA3BDAE389C6BFE9724E /* IceObjects macOS */; + targetProxy = 2C92247D23AFE94BCD076772 /* PBXContainerItemProxy */; + }; + 62C561306DF1C2803F140A3A /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "Ice C++11 iOS"; + target = 45785A8A5F989B52F70FF09A /* Ice C++11 iOS */; + targetProxy = 8C58F7447035B5AF70BED4DA /* PBXContainerItemProxy */; + }; + 660BDB072F9F74748CB196DB /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceRetry iOS"; + target = 711F18EAD4D0F01FD488DC77 /* IceRetry iOS */; + targetProxy = 99E6EC2B9A22B3A09D295CC8 /* PBXContainerItemProxy */; + }; + 6679812A27F52335DD200C3B /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "SliceEscape iOS"; + target = 57023FDC36B7ACF8AEB2B86F /* SliceEscape iOS */; + targetProxy = 87536DF0C24D1226861BFE64 /* PBXContainerItemProxy */; + }; + 66F667902E6E871DD1E3B745 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceProxy macOS"; + target = DA2903A145E256D0159DA978 /* IceProxy macOS */; + targetProxy = 43450CFB6ABEE1790C6DAFA3 /* PBXContainerItemProxy */; + }; + 687304CA484644697465D240 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceLocation iOS"; + target = 45F7C5838CC5BD1755605638 /* IceLocation iOS */; + targetProxy = 366295DEBDF44C91693D4214 /* PBXContainerItemProxy */; + }; + 794787C761EAE91B50754BC9 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceAmi macOS"; + target = 657CC3DC1EE12800505DDDC9 /* IceAmi macOS */; + targetProxy = 28F852A81258223E19504B21 /* PBXContainerItemProxy */; + }; + 8322DADD440ADE62DF1ADF87 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceAcm iOS"; + target = 8CDF569BE7FD7056CC64AEBD /* IceAcm iOS */; + targetProxy = AA5CDACE9AA5DA132BEA11E0 /* PBXContainerItemProxy */; + }; + 887DBA1B991A5FDFAA9DD80C /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "Ice C++11 macOS"; + target = 2493729D7F7E9B76236AE7E5 /* Ice C++11 macOS */; + targetProxy = 526D455DA264AE0DFD46C30B /* PBXContainerItemProxy */; + }; + 8B5C02816CE336BDC6565731 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceProperties iOS"; + target = A0BFE78E710B0B1240650735 /* IceProperties iOS */; + targetProxy = 38DB4C8A42B9976E01B83CA7 /* PBXContainerItemProxy */; + }; + 99CF6D43F19B63CEC62B820D /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceOptionalAMD iOS"; + target = 5014B8DF208C7227AC852821 /* IceOptionalAMD iOS */; + targetProxy = D31A7E3352E9493674FD2ABC /* PBXContainerItemProxy */; + }; + 9F5D16E2EF33F9C648881B70 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceLocation macOS"; + target = 9EDC064A438ACAEEABFFCD28 /* IceLocation macOS */; + targetProxy = 6E0AE96B06D60FB4A0017FD1 /* PBXContainerItemProxy */; + }; + 9FB6D1DF07112105470E62C2 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceInheritance iOS"; + target = F8767CA4BDEADDE1A1884D5C /* IceInheritance iOS */; + targetProxy = 73BF18F9465726BF4397BBC1 /* PBXContainerItemProxy */; + }; + A15DDF77ED59E3A2BCD8663E /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceSlicingExceptionsAMD iOS"; + target = 61C40BBD5F24B8422CF093CF /* IceSlicingExceptionsAMD iOS */; + targetProxy = F32E850AFF3E5A366204ABCD /* PBXContainerItemProxy */; + }; + A18391A9FC69F43899E2E509 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceSlicingObjects macOS"; + target = 8E3EA7797A22D89ACC8767DA /* IceSlicingObjects macOS */; + targetProxy = 76BE7FE30A0DCA65D277336F /* PBXContainerItemProxy */; + }; + A24E9E9CD13BE8EF2CEF0836 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceSlicingExceptionsAMD macOS"; + target = 48A44724482F53DB8836FA44 /* IceSlicingExceptionsAMD macOS */; + targetProxy = 0DA523C92BCC8C8D303DAB69 /* PBXContainerItemProxy */; + }; + A2979AA6CE972DD9CCE8CD25 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceFacets macOS"; + target = 7ED2831E7D9351394B42F694 /* IceFacets macOS */; + targetProxy = 32521AB0FAC00F42D19CD11F /* PBXContainerItemProxy */; + }; + A771EB0E1276F23A34192EC9 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceStream iOS"; + target = 5397CEC0325F0EE19F8A4376 /* IceStream iOS */; + targetProxy = C68C942B7B4409832DB35577 /* PBXContainerItemProxy */; + }; + A9F25738819D2C8B66EA8A99 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceOptional macOS"; + target = 31A765FCD292D8FF91A02483 /* IceOptional macOS */; + targetProxy = 286CC429AD8D1AA7065A04E7 /* PBXContainerItemProxy */; + }; + B243D234E24C585462AE16F3 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceInfo macOS"; + target = 314BF239BAEBB53CD4F547C7 /* IceInfo macOS */; + targetProxy = 999B4ED7F2E0794288A8607E /* PBXContainerItemProxy */; + }; + B968FEC7AB635A1391FC1AE9 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceEnums iOS"; + target = 5F293FDF6A695184C8A8372C /* IceEnums iOS */; + targetProxy = 20F4B3CE9FE04FA4B68955E3 /* PBXContainerItemProxy */; + }; + BB6F00CB87F66425337E3A1C /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceSlicingObjectsAMD macOS"; + target = 1797F20952E42DF66D6D33BF /* IceSlicingObjectsAMD macOS */; + targetProxy = A3EDBACB1FDE9A47EB070AB6 /* PBXContainerItemProxy */; + }; + BD3437360179EB8F4F09A97B /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceAmi iOS"; + target = AEDF86E2A1A75EBE97C06C0F /* IceAmi iOS */; + targetProxy = DD76C9A6CB80A663546FA506 /* PBXContainerItemProxy */; + }; + C1BB224491C429B15C15C212 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceExceptionsAMD iOS"; + target = 11485B5FF929691A5833C99A /* IceExceptionsAMD iOS */; + targetProxy = B509014C50BB26FC80432A1C /* PBXContainerItemProxy */; + }; + C47C6DA81C80B8B99A1756C5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceOptionalAMD macOS"; + target = A10509EA7E4240467A68D03B /* IceOptionalAMD macOS */; + targetProxy = 73B9D63956F5A99EA1AD5490 /* PBXContainerItemProxy */; + }; + C4AB0A26B2905878D5FE8CEF /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceServantLocatorAMD macOS"; + target = 8CA5088455BC6A8877F6585D /* IceServantLocatorAMD macOS */; + targetProxy = 00CF74B38E229ADA7AE66A7A /* PBXContainerItemProxy */; + }; + CB0D0ACD5E79EA1DFC4BC9D0 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceBinding macOS"; + target = EE1DA5B2B5550B18C6EAEFC4 /* IceBinding macOS */; + targetProxy = C7775C223C87127895A89442 /* PBXContainerItemProxy */; + }; + D4215BEFA0325C8E4BC4F26B /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceSlicingObjectsAMD iOS"; + target = 150A64F2FB99464CBB6A17B4 /* IceSlicingObjectsAMD iOS */; + targetProxy = 6B3C4E2A3C1DAADC3874B8AB /* PBXContainerItemProxy */; + }; + D454922D3CE8E4668F0BB52C /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceOperationsAMD iOS"; + target = B02741DA7E909B59FFEF2A32 /* IceOperationsAMD iOS */; + targetProxy = 1684F94FC9F2356709007005 /* PBXContainerItemProxy */; + }; + D777DC913B745B7AB834975B /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceProxy iOS"; + target = 36C60483DFECCC705AD9B224 /* IceProxy iOS */; + targetProxy = 48D512B771BD4A1586C63E52 /* PBXContainerItemProxy */; + }; + DEE0038BB655CF0F64F6E3B7 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceHold iOS"; + target = 94F774D983D7806C8B24980D /* IceHold iOS */; + targetProxy = 9FDE157618703DB028695B77 /* PBXContainerItemProxy */; + }; + E11F2C04377A9BCC9DC9EB79 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceAcm macOS"; + target = 4FF834835F517C58332265C2 /* IceAcm macOS */; + targetProxy = 1F94AA7511F39C25AE9AA6A2 /* PBXContainerItemProxy */; + }; + E34C3EDA1BC5B503651D2A70 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceRetry macOS"; + target = E934D2880DF7299FD6830C1E /* IceRetry macOS */; + targetProxy = A7BFA014FE750224E3EA8C2B /* PBXContainerItemProxy */; + }; + E9A1B4C7119664F0C0B9B35B /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceSlicingExceptions iOS"; + target = CE781DFB6EA5764475DE56D1 /* IceSlicingExceptions iOS */; + targetProxy = D687C04B238751AC26697671 /* PBXContainerItemProxy */; + }; + ED0F836F978EBA92BFDDB759 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "Ice C++11 iOS"; + target = 45785A8A5F989B52F70FF09A /* Ice C++11 iOS */; + targetProxy = BAEB4E16C1DF53D8C332D0BB /* PBXContainerItemProxy */; + }; + EDDBAA8DB45F0771A4FAE7E2 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceHold macOS"; + target = C1A0392775F4A0ED6AB29083 /* IceHold macOS */; + targetProxy = 532D136EA151898DE402E1F8 /* PBXContainerItemProxy */; + }; + F10096E9AE0C8E858C094216 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceOperations iOS"; + target = 8D0BD3C20FA17536D15BAA1F /* IceOperations iOS */; + targetProxy = 0267E3820CCD6EA2414C2550 /* PBXContainerItemProxy */; + }; + F783B7D3738C130759895DD7 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceDefaultValue iOS"; + target = D9A5192102BC772D79236B80 /* IceDefaultValue iOS */; + targetProxy = B039008BD687D2EE680D2ED4 /* PBXContainerItemProxy */; + }; + F925C6277A1744B0440CCF2B /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceScope iOS"; + target = 88B4DDB0B9CC0F6E3EF41043 /* IceScope iOS */; + targetProxy = B6A3C3205C97135742CEA147 /* PBXContainerItemProxy */; + }; + FCC7BF40CE19A02D94663295 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceInfo iOS"; + target = ABD61E830D609E366325ED4F /* IceInfo iOS */; + targetProxy = BD084DC3A41268A43E4F667F /* PBXContainerItemProxy */; + }; + FEC8DBD8A0C9750176FC217C /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IceScope macOS"; + target = 5FBA2B46360A4138C56A793D /* IceScope macOS */; + targetProxy = 13762457FD2AC5C9D8E00FE5 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 01372DE5BD44700FA039184F /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceFacets; + PRODUCT_NAME = IceFacets; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 01788FAB35EC0ECFB195AD62 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceUdp; + PRODUCT_NAME = IceUdp; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 019A9D4B9AABA5AA28CB6C6C /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceProxy; + PRODUCT_NAME = IceProxy; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 026A2B7743A59760039C4049 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceDefaultServant; + PRODUCT_NAME = IceDefaultServant; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 03FAB110900E394ED229022E /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceOptionalAMD; + PRODUCT_NAME = IceOptionalAMD; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 04D014AD439BEEB391EB4955 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceAdmin; + PRODUCT_NAME = IceAdmin; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 08CA6090407E8E61B2E186F1 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceInheritance; + PRODUCT_NAME = IceInheritance; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + VALIDATE_PRODUCT = YES; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 090419CA29BEA80478776962 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceAdapterDeactivation; + PRODUCT_NAME = IceAdapterDeactivation; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 0A342BA729A10D4457FFF677 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceServantLocator; + PRODUCT_NAME = IceServantLocator; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + VALIDATE_PRODUCT = YES; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 0A87CCB71A043995717DE9D3 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + FRAMEWORK_VERSION = A; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INFOPLIST_FILE = src/Glacier2/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.Glacier2; + PRODUCT_NAME = Glacier2; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 0BB8F9D7443CE2ABFD8FC0AE /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceAdapterDeactivation; + PRODUCT_NAME = IceAdapterDeactivation; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + VALIDATE_PRODUCT = YES; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 120C72FDC2C19B7A1A7C760A /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceSlicingExceptionsAMD; + PRODUCT_NAME = IceSlicingExceptionsAMD; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 12C4EE286AEA54CB45BB6DB5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CLANG_ENABLE_OBJC_ARC = NO; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_TESTABILITY = NO; + EXECUTABLE_PREFIX = lib; + GCC_PREPROCESSOR_DEFINITIONS = ( + ICE_CPP11_MAPPING, + ICE_BUILDING_SRC, + ICE_STATIC_LIBS, + ICE_SWIFT, + ); + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/../cpp/include/", + "$(SYMROOT)/$(PLATFORM_NAME)/include/", + "$(SRCROOT)/../cpp/src/", + ); + PRODUCT_BUNDLE_IDENTIFIER = "com.zeroc.IceDiscovery++11macOS"; + PRODUCT_NAME = "IceDiscovery++11macOS"; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + }; + name = Debug; + }; + 13346E14632950A3B8949DC3 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceDefaultValue; + PRODUCT_NAME = IceDefaultValue; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 14B122D6192F72D9C105A1B3 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceSSLConfiguration; + PRODUCT_NAME = IceSSLConfiguration; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 151E7A8495FAD954071478FF /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceSlicingExceptions; + PRODUCT_NAME = IceSlicingExceptions; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + VALIDATE_PRODUCT = YES; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 178B0B670457EC13E0E1E48E /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceSlicingObjectsAMD; + PRODUCT_NAME = IceSlicingObjectsAMD; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 19EC97909C6E9AB0E78E8529 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.SliceEscape; + PRODUCT_NAME = SliceEscape; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + VALIDATE_PRODUCT = YES; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 19FEB06FF2D5542FF2B090FA /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CLANG_ENABLE_OBJC_ARC = NO; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_TESTABILITY = NO; + EXECUTABLE_PREFIX = lib; + GCC_PREPROCESSOR_DEFINITIONS = ( + ICE_CPP11_MAPPING, + ICE_BUILDING_SRC, + ICE_STATIC_LIBS, + ICE_SWIFT, + NDEBUG, + ); + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/../cpp/include/", + "$(SYMROOT)/$(PLATFORM_NAME)/include/", + "$(SRCROOT)/../cpp/src/", + ); + PRODUCT_BUNDLE_IDENTIFIER = "com.zeroc.Ice++11macOS"; + PRODUCT_NAME = "Ice++11macOS"; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + }; + name = Release; + }; + 1D2A32E0BF86006A3D910C2D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CLANG_ENABLE_OBJC_ARC = NO; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_TESTABILITY = NO; + GCC_PREPROCESSOR_DEFINITIONS = ( + ICE_CPP11_MAPPING, + ICE_BUILDING_SRC, + ICE_STATIC_LIBS, + ICE_SWIFT, + NDEBUG, + ); + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/../cpp/include/", + "$(SYMROOT)/$(PLATFORM_NAME)/include/", + "$(SRCROOT)/../cpp/src/", + ); + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_BUNDLE_IDENTIFIER = "com.zeroc.Ice++11iOS"; + PRODUCT_NAME = "Ice++11iOS"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 1E240AA99536193038E6D7E8 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceAcm; + PRODUCT_NAME = IceAcm; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 1F5A241EFB47FAC0958EF4F8 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceSlicingExceptions; + PRODUCT_NAME = IceSlicingExceptions; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 208B50F49F4DA27467F3F7F2 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceUdp; + PRODUCT_NAME = IceUdp; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 22CF16E122A8ABB7FD328F48 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceStream; + PRODUCT_NAME = IceStream; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 22E89DFF233845AEE394C2AC /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceProperties; + PRODUCT_NAME = IceProperties; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 22ED2260CA86E8E8B37DA5F0 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceExceptions; + PRODUCT_NAME = IceExceptions; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 2405A3303748456E8C495EC2 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceProxyAMD; + PRODUCT_NAME = IceProxyAMD; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 25872E295CBF1AB3C79AA912 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceDefaultServant; + PRODUCT_NAME = IceDefaultServant; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 260491A4333F10C058CAE445 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceRetry; + PRODUCT_NAME = IceRetry; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 2638193B9692E3873EA98824 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceRetry; + PRODUCT_NAME = IceRetry; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 26964C50C6A2356DAB5C7D66 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + FRAMEWORK_VERSION = A; + GCC_PREPROCESSOR_DEFINITIONS = ( + ICE_CPP11_MAPPING, + ICE_STATIC_LIBS, + ICE_SWIFT, + ); + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/../cpp/include/", + "$(SYMROOT)/$(PLATFORM_NAME)/include/", + "$(SRCROOT)/../cpp/src/", + ); + INFOPLIST_FILE = src/Ice/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; + OTHER_LDFLAGS = ( + "-lbz2", + "-liconv", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.Ice; + PRODUCT_NAME = Ice; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_INCLUDE_PATHS = "$(SRCROOT)/src/IceObjc"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 275F4EDA14BBC35F9C7A44A5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceSlicingExceptionsAMD; + PRODUCT_NAME = IceSlicingExceptionsAMD; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + VALIDATE_PRODUCT = YES; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 28C5B1DD28FCA547D6E9BC56 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceServantLocator; + PRODUCT_NAME = IceServantLocator; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 28D599E5FEE7B24CA2341443 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CLANG_ENABLE_OBJC_ARC = NO; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_TESTABILITY = NO; + GCC_PREPROCESSOR_DEFINITIONS = ( + ICE_CPP11_MAPPING, + ICE_BUILDING_SRC, + ICE_STATIC_LIBS, + ICE_SWIFT, + ); + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/../cpp/include/", + "$(SYMROOT)/$(PLATFORM_NAME)/include/", + "$(SRCROOT)/../cpp/src/", + ); + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_BUNDLE_IDENTIFIER = "com.zeroc.IceSSL++11iOS"; + PRODUCT_NAME = "IceSSL++11iOS"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 2B6634B7C7A6DE0C746D57A9 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceOptional; + PRODUCT_NAME = IceOptional; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 2B826C4DCECC6B6475335411 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceExceptions; + PRODUCT_NAME = IceExceptions; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + VALIDATE_PRODUCT = YES; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 2C1041F8E9125EC4234842C4 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CLANG_ENABLE_OBJC_ARC = NO; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_TESTABILITY = NO; + GCC_PREPROCESSOR_DEFINITIONS = ( + ICE_CPP11_MAPPING, + ICE_BUILDING_SRC, + ICE_STATIC_LIBS, + ICE_SWIFT, + ); + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/../cpp/include/", + "$(SYMROOT)/$(PLATFORM_NAME)/include/", + "$(SRCROOT)/../cpp/src/", + ); + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_BUNDLE_IDENTIFIER = "com.zeroc.IceLocatorDiscovery++11iOS"; + PRODUCT_NAME = "IceLocatorDiscovery++11iOS"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 2D1FFF8AA39191172D00CE1C /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceOperations; + PRODUCT_NAME = IceOperations; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + VALIDATE_PRODUCT = YES; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 2E1C490C041034EE73CCE418 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceAcm; + PRODUCT_NAME = IceAcm; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + VALIDATE_PRODUCT = YES; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 2EEE3212F4EA2E75BAD26057 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + FRAMEWORK_VERSION = A; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INFOPLIST_FILE = src/IceStorm/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceStorm; + PRODUCT_NAME = IceStorm; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 2F2D4A5B7FCCBF71575143E4 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CLANG_ENABLE_OBJC_ARC = NO; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_TESTABILITY = NO; + EXECUTABLE_PREFIX = lib; + GCC_PREPROCESSOR_DEFINITIONS = ( + ICE_CPP11_MAPPING, + ICE_BUILDING_SRC, + ICE_STATIC_LIBS, + ICE_SWIFT, + ); + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/../cpp/include/", + "$(SYMROOT)/$(PLATFORM_NAME)/include/", + "$(SRCROOT)/../cpp/src/", + ); + PRODUCT_BUNDLE_IDENTIFIER = "com.zeroc.IceLocatorDiscovery++11macOS"; + PRODUCT_NAME = "IceLocatorDiscovery++11macOS"; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + }; + name = Debug; + }; + 30D909094BC86E43535959E9 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceInvoke; + PRODUCT_NAME = IceInvoke; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 35D5E00F2ACDD4718E436388 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceSlicingObjects; + PRODUCT_NAME = IceSlicingObjects; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 36DC554E670075E5B9B24BA5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.SliceEscape; + PRODUCT_NAME = SliceEscape; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 373BA8087EDF6EDA786ACAC6 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceInfo; + PRODUCT_NAME = IceInfo; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 39BE0D3E7CFDFEA88D62FFA9 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceStream; + PRODUCT_NAME = IceStream; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 3A3170F191456707A18DF3AF /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceLocation; + PRODUCT_NAME = IceLocation; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 3D28F27C0B0BEF0CAB24665D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.SliceEscape; + PRODUCT_NAME = SliceEscape; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 3DBE45D1CDE13522A881EB95 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceSlicingObjectsAMD; + PRODUCT_NAME = IceSlicingObjectsAMD; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + VALIDATE_PRODUCT = YES; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 3F13FC3C8696EE5A82BDCE76 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceDefaultServant; + PRODUCT_NAME = IceDefaultServant; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + VALIDATE_PRODUCT = YES; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 404690898FBB1E6C11E85931 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceServantLocatorAMD; + PRODUCT_NAME = IceServantLocatorAMD; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 4075CE8B4BAB4FE4DF05B8FB /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "Mac Developer"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DEVELOPMENT_TEAM = U4TBVKNQ7F; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INFOPLIST_FILE = test/TestDriver/macOS/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.TestDriver; + PRODUCT_NAME = TestDriver; + SDKROOT = macosx; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + 40E2FA865F874B532C93A191 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INFOPLIST_FILE = test/TestCommon/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.TestCommon; + PRODUCT_NAME = TestCommon; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 4166418E35F78375FB007774 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceStream; + PRODUCT_NAME = IceStream; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + VALIDATE_PRODUCT = YES; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 417F13F385A740AC03C35B21 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceInheritance; + PRODUCT_NAME = IceInheritance; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 43085819CFCEF2FE96E49A4E /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceUdp; + PRODUCT_NAME = IceUdp; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 44000FA6A5F8B380881323C2 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceOptionalAMD; + PRODUCT_NAME = IceOptionalAMD; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 4413F523F228DA4EAD250759 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceInfo; + PRODUCT_NAME = IceInfo; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 44954010869635A7FE1C0D3E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceDefaultValue; + PRODUCT_NAME = IceDefaultValue; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + VALIDATE_PRODUCT = YES; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 453E9082AA2E8E657F3EEE67 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceOperationsAMD; + PRODUCT_NAME = IceOperationsAMD; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + VALIDATE_PRODUCT = YES; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 48A83436F7399BA020080794 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceProxyAMD; + PRODUCT_NAME = IceProxyAMD; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 4C079C3E5E7C87487CA00214 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceProxy; + PRODUCT_NAME = IceProxy; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 4CDF7647D539478F1C6F2DAA /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceAdmin; + PRODUCT_NAME = IceAdmin; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + VALIDATE_PRODUCT = YES; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 532F0A725C50A19B7F26FB0E /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceAdapterDeactivation; + PRODUCT_NAME = IceAdapterDeactivation; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 53A22E7F87D7EF9775CAE500 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceSSLConfiguration; + PRODUCT_NAME = IceSSLConfiguration; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 54552BAED6FF48FF439CEC01 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceHold; + PRODUCT_NAME = IceHold; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 55255D415B48D6EDA893F9C8 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceAdmin; + PRODUCT_NAME = IceAdmin; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 56A60B25BE7E0123A0B5A6E0 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CLANG_ENABLE_OBJC_ARC = NO; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_TESTABILITY = NO; + EXECUTABLE_PREFIX = lib; + GCC_PREPROCESSOR_DEFINITIONS = ( + ICE_CPP11_MAPPING, + ICE_BUILDING_SRC, + ICE_STATIC_LIBS, + ICE_SWIFT, + NDEBUG, + ); + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/../cpp/include/", + "$(SYMROOT)/$(PLATFORM_NAME)/include/", + "$(SRCROOT)/../cpp/src/", + ); + PRODUCT_BUNDLE_IDENTIFIER = "com.zeroc.IceSSL++11macOS"; + PRODUCT_NAME = "IceSSL++11macOS"; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + }; + name = Release; + }; + 57B8D73AFDA089B8E54A0BCF /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceUdp; + PRODUCT_NAME = IceUdp; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + VALIDATE_PRODUCT = YES; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 594E62C99F79B4F06A194DD5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceExceptionsAMD; + PRODUCT_NAME = IceExceptionsAMD; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 5A27953EF212DD6C9D6C7A41 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceRetry; + PRODUCT_NAME = IceRetry; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 5CF701D0A028437246225B29 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CLANG_ENABLE_OBJC_ARC = NO; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_TESTABILITY = NO; + GCC_PREPROCESSOR_DEFINITIONS = ( + ICE_CPP11_MAPPING, + ICE_BUILDING_SRC, + ICE_STATIC_LIBS, + ICE_SWIFT, + NDEBUG, + ); + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/../cpp/include/", + "$(SYMROOT)/$(PLATFORM_NAME)/include/", + "$(SRCROOT)/../cpp/src/", + ); + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_BUNDLE_IDENTIFIER = "com.zeroc.IceSSL++11iOS"; + PRODUCT_NAME = "IceSSL++11iOS"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 5D60400B695A10C203E69BA6 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CLANG_ENABLE_OBJC_ARC = NO; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_TESTABILITY = NO; + EXECUTABLE_PREFIX = lib; + GCC_PREPROCESSOR_DEFINITIONS = ( + ICE_CPP11_MAPPING, + ICE_BUILDING_SRC, + ICE_STATIC_LIBS, + ICE_SWIFT, + NDEBUG, + ); + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/../cpp/include/", + "$(SYMROOT)/$(PLATFORM_NAME)/include/", + "$(SRCROOT)/../cpp/src/", + ); + PRODUCT_BUNDLE_IDENTIFIER = "com.zeroc.IceDiscovery++11macOS"; + PRODUCT_NAME = "IceDiscovery++11macOS"; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + }; + name = Release; + }; + 5F4D021A49CCD6BECB74E85D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceOperations; + PRODUCT_NAME = IceOperations; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 6048377F4AAEBEEC611A61DE /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceHold; + PRODUCT_NAME = IceHold; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + VALIDATE_PRODUCT = YES; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 605094A29E2E3912226467F9 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + FRAMEWORK_VERSION = A; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INFOPLIST_FILE = src/Glacier2/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.Glacier2; + PRODUCT_NAME = Glacier2; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 6223D8EFAA26802ED0C3EDAC /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceExceptions; + PRODUCT_NAME = IceExceptions; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 62B0DA5639049104A98EC911 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + FRAMEWORK_VERSION = A; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INFOPLIST_FILE = src/IceStorm/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceStorm; + PRODUCT_NAME = IceStorm; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 6324AEBF336EDD9F8724714E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceFacets; + PRODUCT_NAME = IceFacets; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + VALIDATE_PRODUCT = YES; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 6334B88187217B5279CB58CD /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INFOPLIST_FILE = src/IceGrid/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceGrid; + PRODUCT_NAME = IceGrid; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 63EE1C8C3E58D430A04FE206 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceOptionalAMD; + PRODUCT_NAME = IceOptionalAMD; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + VALIDATE_PRODUCT = YES; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 6419658FA5E926935933D1E5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceOperationsAMD; + PRODUCT_NAME = IceOperationsAMD; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 676CD25FFE061AF2BB76F484 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INFOPLIST_FILE = src/Glacier2/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.Glacier2; + PRODUCT_NAME = Glacier2; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 67FDA85C2E7AD6ABA2C56DBC /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceLocation; + PRODUCT_NAME = IceLocation; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + VALIDATE_PRODUCT = YES; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 680977477980EB4CFB2656B4 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceScope; + PRODUCT_NAME = IceScope; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + VALIDATE_PRODUCT = YES; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 6823879AE29EBA9A5FDD4C5D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + FRAMEWORK_VERSION = A; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INFOPLIST_FILE = src/IceGrid/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceGrid; + PRODUCT_NAME = IceGrid; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 68CBED89CDCEF7E1429D825B /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceDefaultValue; + PRODUCT_NAME = IceDefaultValue; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 6ABB40BB5D0E7163716F9F6A /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INFOPLIST_FILE = src/IceStorm/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceStorm; + PRODUCT_NAME = IceStorm; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 6D18F42FD6E8A1CC6C8111F7 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CLANG_ENABLE_OBJC_ARC = NO; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_TESTABILITY = NO; + GCC_PREPROCESSOR_DEFINITIONS = ( + ICE_CPP11_MAPPING, + ICE_BUILDING_SRC, + ICE_STATIC_LIBS, + ICE_SWIFT, + NDEBUG, + ); + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/../cpp/include/", + "$(SYMROOT)/$(PLATFORM_NAME)/include/", + "$(SRCROOT)/../cpp/src/", + ); + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_BUNDLE_IDENTIFIER = "com.zeroc.IceDiscovery++11iOS"; + PRODUCT_NAME = "IceDiscovery++11iOS"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 6DA26DFF6AE37EB0687EF2E6 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceProperties; + PRODUCT_NAME = IceProperties; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + VALIDATE_PRODUCT = YES; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 6E278EC0D544190A08355495 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceInvoke; + PRODUCT_NAME = IceInvoke; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + VALIDATE_PRODUCT = YES; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 6E2984D32E39D2A49B18F4AF /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceProperties; + PRODUCT_NAME = IceProperties; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 737B33589779E42C075D3B99 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CLANG_ENABLE_OBJC_ARC = NO; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_TESTABILITY = NO; + GCC_PREPROCESSOR_DEFINITIONS = ( + ICE_CPP11_MAPPING, + ICE_BUILDING_SRC, + ICE_STATIC_LIBS, + ICE_SWIFT, + ); + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/../cpp/include/", + "$(SYMROOT)/$(PLATFORM_NAME)/include/", + "$(SRCROOT)/../cpp/src/", + ); + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_BUNDLE_IDENTIFIER = "com.zeroc.IceDiscovery++11iOS"; + PRODUCT_NAME = "IceDiscovery++11iOS"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 74C98DAB0EC07BBA30AE7159 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceHold; + PRODUCT_NAME = IceHold; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 754FD629FCB6A07BDC22C1CA /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceAcm; + PRODUCT_NAME = IceAcm; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 756EC23F74A3E395F0E97363 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceLocation; + PRODUCT_NAME = IceLocation; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 7582B86110812E0DE9014D31 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceOptional; + PRODUCT_NAME = IceOptional; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 75C67331534281F0AD733E7B /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceInvoke; + PRODUCT_NAME = IceInvoke; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 7713BDD2B929CF2F8D4FE8BA /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceProperties; + PRODUCT_NAME = IceProperties; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 781491E130271AB0DA364178 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceEnums; + PRODUCT_NAME = IceEnums; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 781FC7DBEAD45481C267F94E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceOptional; + PRODUCT_NAME = IceOptional; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 78B0F589EE15CF8C031092AC /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceSlicingExceptions; + PRODUCT_NAME = IceSlicingExceptions; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 79FF55C13DFB2579A6F92C3E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceAmi; + PRODUCT_NAME = IceAmi; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + VALIDATE_PRODUCT = YES; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 7AFF78D5B05CBB7C2F04C50B /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceBinding; + PRODUCT_NAME = IceBinding; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 7C35779E9B3F4AE74D882031 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceTimeout; + PRODUCT_NAME = IceTimeout; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 7E0723AFA238A1662BCD171C /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceSlicingObjects; + PRODUCT_NAME = IceSlicingObjects; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + VALIDATE_PRODUCT = YES; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 7FDA1B8E2868FA881504292E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceExceptionsAMD; + PRODUCT_NAME = IceExceptionsAMD; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 80413F529BF17F98C3324490 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceExceptionsAMD; + PRODUCT_NAME = IceExceptionsAMD; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + VALIDATE_PRODUCT = YES; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 809FDAE5DDA4ED30077C2E04 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceSSLConfiguration; + PRODUCT_NAME = IceSSLConfiguration; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 80FA30B7280D3D4B480D502E /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceSlicingExceptionsAMD; + PRODUCT_NAME = IceSlicingExceptionsAMD; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 82F20A84B20BE6003F12F1DF /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceAdmin; + PRODUCT_NAME = IceAdmin; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 8329AE7B96B5B2D3422B53B9 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceTimeout; + PRODUCT_NAME = IceTimeout; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 854BE60C5641575053D788B1 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceSlicingObjectsAMD; + PRODUCT_NAME = IceSlicingObjectsAMD; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 85A6D95F76DA3E7BB0D62F68 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CLANG_ENABLE_OBJC_ARC = NO; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_TESTABILITY = NO; + GCC_PREPROCESSOR_DEFINITIONS = ( + ICE_CPP11_MAPPING, + ICE_BUILDING_SRC, + ICE_STATIC_LIBS, + ICE_SWIFT, + ); + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/../cpp/include/", + "$(SYMROOT)/$(PLATFORM_NAME)/include/", + "$(SRCROOT)/../cpp/src/", + ); + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_BUNDLE_IDENTIFIER = "com.zeroc.IceIAP++11iOS"; + PRODUCT_NAME = "IceIAP++11iOS"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 86C8C71441B9970C24268399 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceObjects; + PRODUCT_NAME = IceObjects; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 8B87552610F4F5108589D19C /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + 8C3AC9491ADAEA2FDC828CBC /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CLANG_ENABLE_OBJC_ARC = NO; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_TESTABILITY = NO; + GCC_PREPROCESSOR_DEFINITIONS = ( + ICE_CPP11_MAPPING, + ICE_BUILDING_SRC, + ICE_STATIC_LIBS, + ICE_SWIFT, + NDEBUG, + ); + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/../cpp/include/", + "$(SYMROOT)/$(PLATFORM_NAME)/include/", + "$(SRCROOT)/../cpp/src/", + ); + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_BUNDLE_IDENTIFIER = "com.zeroc.IceIAP++11iOS"; + PRODUCT_NAME = "IceIAP++11iOS"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 8CB62172C3BB85B0D29BD05E /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceTimeout; + PRODUCT_NAME = IceTimeout; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 8E29B81D82064D2021C6F6D7 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "Mac Developer"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DEVELOPMENT_TEAM = U4TBVKNQ7F; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INFOPLIST_FILE = test/TestDriver/macOS/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.TestDriver; + PRODUCT_NAME = TestDriver; + SDKROOT = macosx; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + 916DE1C1EAEDEFA42D99833F /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceObjects; + PRODUCT_NAME = IceObjects; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 9315B0204C9ACA4956FB6BEE /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceAcm; + PRODUCT_NAME = IceAcm; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 93FA16C7E406FDAE4F80F312 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceDefaultServant; + PRODUCT_NAME = IceDefaultServant; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 955E5B609EB2866F18EA3464 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceSlicingObjectsAMD; + PRODUCT_NAME = IceSlicingObjectsAMD; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + A209834E9F2AB8CF83B24751 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceOperationsAMD; + PRODUCT_NAME = IceOperationsAMD; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + A22AD1B1C96381F816D06299 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceStream; + PRODUCT_NAME = IceStream; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + A4EB5A0A5B35F55869ABE32F /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceOperations; + PRODUCT_NAME = IceOperations; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + A64D3A6B81B976CA58E9AC8C /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceAdapterDeactivation; + PRODUCT_NAME = IceAdapterDeactivation; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + A6D4B0BB7F743D2B7253CCC4 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceServantLocatorAMD; + PRODUCT_NAME = IceServantLocatorAMD; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + B0D254B436A01958ECA40C60 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + FRAMEWORK_VERSION = A; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INFOPLIST_FILE = test/TestCommon/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.TestCommon; + PRODUCT_NAME = TestCommon; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + B0E07110D2646DA9E243178B /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DEVELOPMENT_TEAM = U4TBVKNQ7F; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INFOPLIST_FILE = test/TestDriver/iOS/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.TestDriver; + PRODUCT_NAME = TestDriver; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + B228183E106A05099A29BF25 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceExceptions; + PRODUCT_NAME = IceExceptions; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + B4257BF9DFD9AF98B5832D63 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceInheritance; + PRODUCT_NAME = IceInheritance; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + B4C316DDBDCA93A399EDC4E1 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceEnums; + PRODUCT_NAME = IceEnums; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + VALIDATE_PRODUCT = YES; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + B4D077E8898EDC5705543A80 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceOptional; + PRODUCT_NAME = IceOptional; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + VALIDATE_PRODUCT = YES; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + B5BB2D983AE8AD5AA2870F4A /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceSlicingExceptions; + PRODUCT_NAME = IceSlicingExceptions; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + B75C562A166ED291D4DA9718 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceScope; + PRODUCT_NAME = IceScope; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + B78D4BA1381A022F1934B7EB /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INFOPLIST_FILE = test/TestCommon/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.TestCommon; + PRODUCT_NAME = TestCommon; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + BD4E7DF8FFDB57EF2DC83374 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceLocation; + PRODUCT_NAME = IceLocation; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + BE89738AD907A39C4E07DE9B /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.SliceEscape; + PRODUCT_NAME = SliceEscape; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + C3EF292353C1C5BFFF6DD819 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceProxyAMD; + PRODUCT_NAME = IceProxyAMD; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + C4DB4CA543A68F1E75747209 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CLANG_ENABLE_OBJC_ARC = NO; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_TESTABILITY = NO; + GCC_PREPROCESSOR_DEFINITIONS = ( + ICE_CPP11_MAPPING, + ICE_BUILDING_SRC, + ICE_STATIC_LIBS, + ICE_SWIFT, + ); + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/../cpp/include/", + "$(SYMROOT)/$(PLATFORM_NAME)/include/", + "$(SRCROOT)/../cpp/src/", + ); + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_BUNDLE_IDENTIFIER = "com.zeroc.Ice++11iOS"; + PRODUCT_NAME = "Ice++11iOS"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + C6A35B1A35E8280BA9E7F0CB /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceSlicingObjects; + PRODUCT_NAME = IceSlicingObjects; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + C7C9FBE1C018742A247577C7 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceObjects; + PRODUCT_NAME = IceObjects; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + C985543C5652992F1D999A9F /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceInvoke; + PRODUCT_NAME = IceInvoke; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + C99C90EDDC169E4F89AB6D4D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + FRAMEWORK_VERSION = A; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INFOPLIST_FILE = src/IceGrid/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceGrid; + PRODUCT_NAME = IceGrid; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + CC80C901D724F3ECE379682F /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceServantLocatorAMD; + PRODUCT_NAME = IceServantLocatorAMD; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + VALIDATE_PRODUCT = YES; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + CC910B8810B0DDF55F939323 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceInfo; + PRODUCT_NAME = IceInfo; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + VALIDATE_PRODUCT = YES; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + CF2104D217AAA27C466A0737 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceBinding; + PRODUCT_NAME = IceBinding; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + CF4227A3F24DB5949B024057 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CLANG_ENABLE_OBJC_ARC = NO; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_TESTABILITY = NO; + EXECUTABLE_PREFIX = lib; + GCC_PREPROCESSOR_DEFINITIONS = ( + ICE_CPP11_MAPPING, + ICE_BUILDING_SRC, + ICE_STATIC_LIBS, + ICE_SWIFT, + ); + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/../cpp/include/", + "$(SYMROOT)/$(PLATFORM_NAME)/include/", + "$(SRCROOT)/../cpp/src/", + ); + PRODUCT_BUNDLE_IDENTIFIER = "com.zeroc.IceSSL++11macOS"; + PRODUCT_NAME = "IceSSL++11macOS"; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + }; + name = Debug; + }; + D065A87D40DE8AAD5AF91B11 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CLANG_ENABLE_OBJC_ARC = NO; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_TESTABILITY = NO; + EXECUTABLE_PREFIX = lib; + GCC_PREPROCESSOR_DEFINITIONS = ( + ICE_CPP11_MAPPING, + ICE_BUILDING_SRC, + ICE_STATIC_LIBS, + ICE_SWIFT, + ); + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/../cpp/include/", + "$(SYMROOT)/$(PLATFORM_NAME)/include/", + "$(SRCROOT)/../cpp/src/", + ); + PRODUCT_BUNDLE_IDENTIFIER = "com.zeroc.Ice++11macOS"; + PRODUCT_NAME = "Ice++11macOS"; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + }; + name = Debug; + }; + D0FE30322597F8817F104F99 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DEVELOPMENT_TEAM = U4TBVKNQ7F; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INFOPLIST_FILE = test/TestDriver/iOS/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.TestDriver; + PRODUCT_NAME = TestDriver; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + D125834B82857E54791380D6 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceAmi; + PRODUCT_NAME = IceAmi; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + D18CE8B582AF7C25E49C77D3 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceServantLocator; + PRODUCT_NAME = IceServantLocator; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + D2280E0328AF870362105087 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CLANG_ENABLE_OBJC_ARC = NO; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_TESTABILITY = NO; + GCC_PREPROCESSOR_DEFINITIONS = ( + ICE_CPP11_MAPPING, + ICE_BUILDING_SRC, + ICE_STATIC_LIBS, + ICE_SWIFT, + NDEBUG, + ); + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/../cpp/include/", + "$(SYMROOT)/$(PLATFORM_NAME)/include/", + "$(SRCROOT)/../cpp/src/", + ); + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_BUNDLE_IDENTIFIER = "com.zeroc.IceLocatorDiscovery++11iOS"; + PRODUCT_NAME = "IceLocatorDiscovery++11iOS"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + D333019EFCFA0A74182B15AD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceExceptionsAMD; + PRODUCT_NAME = IceExceptionsAMD; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + D33577F545253B3F1DC2E387 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + D46ECBF08E6BCB8609A94CCF /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceScope; + PRODUCT_NAME = IceScope; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + D48AFC47CC38D3C6F75E0F71 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceProxyAMD; + PRODUCT_NAME = IceProxyAMD; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + VALIDATE_PRODUCT = YES; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + D4EBEC1F379980F6B29E5474 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceHold; + PRODUCT_NAME = IceHold; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + D549E5E4D50D6985BFD7EB78 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CLANG_ENABLE_OBJC_ARC = NO; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_TESTABILITY = NO; + EXECUTABLE_PREFIX = lib; + GCC_PREPROCESSOR_DEFINITIONS = ( + ICE_CPP11_MAPPING, + ICE_BUILDING_SRC, + ICE_STATIC_LIBS, + ICE_SWIFT, + NDEBUG, + ); + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/../cpp/include/", + "$(SYMROOT)/$(PLATFORM_NAME)/include/", + "$(SRCROOT)/../cpp/src/", + ); + PRODUCT_BUNDLE_IDENTIFIER = "com.zeroc.IceLocatorDiscovery++11macOS"; + PRODUCT_NAME = "IceLocatorDiscovery++11macOS"; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + }; + name = Release; + }; + D6E74A730DF699117857DD01 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceProxy; + PRODUCT_NAME = IceProxy; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + VALIDATE_PRODUCT = YES; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + D9D6DF52B076F4707E8928BC /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceProxy; + PRODUCT_NAME = IceProxy; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + D9E1392CE78C6C71B6E44AF1 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceInheritance; + PRODUCT_NAME = IceInheritance; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + E1731F3F8A87441AE16A4997 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceFacets; + PRODUCT_NAME = IceFacets; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + E41BFCF63BBAEF6611A756E4 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceSlicingExceptionsAMD; + PRODUCT_NAME = IceSlicingExceptionsAMD; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + E5E7677B4F20184B662D15EF /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceRetry; + PRODUCT_NAME = IceRetry; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + VALIDATE_PRODUCT = YES; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + E719D5DDB45215121F69E71C /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceSSLConfiguration; + PRODUCT_NAME = IceSSLConfiguration; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + VALIDATE_PRODUCT = YES; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + E7646DF0A421AED8CEACA406 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + FRAMEWORK_VERSION = A; + GCC_PREPROCESSOR_DEFINITIONS = ( + ICE_CPP11_MAPPING, + ICE_STATIC_LIBS, + ICE_SWIFT, + NDEBUG, + ); + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/../cpp/include/", + "$(SYMROOT)/$(PLATFORM_NAME)/include/", + "$(SRCROOT)/../cpp/src/", + ); + INFOPLIST_FILE = src/Ice/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; + OTHER_LDFLAGS = ( + "-lbz2", + "-liconv", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.Ice; + PRODUCT_NAME = Ice; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_INCLUDE_PATHS = "$(SRCROOT)/src/IceObjc"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + E7F1FCE5B5FA753DC5A90B46 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceDefaultValue; + PRODUCT_NAME = IceDefaultValue; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + E8CAB76745673555C4AE8FAF /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceBinding; + PRODUCT_NAME = IceBinding; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + EA03FE3B67CAB8714951EB48 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_PREPROCESSOR_DEFINITIONS = ( + ICE_CPP11_MAPPING, + ICE_STATIC_LIBS, + ICE_SWIFT, + NDEBUG, + ); + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/../cpp/include/", + "$(SYMROOT)/$(PLATFORM_NAME)/include/", + "$(SRCROOT)/../cpp/src/", + ); + INFOPLIST_FILE = src/Ice/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + OTHER_LDFLAGS = ( + "-lbz2", + "-liconv", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.Ice; + PRODUCT_NAME = Ice; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_INCLUDE_PATHS = "$(SRCROOT)/src/IceObjc"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + EAC5A981AF95D7C26DFE5679 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INFOPLIST_FILE = src/Glacier2/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.Glacier2; + PRODUCT_NAME = Glacier2; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + ED35390957FB91C53F4B8007 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INFOPLIST_FILE = src/IceGrid/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceGrid; + PRODUCT_NAME = IceGrid; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + EDC1E960EBFCB5D983C75F95 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceBinding; + PRODUCT_NAME = IceBinding; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + VALIDATE_PRODUCT = YES; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + EE2DE3E71A20D595A693FEB6 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceServantLocator; + PRODUCT_NAME = IceServantLocator; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + EE83BCB8E07597120EC8CE99 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceEnums; + PRODUCT_NAME = IceEnums; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + EFC5561BA4E879D0CF1F87AA /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + FRAMEWORK_VERSION = A; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INFOPLIST_FILE = test/TestCommon/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.TestCommon; + PRODUCT_NAME = TestCommon; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + F0F1111660A0B9B7636645DF /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceObjects; + PRODUCT_NAME = IceObjects; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + VALIDATE_PRODUCT = YES; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + F183C0F88A89CDC3EB354B54 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceAmi; + PRODUCT_NAME = IceAmi; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + F3E495D849583BF5DCF030E3 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceFacets; + PRODUCT_NAME = IceFacets; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + F4951EA5CF1D4083C141E7FD /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INFOPLIST_FILE = src/IceStorm/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceStorm; + PRODUCT_NAME = IceStorm; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + F528C35C4DBA049D72E103F4 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceTimeout; + PRODUCT_NAME = IceTimeout; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + VALIDATE_PRODUCT = YES; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + F58BD9E83B601F494DC06632 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceSlicingObjects; + PRODUCT_NAME = IceSlicingObjects; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + F6B54F96CD5FC23E472F1588 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceOperations; + PRODUCT_NAME = IceOperations; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + F7EA382F37D7192D1438EC10 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_PREPROCESSOR_DEFINITIONS = ( + ICE_CPP11_MAPPING, + ICE_STATIC_LIBS, + ICE_SWIFT, + ); + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/../cpp/include/", + "$(SYMROOT)/$(PLATFORM_NAME)/include/", + "$(SRCROOT)/../cpp/src/", + ); + INFOPLIST_FILE = src/Ice/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + OTHER_LDFLAGS = ( + "-lbz2", + "-liconv", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.Ice; + PRODUCT_NAME = Ice; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_INCLUDE_PATHS = "$(SRCROOT)/src/IceObjc"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + F91414366AA7B3FD203134C1 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = "iphoneos iphonesimulator"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/iOS"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceOperationsAMD; + PRODUCT_NAME = IceOperationsAMD; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + F93427946E857589D6CB2508 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceEnums; + PRODUCT_NAME = IceEnums; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + F9BCB6EE20A714FB2085632A /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceInfo; + PRODUCT_NAME = IceInfo; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + FAED574ED13D34CEBD7C7E27 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceOptionalAMD; + PRODUCT_NAME = IceOptionalAMD; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + FB3F167C06237ABB5388D0FE /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceAmi; + PRODUCT_NAME = IceAmi; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + FB57177D3EED07CFA328B0BA /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceServantLocatorAMD; + PRODUCT_NAME = IceServantLocatorAMD; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + FEBB97DED18179ADB65FFAA9 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + AVAILABLE_PLATFORMS = macosx; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 3.7.61; + DYLIB_COMPATIBILITY_VERSION = 0; + DYLIB_CURRENT_VERSION = 3.7.61; + ENABLE_BITCODE = NO; + ENABLE_TESTABILITY = NO; + FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../Carthage/Build/Mac"; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = com.zeroc.IceScope; + PRODUCT_NAME = IceScope; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 0031764EBBF7CE1FFBDE16EC /* Build configuration list for PBXNativeTarget "IceBinding iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + CF2104D217AAA27C466A0737 /* Debug */, + EDC1E960EBFCB5D983C75F95 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 00DC0F2F1C01369A0700878F /* Build configuration list for PBXNativeTarget "IceObjects iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 916DE1C1EAEDEFA42D99833F /* Debug */, + F0F1111660A0B9B7636645DF /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 01BBC75D8E6D10ADD917EB13 /* Build configuration list for PBXNativeTarget "IceOperationsAMD macOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 6419658FA5E926935933D1E5 /* Debug */, + A209834E9F2AB8CF83B24751 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 0693E9E0FE42C294CBEFE01B /* Build configuration list for PBXNativeTarget "IceDefaultValue macOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 68CBED89CDCEF7E1429D825B /* Debug */, + 13346E14632950A3B8949DC3 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 0A35534575968831B5DC9C4A /* Build configuration list for PBXNativeTarget "IceSlicingExceptions macOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + B5BB2D983AE8AD5AA2870F4A /* Debug */, + 1F5A241EFB47FAC0958EF4F8 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 0A7E46E85E8652C51334F7DF /* Build configuration list for PBXNativeTarget "IceLocatorDiscovery C++11 iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 2C1041F8E9125EC4234842C4 /* Debug */, + D2280E0328AF870362105087 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 0D2C3C71D73A8722B5BFF7B7 /* Build configuration list for PBXNativeTarget "IceOptionalAMD macOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 44000FA6A5F8B380881323C2 /* Debug */, + FAED574ED13D34CEBD7C7E27 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 1164AD79AC5AF6C23013097F /* Build configuration list for PBXNativeTarget "IceExceptionsAMD iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 594E62C99F79B4F06A194DD5 /* Debug */, + 80413F529BF17F98C3324490 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 13B341B13B01A154F8A441B5 /* Build configuration list for PBXNativeTarget "IceUdp iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 43085819CFCEF2FE96E49A4E /* Debug */, + 57B8D73AFDA089B8E54A0BCF /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 1744CEC058540FCD249D8FCD /* Build configuration list for PBXNativeTarget "Glacier2 macOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 0A87CCB71A043995717DE9D3 /* Debug */, + 605094A29E2E3912226467F9 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 1902E3C0C795602452807E2A /* Build configuration list for PBXNativeTarget "IceStream macOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + A22AD1B1C96381F816D06299 /* Debug */, + 22CF16E122A8ABB7FD328F48 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 20093856CDED46E3D3279709 /* Build configuration list for PBXNativeTarget "IceProxy macOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 4C079C3E5E7C87487CA00214 /* Debug */, + 019A9D4B9AABA5AA28CB6C6C /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 21863BDC60220870377B3A3C /* Build configuration list for PBXNativeTarget "IceEnums iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + EE83BCB8E07597120EC8CE99 /* Debug */, + B4C316DDBDCA93A399EDC4E1 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 2245C6E0D019A6DFAEB599D9 /* Build configuration list for PBXNativeTarget "IceScope macOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + FEBB97DED18179ADB65FFAA9 /* Debug */, + D46ECBF08E6BCB8609A94CCF /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 2290535536799C36A40A47B9 /* Build configuration list for PBXNativeTarget "IceInvoke iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 30D909094BC86E43535959E9 /* Debug */, + 6E278EC0D544190A08355495 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 23300D6AF9AF253A57D38604 /* Build configuration list for PBXNativeTarget "IceAcm iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 9315B0204C9ACA4956FB6BEE /* Debug */, + 2E1C490C041034EE73CCE418 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 257B47045BEB3B6FD57D9EB8 /* Build configuration list for PBXNativeTarget "Glacier2 iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 676CD25FFE061AF2BB76F484 /* Debug */, + EAC5A981AF95D7C26DFE5679 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 27AFFE32271EEDE0494F554B /* Build configuration list for PBXNativeTarget "IceServantLocatorAMD macOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + A6D4B0BB7F743D2B7253CCC4 /* Debug */, + FB57177D3EED07CFA328B0BA /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 2AA6AFE1C9EADF4ABBF5EF3F /* Build configuration list for PBXNativeTarget "IceServantLocatorAMD iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 404690898FBB1E6C11E85931 /* Debug */, + CC80C901D724F3ECE379682F /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 2F01804087A43E459A89278F /* Build configuration list for PBXNativeTarget "IceDefaultValue iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E7F1FCE5B5FA753DC5A90B46 /* Debug */, + 44954010869635A7FE1C0D3E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 31D198E4AA6840D31D409535 /* Build configuration list for PBXNativeTarget "IceAdmin iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 55255D415B48D6EDA893F9C8 /* Debug */, + 4CDF7647D539478F1C6F2DAA /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 340F8FD9EC1E08196120BF04 /* Build configuration list for PBXNativeTarget "IceLocation macOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 3A3170F191456707A18DF3AF /* Debug */, + BD4E7DF8FFDB57EF2DC83374 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 3650B23EAEA1C33FC3AE115D /* Build configuration list for PBXNativeTarget "IceAdapterDeactivation iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 090419CA29BEA80478776962 /* Debug */, + 0BB8F9D7443CE2ABFD8FC0AE /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 38C86AB3D650FA81C19A683D /* Build configuration list for PBXNativeTarget "IceOperations iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F6B54F96CD5FC23E472F1588 /* Debug */, + 2D1FFF8AA39191172D00CE1C /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 3AECE63190ABF9D5058AC87F /* Build configuration list for PBXNativeTarget "IceSSLConfiguration macOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 14B122D6192F72D9C105A1B3 /* Debug */, + 53A22E7F87D7EF9775CAE500 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 3C22B7552D06A6F0A62C70A5 /* Build configuration list for PBXNativeTarget "IceExceptions iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 6223D8EFAA26802ED0C3EDAC /* Debug */, + 2B826C4DCECC6B6475335411 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 3C7450D4B28EECD28449C203 /* Build configuration list for PBXNativeTarget "IceSSL C++11 iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 28D599E5FEE7B24CA2341443 /* Debug */, + 5CF701D0A028437246225B29 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 3FA6999F2D7D2B3ED250817A /* Build configuration list for PBXNativeTarget "Ice C++11 macOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D065A87D40DE8AAD5AF91B11 /* Debug */, + 19FEB06FF2D5542FF2B090FA /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 4248D932A2666D00955AE051 /* Build configuration list for PBXNativeTarget "Ice C++11 iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + C4DB4CA543A68F1E75747209 /* Debug */, + 1D2A32E0BF86006A3D910C2D /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 443E335707A4496739E5E077 /* Build configuration list for PBXNativeTarget "IceLocation iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 756EC23F74A3E395F0E97363 /* Debug */, + 67FDA85C2E7AD6ABA2C56DBC /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 452C448A43B8DD5D2675D8D1 /* Build configuration list for PBXNativeTarget "IceExceptions macOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + B228183E106A05099A29BF25 /* Debug */, + 22ED2260CA86E8E8B37DA5F0 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 4BFEAF85376AD19BB26E9E7C /* Build configuration list for PBXNativeTarget "IceInheritance iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D9E1392CE78C6C71B6E44AF1 /* Debug */, + 08CA6090407E8E61B2E186F1 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 4C0AE10F999D3D11B2B8B434 /* Build configuration list for PBXNativeTarget "IceAmi iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F183C0F88A89CDC3EB354B54 /* Debug */, + 79FF55C13DFB2579A6F92C3E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 4CD9D3E2F5C588C7398821CB /* Build configuration list for PBXNativeTarget "TestDriver iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + B0E07110D2646DA9E243178B /* Debug */, + D0FE30322597F8817F104F99 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 57011A5AD797AE8F0D2F494F /* Build configuration list for PBXNativeTarget "IceRetry macOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 2638193B9692E3873EA98824 /* Debug */, + 260491A4333F10C058CAE445 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 5A6610EFB9852E2F1D0BBB18 /* Build configuration list for PBXNativeTarget "IceServantLocator macOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 28C5B1DD28FCA547D6E9BC56 /* Debug */, + EE2DE3E71A20D595A693FEB6 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 5C12FC669DDDB4391728718D /* Build configuration list for PBXNativeTarget "IceDefaultServant macOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 25872E295CBF1AB3C79AA912 /* Debug */, + 026A2B7743A59760039C4049 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 639074C5C3FE4260E7C85186 /* Build configuration list for PBXNativeTarget "IceDiscovery C++11 iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 737B33589779E42C075D3B99 /* Debug */, + 6D18F42FD6E8A1CC6C8111F7 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 65154986761E183CB7516105 /* Build configuration list for PBXNativeTarget "IceScope iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + B75C562A166ED291D4DA9718 /* Debug */, + 680977477980EB4CFB2656B4 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 6914F5B7548A10A44517A732 /* Build configuration list for PBXNativeTarget "SliceEscape macOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 36DC554E670075E5B9B24BA5 /* Debug */, + BE89738AD907A39C4E07DE9B /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 6E1F6A917F16223B41B06A4F /* Build configuration list for PBXNativeTarget "IceHold macOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D4EBEC1F379980F6B29E5474 /* Debug */, + 54552BAED6FF48FF439CEC01 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 7445DA2654536D777C8B6BE7 /* Build configuration list for PBXNativeTarget "IceIAP C++11 iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 85A6D95F76DA3E7BB0D62F68 /* Debug */, + 8C3AC9491ADAEA2FDC828CBC /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 78A589553E4A07C76E547C22 /* Build configuration list for PBXNativeTarget "IceDefaultServant iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 93FA16C7E406FDAE4F80F312 /* Debug */, + 3F13FC3C8696EE5A82BDCE76 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 81523C7B5B4E6D3E111EDB83 /* Build configuration list for PBXNativeTarget "IceExceptionsAMD macOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D333019EFCFA0A74182B15AD /* Debug */, + 7FDA1B8E2868FA881504292E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 834FA034D3B571904F61E5A8 /* Build configuration list for PBXNativeTarget "IceProperties macOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 7713BDD2B929CF2F8D4FE8BA /* Debug */, + 22E89DFF233845AEE394C2AC /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 860BA81779B1057C6BDFADEA /* Build configuration list for PBXNativeTarget "TestDriver macOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 4075CE8B4BAB4FE4DF05B8FB /* Debug */, + 8E29B81D82064D2021C6F6D7 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 89F3E2582DFEC159C0FB1552 /* Build configuration list for PBXNativeTarget "IceProxyAMD macOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 2405A3303748456E8C495EC2 /* Debug */, + C3EF292353C1C5BFFF6DD819 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 8C5C720FCAA90DF2558F5059 /* Build configuration list for PBXNativeTarget "TestCommon iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + B78D4BA1381A022F1934B7EB /* Debug */, + 40E2FA865F874B532C93A191 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 920D5F59AA4E05CF5D025989 /* Build configuration list for PBXNativeTarget "IceHold iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 74C98DAB0EC07BBA30AE7159 /* Debug */, + 6048377F4AAEBEEC611A61DE /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 943B554E2B959841FB3D455A /* Build configuration list for PBXNativeTarget "IceTimeout macOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 8CB62172C3BB85B0D29BD05E /* Debug */, + 8329AE7B96B5B2D3422B53B9 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 955B7D4F967C455351A50E9A /* Build configuration list for PBXNativeTarget "IceGrid iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + ED35390957FB91C53F4B8007 /* Debug */, + 6334B88187217B5279CB58CD /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 995EF548110BEC5F2E0E4B6E /* Build configuration list for PBXNativeTarget "IceDiscovery C++11 macOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 12C4EE286AEA54CB45BB6DB5 /* Debug */, + 5D60400B695A10C203E69BA6 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 9A20D8F0C00474570C24F3DC /* Build configuration list for PBXNativeTarget "IceSlicingExceptionsAMD iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 80FA30B7280D3D4B480D502E /* Debug */, + 275F4EDA14BBC35F9C7A44A5 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 9A293F1E291DE1CC30AEEF92 /* Build configuration list for PBXNativeTarget "IceInfo macOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 373BA8087EDF6EDA786ACAC6 /* Debug */, + F9BCB6EE20A714FB2085632A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 9C384A3E25BD251E40D57D8A /* Build configuration list for PBXNativeTarget "IceOptional iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 7582B86110812E0DE9014D31 /* Debug */, + B4D077E8898EDC5705543A80 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 9DC3AAFB8F39444B56D445BF /* Build configuration list for PBXNativeTarget "IceUdp macOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 208B50F49F4DA27467F3F7F2 /* Debug */, + 01788FAB35EC0ECFB195AD62 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + A01D96E441A19D6A1F176F79 /* Build configuration list for PBXNativeTarget "IceOptionalAMD iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 03FAB110900E394ED229022E /* Debug */, + 63EE1C8C3E58D430A04FE206 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + A14C8213AA7934AD704E051A /* Build configuration list for PBXNativeTarget "IceFacets iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E1731F3F8A87441AE16A4997 /* Debug */, + 6324AEBF336EDD9F8724714E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + A262792E3CF4FC040D9B0E32 /* Build configuration list for PBXNativeTarget "IceFacets macOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F3E495D849583BF5DCF030E3 /* Debug */, + 01372DE5BD44700FA039184F /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + A34FCDD31A832A6FDDD8F0A0 /* Build configuration list for PBXNativeTarget "IceInvoke macOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + C985543C5652992F1D999A9F /* Debug */, + 75C67331534281F0AD733E7B /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + A5F694D460E3EBC74DEEFB05 /* Build configuration list for PBXNativeTarget "IceSlicingObjects macOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F58BD9E83B601F494DC06632 /* Debug */, + C6A35B1A35E8280BA9E7F0CB /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + A724B6834EA384A8E0E399AB /* Build configuration list for PBXNativeTarget "IceInfo iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 4413F523F228DA4EAD250759 /* Debug */, + CC910B8810B0DDF55F939323 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + A7A2E2C7E7DDFA6DAC33F5FA /* Build configuration list for PBXNativeTarget "IceRetry iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 5A27953EF212DD6C9D6C7A41 /* Debug */, + E5E7677B4F20184B662D15EF /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + AA538079E713D700058162C3 /* Build configuration list for PBXNativeTarget "IceAdmin macOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 04D014AD439BEEB391EB4955 /* Debug */, + 82F20A84B20BE6003F12F1DF /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + AE8BC57EA2AB4EBC28B9573A /* Build configuration list for PBXNativeTarget "IceSlicingObjectsAMD iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 955E5B609EB2866F18EA3464 /* Debug */, + 3DBE45D1CDE13522A881EB95 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + AEBCA6EB7FE84DF64FEDB3B7 /* Build configuration list for PBXProject "ice" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 8B87552610F4F5108589D19C /* Debug */, + D33577F545253B3F1DC2E387 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + B07AC4763680970F4EB98782 /* Build configuration list for PBXNativeTarget "IceStream iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 39BE0D3E7CFDFEA88D62FFA9 /* Debug */, + 4166418E35F78375FB007774 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + B54D61ACC4D686D2D57F4857 /* Build configuration list for PBXNativeTarget "IceInheritance macOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 417F13F385A740AC03C35B21 /* Debug */, + B4257BF9DFD9AF98B5832D63 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + B86E1C552F07FA02599695F9 /* Build configuration list for PBXNativeTarget "IceOperations macOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + A4EB5A0A5B35F55869ABE32F /* Debug */, + 5F4D021A49CCD6BECB74E85D /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + BC54EBA5EE558ACE2F69B39E /* Build configuration list for PBXNativeTarget "IceProxy iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D9D6DF52B076F4707E8928BC /* Debug */, + D6E74A730DF699117857DD01 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + C2113ABE86EB9C8AFBDDA40D /* Build configuration list for PBXNativeTarget "IceSlicingObjectsAMD macOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 178B0B670457EC13E0E1E48E /* Debug */, + 854BE60C5641575053D788B1 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + C21E3330AE77BBF2779E0FD4 /* Build configuration list for PBXNativeTarget "IceLocatorDiscovery C++11 macOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 2F2D4A5B7FCCBF71575143E4 /* Debug */, + D549E5E4D50D6985BFD7EB78 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + C40D51C40E71A65F66FD1F08 /* Build configuration list for PBXNativeTarget "IceAmi macOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + FB3F167C06237ABB5388D0FE /* Debug */, + D125834B82857E54791380D6 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + C4B384C480DE5480E39A8499 /* Build configuration list for PBXNativeTarget "IceAdapterDeactivation macOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 532F0A725C50A19B7F26FB0E /* Debug */, + A64D3A6B81B976CA58E9AC8C /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + C96292BD292EBCD6FEE61F40 /* Build configuration list for PBXNativeTarget "IceSlicingExceptions iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 78B0F589EE15CF8C031092AC /* Debug */, + 151E7A8495FAD954071478FF /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + D0DD8F16256DE56BAA53F4D2 /* Build configuration list for PBXNativeTarget "IceGrid macOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 6823879AE29EBA9A5FDD4C5D /* Debug */, + C99C90EDDC169E4F89AB6D4D /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + D575B143D473999A00672E90 /* Build configuration list for PBXNativeTarget "IceServantLocator iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D18CE8B582AF7C25E49C77D3 /* Debug */, + 0A342BA729A10D4457FFF677 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + DC26B7127A5AD4AC63469191 /* Build configuration list for PBXNativeTarget "IceSlicingExceptionsAMD macOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 120C72FDC2C19B7A1A7C760A /* Debug */, + E41BFCF63BBAEF6611A756E4 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + DCB96F6BA85D63B9E06CFC45 /* Build configuration list for PBXNativeTarget "TestCommon macOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + B0D254B436A01958ECA40C60 /* Debug */, + EFC5561BA4E879D0CF1F87AA /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + DE3B9A4AD7F72C14B9320241 /* Build configuration list for PBXNativeTarget "IceStorm macOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 2EEE3212F4EA2E75BAD26057 /* Debug */, + 62B0DA5639049104A98EC911 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + DEB207C4B9ED416A4DAB03F2 /* Build configuration list for PBXNativeTarget "IceBinding macOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 7AFF78D5B05CBB7C2F04C50B /* Debug */, + E8CAB76745673555C4AE8FAF /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + DF0BCA79C8409E9C8E9CC35E /* Build configuration list for PBXNativeTarget "IceProxyAMD iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 48A83436F7399BA020080794 /* Debug */, + D48AFC47CC38D3C6F75E0F71 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + E1F763C73525763B2AD802FF /* Build configuration list for PBXNativeTarget "IceOperationsAMD iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F91414366AA7B3FD203134C1 /* Debug */, + 453E9082AA2E8E657F3EEE67 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + E4D9D8D0882E15DB707F69C9 /* Build configuration list for PBXNativeTarget "IceSSL C++11 macOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + CF4227A3F24DB5949B024057 /* Debug */, + 56A60B25BE7E0123A0B5A6E0 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + E8AE8122799EE9DADE090608 /* Build configuration list for PBXNativeTarget "Ice macOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 26964C50C6A2356DAB5C7D66 /* Debug */, + E7646DF0A421AED8CEACA406 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + E94C3A611BE84F572B7E4E16 /* Build configuration list for PBXNativeTarget "SliceEscape iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 3D28F27C0B0BEF0CAB24665D /* Debug */, + 19EC97909C6E9AB0E78E8529 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + E9D4F2554457A843F955B80E /* Build configuration list for PBXNativeTarget "IceProperties iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 6E2984D32E39D2A49B18F4AF /* Debug */, + 6DA26DFF6AE37EB0687EF2E6 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + F3BECDA9D59D7FDF85C9E09B /* Build configuration list for PBXNativeTarget "IceStorm iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 6ABB40BB5D0E7163716F9F6A /* Debug */, + F4951EA5CF1D4083C141E7FD /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + F5C7F06292AEEF8C81B45C31 /* Build configuration list for PBXNativeTarget "IceOptional macOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 2B6634B7C7A6DE0C746D57A9 /* Debug */, + 781FC7DBEAD45481C267F94E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + F73C7AC99DF8213BD4860AAA /* Build configuration list for PBXNativeTarget "IceEnums macOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F93427946E857589D6CB2508 /* Debug */, + 781491E130271AB0DA364178 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + F8253EAD1BB03F9D228A2D26 /* Build configuration list for PBXNativeTarget "Ice iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F7EA382F37D7192D1438EC10 /* Debug */, + EA03FE3B67CAB8714951EB48 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + FB5651C74C1F66044EE64455 /* Build configuration list for PBXNativeTarget "IceAcm macOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 754FD629FCB6A07BDC22C1CA /* Debug */, + 1E240AA99536193038E6D7E8 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + FC0FEFE43DD1AAE3F7CD1E1A /* Build configuration list for PBXNativeTarget "IceSSLConfiguration iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 809FDAE5DDA4ED30077C2E04 /* Debug */, + E719D5DDB45215121F69E71C /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + FCC94E555CFD0D8DA513C2AF /* Build configuration list for PBXNativeTarget "IceTimeout iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 7C35779E9B3F4AE74D882031 /* Debug */, + F528C35C4DBA049D72E103F4 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + FDE882A2EED792B82A140FBB /* Build configuration list for PBXNativeTarget "IceSlicingObjects iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 35D5E00F2ACDD4718E436388 /* Debug */, + 7E0723AFA238A1662BCD171C /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + FE0A728782657A0153EF18EF /* Build configuration list for PBXNativeTarget "IceObjects macOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 86C8C71441B9970C24268399 /* Debug */, + C7C9FBE1C018742A247577C7 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = B1E245C668955C328A61BFFC /* Project object */; +} diff --git a/swift/ice.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/swift/ice.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000000..919434a6254 --- /dev/null +++ b/swift/ice.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Workspace + version = "1.0"> + <FileRef + location = "self:"> + </FileRef> +</Workspace> diff --git a/swift/ice.xcodeproj/xcshareddata/xcschemes/Ice iOS.xcscheme b/swift/ice.xcodeproj/xcshareddata/xcschemes/Ice iOS.xcscheme new file mode 100644 index 00000000000..76959789ee1 --- /dev/null +++ b/swift/ice.xcodeproj/xcshareddata/xcschemes/Ice iOS.xcscheme @@ -0,0 +1,102 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Scheme + LastUpgradeVersion = "1020" + version = "1.3"> + <BuildAction + parallelizeBuildables = "YES" + buildImplicitDependencies = "YES"> + <BuildActionEntries> + <BuildActionEntry + buildForAnalyzing = "YES" + buildForTesting = "YES" + buildForRunning = "YES" + buildForProfiling = "YES" + buildForArchiving = "YES"> + <BuildableReference + BuildableIdentifier = "primary" + BlueprintIdentifier = "B3F277E37C4EA69886ACF274" + BuildableName = "Ice.framework" + BlueprintName = "Ice iOS" + ReferencedContainer = "container:ice.xcodeproj"> + </BuildableReference> + </BuildActionEntry> + <BuildActionEntry + buildForAnalyzing = "YES" + buildForTesting = "YES" + buildForRunning = "YES" + buildForProfiling = "YES" + buildForArchiving = "YES"> + <BuildableReference + BuildableIdentifier = "primary" + BlueprintIdentifier = "B1AFC88483CCA0F0F0DB5700" + BuildableName = "Glacier2.framework" + BlueprintName = "Glacier2 iOS" + ReferencedContainer = "container:ice.xcodeproj"> + </BuildableReference> + </BuildActionEntry> + <BuildActionEntry + buildForAnalyzing = "YES" + buildForTesting = "YES" + buildForRunning = "YES" + buildForProfiling = "YES" + buildForArchiving = "YES"> + <BuildableReference + BuildableIdentifier = "primary" + BlueprintIdentifier = "54419E5A07591C99AFD5FD44" + BuildableName = "IceStorm.framework" + BlueprintName = "IceStorm iOS" + ReferencedContainer = "container:ice.xcodeproj"> + </BuildableReference> + </BuildActionEntry> + <BuildActionEntry + buildForAnalyzing = "YES" + buildForTesting = "YES" + buildForRunning = "YES" + buildForProfiling = "YES" + buildForArchiving = "YES"> + <BuildableReference + BuildableIdentifier = "primary" + BlueprintIdentifier = "D231743A745D9E8937920F9A" + BuildableName = "IceGrid.framework" + BlueprintName = "IceGrid iOS" + ReferencedContainer = "container:ice.xcodeproj"> + </BuildableReference> + </BuildActionEntry> + </BuildActionEntries> + </BuildAction> + <TestAction + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + shouldUseLaunchSchemeArgsEnv = "YES" + buildConfiguration = "Debug"> + <AdditionalOptions> + </AdditionalOptions> + </TestAction> + <LaunchAction + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + launchStyle = "0" + useCustomWorkingDirectory = "NO" + ignoresPersistentStateOnLaunch = "NO" + debugDocumentVersioning = "YES" + debugServiceExtension = "internal" + buildConfiguration = "Debug" + allowLocationSimulation = "YES"> + <AdditionalOptions> + </AdditionalOptions> + </LaunchAction> + <ProfileAction + savedToolIdentifier = "" + useCustomWorkingDirectory = "NO" + debugDocumentVersioning = "YES" + buildConfiguration = "Release" + shouldUseLaunchSchemeArgsEnv = "YES"> + </ProfileAction> + <AnalyzeAction + buildConfiguration = "Debug"> + </AnalyzeAction> + <ArchiveAction + buildConfiguration = "Release" + revealArchiveInOrganizer = "YES"> + </ArchiveAction> +</Scheme> diff --git a/swift/ice.xcodeproj/xcshareddata/xcschemes/Ice macOS.xcscheme b/swift/ice.xcodeproj/xcshareddata/xcschemes/Ice macOS.xcscheme new file mode 100644 index 00000000000..102607b0233 --- /dev/null +++ b/swift/ice.xcodeproj/xcshareddata/xcschemes/Ice macOS.xcscheme @@ -0,0 +1,113 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Scheme + LastUpgradeVersion = "1020" + version = "1.3"> + <BuildAction + parallelizeBuildables = "YES" + buildImplicitDependencies = "YES"> + <BuildActionEntries> + <BuildActionEntry + buildForTesting = "YES" + buildForRunning = "YES" + buildForProfiling = "YES" + buildForArchiving = "YES" + buildForAnalyzing = "YES"> + <BuildableReference + BuildableIdentifier = "primary" + BlueprintIdentifier = "7C84DBD38E4C23C31AD1F23C" + BuildableName = "Ice.framework" + BlueprintName = "Ice macOS" + ReferencedContainer = "container:ice.xcodeproj"> + </BuildableReference> + </BuildActionEntry> + <BuildActionEntry + buildForTesting = "YES" + buildForRunning = "YES" + buildForProfiling = "YES" + buildForArchiving = "YES" + buildForAnalyzing = "YES"> + <BuildableReference + BuildableIdentifier = "primary" + BlueprintIdentifier = "7DB95DDC2A0D311A6441555E" + BuildableName = "Glacier2.framework" + BlueprintName = "Glacier2 macOS" + ReferencedContainer = "container:ice.xcodeproj"> + </BuildableReference> + </BuildActionEntry> + <BuildActionEntry + buildForTesting = "YES" + buildForRunning = "YES" + buildForProfiling = "YES" + buildForArchiving = "YES" + buildForAnalyzing = "YES"> + <BuildableReference + BuildableIdentifier = "primary" + BlueprintIdentifier = "901E6B19A44D60C62D27A9F6" + BuildableName = "IceStorm.framework" + BlueprintName = "IceStorm macOS" + ReferencedContainer = "container:ice.xcodeproj"> + </BuildableReference> + </BuildActionEntry> + <BuildActionEntry + buildForTesting = "YES" + buildForRunning = "YES" + buildForProfiling = "YES" + buildForArchiving = "YES" + buildForAnalyzing = "YES"> + <BuildableReference + BuildableIdentifier = "primary" + BlueprintIdentifier = "9E009F0CE808A84D564F958C" + BuildableName = "IceGrid.framework" + BlueprintName = "IceGrid macOS" + ReferencedContainer = "container:ice.xcodeproj"> + </BuildableReference> + </BuildActionEntry> + </BuildActionEntries> + </BuildAction> + <TestAction + buildConfiguration = "Debug" + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + shouldUseLaunchSchemeArgsEnv = "YES"> + <Testables> + </Testables> + <AdditionalOptions> + </AdditionalOptions> + </TestAction> + <LaunchAction + buildConfiguration = "Debug" + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + launchStyle = "0" + useCustomWorkingDirectory = "NO" + ignoresPersistentStateOnLaunch = "NO" + debugDocumentVersioning = "YES" + debugServiceExtension = "internal" + allowLocationSimulation = "YES"> + <MacroExpansion> + <BuildableReference + BuildableIdentifier = "primary" + BlueprintIdentifier = "7C84DBD38E4C23C31AD1F23C" + BuildableName = "Ice.framework" + BlueprintName = "Ice macOS" + ReferencedContainer = "container:ice.xcodeproj"> + </BuildableReference> + </MacroExpansion> + <AdditionalOptions> + </AdditionalOptions> + </LaunchAction> + <ProfileAction + buildConfiguration = "Release" + shouldUseLaunchSchemeArgsEnv = "YES" + savedToolIdentifier = "" + useCustomWorkingDirectory = "NO" + debugDocumentVersioning = "YES"> + </ProfileAction> + <AnalyzeAction + buildConfiguration = "Debug"> + </AnalyzeAction> + <ArchiveAction + buildConfiguration = "Release" + revealArchiveInOrganizer = "YES"> + </ArchiveAction> +</Scheme> diff --git a/swift/src/Glacier2/Glacier2Swift.h b/swift/src/Glacier2/Glacier2Swift.h new file mode 100644 index 00000000000..73824b48750 --- /dev/null +++ b/swift/src/Glacier2/Glacier2Swift.h @@ -0,0 +1,9 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#import <Cocoa/Cocoa.h> + +FOUNDATION_EXPORT double Glacier2VersionNumber; +FOUNDATION_EXPORT const unsigned char Glacier2VersionString[]; + diff --git a/swift/src/Glacier2/Info.plist b/swift/src/Glacier2/Info.plist new file mode 100644 index 00000000000..9668b463f36 --- /dev/null +++ b/swift/src/Glacier2/Info.plist @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>CFBundleDevelopmentRegion</key> + <string>$(DEVELOPMENT_LANGUAGE)</string> + <key>CFBundleExecutable</key> + <string>$(EXECUTABLE_NAME)</string> + <key>CFBundleIdentifier</key> + <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string> + <key>CFBundleInfoDictionaryVersion</key> + <string>6.0</string> + <key>CFBundleName</key> + <string>$(PRODUCT_NAME)</string> + <key>CFBundlePackageType</key> + <string>FMWK</string> + <key>CFBundleShortVersionString</key> + <string>$(CURRENT_PROJECT_VERSION)</string> + <key>CFBundleVersion</key> + <string>$(CURRENT_PROJECT_VERSION)</string> + <key>NSHumanReadableCopyright</key> + <string>Copyright © ZeroC, Inc. All rights reserved.</string> +</dict> +</plist> diff --git a/swift/src/Ice/AdminFacetFactory.swift b/swift/src/Ice/AdminFacetFactory.swift new file mode 100644 index 00000000000..dafb66ed703 --- /dev/null +++ b/swift/src/Ice/AdminFacetFactory.swift @@ -0,0 +1,108 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import IceObjc + +class AdminFacetFacade: ICEBlobjectFacade { + private let communicator: Communicator + var disp: Disp + + init(communicator: Communicator, disp: Disp) { + self.communicator = communicator + self.disp = disp + } + + func facadeInvoke(_ adapter: ICEObjectAdapter, inEncaps: Data, con: ICEConnection?, + name: String, category: String, facet: String, operation: String, mode: UInt8, + context: [String: String], requestId: Int32, encodingMajor: UInt8, encodingMinor: UInt8, + response: @escaping ICEBlobjectResponse, + exception: @escaping ICEBlobjectException) { + let objectAdapter = adapter.getSwiftObject(ObjectAdapterI.self) { + let oa = ObjectAdapterI(handle: adapter, communicator: communicator) + + // Register the admin OA's id with the servant manager. This is used to distinguish between + // ObjectNotExistException and FacetNotExistException when a servant is not found on + // a Swift Admin OA. + oa.servantManager.setAdminId(Identity(name: name, category: category)) + return oa + } + + let connection = con?.getSwiftObject(ConnectionI.self) { ConnectionI(handle: con!) } ?? nil + + let current = Current(adapter: objectAdapter, + con: connection, + id: Identity(name: name, category: category), + facet: facet, + operation: operation, + mode: OperationMode(rawValue: mode)!, + ctx: context, + requestId: requestId, + encoding: EncodingVersion(major: encodingMajor, minor: encodingMinor)) + + let incoming = Incoming(istr: InputStream(communicator: communicator, + encoding: EncodingVersion(major: encodingMajor, + minor: encodingMinor), + bytes: inEncaps), + response: response, + exception: exception, + current: current) + + dispatch(incoming: incoming, current: current) + } + + func dispatch(incoming: Incoming, current: Current) { + // Dispatch directly to the servant. Do not call invoke on Incoming + do { + try disp.dispatch(request: incoming, current: current) + } catch { + incoming.exception(error) + } + } + + func facadeRemoved() {} +} + +final class UnsupportedAdminFacet: LocalObject<ICEUnsupportedAdminFacet>, Object { + func ice_id(current _: Current) -> String { + return ObjectTraits.staticId + } + + func ice_ids(current _: Current) -> [String] { + return ObjectTraits.staticIds + } + + func ice_isA(id: String, current _: Current) -> Bool { + return id == ObjectTraits.staticId + } + + func ice_ping(current _: Current) {} +} + +class AdminFacetFactory: ICEAdminFacetFactory { + static func createProcess(_ communicator: ICECommunicator, handle: ICEProcess) -> ICEBlobjectFacade { + let c = communicator.getCachedSwiftObject(CommunicatorI.self) + return AdminFacetFacade(communicator: c, + disp: ProcessDisp(handle.getSwiftObject(ProcessI.self) { + ProcessI(handle: handle) + })) + } + + static func createProperties(_ communicator: ICECommunicator, handle: ICEPropertiesAdmin) -> ICEBlobjectFacade { + let c = communicator.getCachedSwiftObject(CommunicatorI.self) + + return AdminFacetFacade(communicator: c, + disp: PropertiesAdminDisp(handle.getSwiftObject(PropertiesAdminI.self) { + PropertiesAdminI(communicator: c, handle: handle) + })) + } + + static func createUnsupported(_ communicator: ICECommunicator, + handle: ICEUnsupportedAdminFacet) -> ICEBlobjectFacade { + let c = communicator.getCachedSwiftObject(CommunicatorI.self) + return AdminFacetFacade(communicator: c, + disp: ObjectDisp(handle.getSwiftObject(UnsupportedAdminFacet.self) { + UnsupportedAdminFacet(handle: handle) + })) + } +} diff --git a/swift/src/Ice/Blobject.swift b/swift/src/Ice/Blobject.swift new file mode 100644 index 00000000000..c7134a48ab9 --- /dev/null +++ b/swift/src/Ice/Blobject.swift @@ -0,0 +1,40 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Foundation + +/// Base protocol for dynamic dispatch servants. +public protocol Blobject { + /// Dispatch an incoming request. + /// + /// - parameter inEncaps: `Data` - The encoded in-parameters for the operation. + /// + /// - parameter current: `Ice.Current` - The Current object to pass to the operation. + /// + /// - returns: `(ok: Bool, outParams: Data)` - A tuple with the following fields: + /// + /// - ok: `Bool` - True if the operation completed successfully, false if + /// the operation raised a user exception (in this case, outParams + /// contains the encoded user exception). If the operation raises an + /// Ice run-time exception, it must throw it directly. + /// + /// - outParams: `Data` - The encoded out-paramaters and return value + /// for the operation. The return value follows any out-parameters. + func ice_invoke(inEncaps: Data, current: Current) throws -> (ok: Bool, outParams: Data) +} + +/// Request dispatcher for Blobject servants. +public struct BlobjectDisp: Disp { + public let servant: Blobject + + public init(_ servant: Blobject) { + self.servant = servant + } + + public func dispatch(request: Request, current: Current) throws { + let inEncaps = try request.readParamEncaps() + let invokeResult = try servant.ice_invoke(inEncaps: inEncaps, current: current) + request.writeParamEncaps(ok: invokeResult.ok, outParams: invokeResult.outParams) + } +} diff --git a/swift/src/Ice/BlobjectAsync.swift b/swift/src/Ice/BlobjectAsync.swift new file mode 100644 index 00000000000..e00e92abb61 --- /dev/null +++ b/swift/src/Ice/BlobjectAsync.swift @@ -0,0 +1,46 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Foundation +import PromiseKit + +/// Base protocol for dynamic asynchronous dispatch servants. +public protocol BlobjectAsync { + /// Dispatch an incoming request. + /// + /// - parameter inEncaps: `Data` - The encoded in-parameters for the operation. + /// + /// - parameter current: `Ice.Current` - The Current object to pass to the operation. + /// + /// - returns: `PromiseKit.Promise<(ok: Bool, outParams: Data)>` - The result of the operation. + /// + /// - ok: `Bool` - True if the operation completed successfully, false if + /// the operation raised a user exception (in this case, outParams + /// contains the encoded user exception). If the operation raises an + /// Ice run-time exception, it must throw it directly. + /// + /// - outParams: `Data` - The encoded out-paramaters and return value + /// for the operation. The return value follows any out-parameters. + func ice_invokeAsync(inEncaps: Data, current: Current) -> Promise<(ok: Bool, outParams: Data)> +} + +/// Request dispatcher for BlobjectAsync servants. +public struct BlobjectAsyncDisp: Disp { + public let servant: BlobjectAsync + + public init(_ servant: BlobjectAsync) { + self.servant = servant + } + + public func dispatch(request: Request, current: Current) throws { + let inEncaps = try request.readParamEncaps() + firstly { + self.servant.ice_invokeAsync(inEncaps: inEncaps, current: current) + }.done(on: nil) { invokeResult in + request.writeParamEncaps(ok: invokeResult.ok, outParams: invokeResult.outParams) + }.catch(on: nil) { err in + request.exception(err) + } + } +} diff --git a/swift/src/Ice/ClassResolver.swift b/swift/src/Ice/ClassResolver.swift new file mode 100644 index 00000000000..0f6903f464e --- /dev/null +++ b/swift/src/Ice/ClassResolver.swift @@ -0,0 +1,68 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Foundation + +open class ValueTypeResolver: NSObject { + open func type() -> Value.Type { + fatalError("Abstract method") + } +} + +open class UserExceptionTypeResolver: NSObject { + open func type() -> UserException.Type { + fatalError("Abstract method") + } +} + +// +// The generated code for Slice classes and exceptions provides an extension for +// Ice.ClassResolver with a static function that returns a ValueTypeResolver or +// UserExceptionTypeResolver. +// +public class ClassResolver: NSObject { + private static func resolveImpl(typeId: String, prefix: String?) -> AnyObject? { + return autoreleasepool { + let start = typeId.index(typeId.startIndex, offsetBy: 2) + let selector = Selector((prefix ?? "") + typeId[start...].replacingOccurrences(of: "::", with: "_")) + guard ClassResolver.responds(to: selector) else { + return nil + } + return ClassResolver.perform(selector).takeUnretainedValue() + } + } + + static func resolve(typeId: String, prefix: String? = nil) -> Value.Type? { + guard let t = resolveImpl(typeId: typeId, prefix: prefix) as? ValueTypeResolver else { + return nil + } + return t.type() + } + + static func resolve(typeId: String, prefix: String? = nil) -> UserException.Type? { + guard let t = resolveImpl(typeId: typeId, prefix: prefix) as? UserExceptionTypeResolver else { + return nil + } + return t.type() + } +} + +public class TypeIdResolver: NSObject { + static func resolve(compactId: Int32) -> String? { + return autoreleasepool { + let selector = Selector("TypeId_\(compactId)") + + guard TypeIdResolver.responds(to: selector) else { + return nil + } + + let val = TypeIdResolver.perform(selector).takeUnretainedValue() + + guard let typeId = val as? String else { + preconditionFailure("unexpected value type") + } + return typeId + } + } +} diff --git a/swift/src/Ice/CommunicatorI.swift b/swift/src/Ice/CommunicatorI.swift new file mode 100644 index 00000000000..5b9fad5698c --- /dev/null +++ b/swift/src/Ice/CommunicatorI.swift @@ -0,0 +1,316 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import IceObjc +import PromiseKit + +class CommunicatorI: LocalObject<ICECommunicator>, Communicator { + private let valueFactoryManager: ValueFactoryManager = ValueFactoryManagerI() + let defaultsAndOverrides: DefaultsAndOverrides + let initData: InitializationData + let classGraphDepthMax: Int32 + + init(handle: ICECommunicator, initData: InitializationData) { + defaultsAndOverrides = DefaultsAndOverrides(handle: handle) + self.initData = initData + let num = initData.properties!.getPropertyAsIntWithDefault(key: "Ice.ClassGraphDepthMax", value: 50) + if num < 1 || num > 0x7FFF_FFFF { + classGraphDepthMax = 0x7FFF_FFFF + } else { + classGraphDepthMax = num + } + super.init(handle: handle) + } + + func destroy() { + handle.destroy() + } + + func shutdown() { + handle.shutdown() + } + + func waitForShutdown() { + handle.waitForShutdown() + } + + func isShutdown() -> Bool { + return handle.isShutdown() + } + + func stringToProxy(_ str: String) throws -> ObjectPrx? { + return try autoreleasepool { + guard let prxHandle = try handle.stringToProxy(str: str) as? ICEObjectPrx else { + return nil + } + return ObjectPrxI(handle: prxHandle, communicator: self) + } + } + + func proxyToString(_ obj: ObjectPrx?) -> String { + return obj?.ice_toString() ?? "" + } + + func propertyToProxy(_ property: String) throws -> ObjectPrx? { + return try autoreleasepool { + guard let handle = try handle.propertyToProxy(property: property) as? ICEObjectPrx else { + return nil + } + return ObjectPrxI(handle: handle, communicator: self) + } + } + + func proxyToProperty(proxy: ObjectPrx, property: String) -> PropertyDict { + precondition(!proxy.ice_isFixed(), "Cannot create property for fixed proxy") + do { + return try autoreleasepool { + try handle.proxyToProperty(prx: proxy._impl.handle, property: property) + } + } catch is CommunicatorDestroyedException { + return PropertyDict() + } catch { + fatalError("\(error)") + } + } + + func identityToString(_ id: Identity) -> String { + return Ice.identityToString(id: id) + } + + func createObjectAdapter(_ name: String) throws -> ObjectAdapter { + return try autoreleasepool { + let handle = try self.handle.createObjectAdapter(name) + + return ObjectAdapterI(handle: handle, communicator: self) + } + } + + func createObjectAdapterWithEndpoints(name: String, endpoints: String) throws -> ObjectAdapter { + return try autoreleasepool { + let handle = try self.handle.createObjectAdapterWithEndpoints(name: name, endpoints: endpoints) + return ObjectAdapterI(handle: handle, communicator: self) + } + } + + func createObjectAdapterWithRouter(name: String, rtr: RouterPrx) throws -> ObjectAdapter { + return try autoreleasepool { + let handle = try self.handle.createObjectAdapterWithRouter(name: name, router: rtr._impl.handle) + return ObjectAdapterI(handle: handle, communicator: self) + } + } + + func getImplicitContext() -> ImplicitContext { + let handle = self.handle.getImplicitContext() + return handle.getSwiftObject(ImplicitContextI.self) { + ImplicitContextI(handle: handle) + } + } + + func getProperties() -> Properties { + return initData.properties! + } + + func getLogger() -> Logger { + return initData.logger! + } + + func getDefaultRouter() -> RouterPrx? { + guard let handle = handle.getDefaultRouter() else { + return nil + } + return RouterPrxI.fromICEObjectPrx(handle: handle, communicator: self) + } + + func setDefaultRouter(_ rtr: RouterPrx?) { + do { + try autoreleasepool { + try handle.setDefaultRouter((rtr as? ObjectPrxI)?.handle) + } + } catch is CommunicatorDestroyedException { + // Ignored + } catch { + fatalError("\(error)") + } + } + + func getDefaultLocator() -> LocatorPrx? { + guard let handle = handle.getDefaultLocator() else { + return nil + } + return LocatorPrxI.fromICEObjectPrx(handle: handle, communicator: self) + } + + func setDefaultLocator(_ loc: LocatorPrx?) { + do { + try autoreleasepool { + try handle.setDefaultLocator((loc as? ObjectPrxI)?.handle) + } + } catch is CommunicatorDestroyedException { + // Ignored + } catch { + fatalError("\(error)") + } + } + + func getValueFactoryManager() -> ValueFactoryManager { + return valueFactoryManager + } + + func flushBatchRequests(_ compress: CompressBatch) throws { + try autoreleasepool { + try handle.flushBatchRequests(compress.rawValue) + } + } + + func createAdmin(adminAdapter: ObjectAdapter?, adminId: Identity) throws -> ObjectPrx { + return try autoreleasepool { + let handle = try self.handle.createAdmin((adminAdapter as? ObjectAdapterI)?.handle, + name: adminId.name, + category: adminId.category) + if let adapter = adminAdapter { + // Register the admin OA's id with the servant manager. This is used to distingish between + // ObjectNotExistException and FacetNotExistException when a servant is not found on + // a Swift Admin OA. + (adapter as! ObjectAdapterI).servantManager.setAdminId(adminId) + } + + return ObjectPrxI(handle: handle, communicator: self) + } + } + + func getAdmin() throws -> ObjectPrx? { + return try autoreleasepool { + guard let handle = try handle.getAdmin() as? ICEObjectPrx else { + return nil + } + + return ObjectPrxI(handle: handle, communicator: self) + } + } + + func addAdminFacet(servant disp: Disp, facet: String) throws { + try autoreleasepool { + try handle.addAdminFacet(AdminFacetFacade(communicator: self, disp: disp), facet: facet) + } + } + + func removeAdminFacet(_ facet: String) throws -> Disp { + return try autoreleasepool { + guard let facade = try handle.removeAdminFacet(facet) as? AdminFacetFacade else { + preconditionFailure() + } + + return facade.disp + } + } + + func findAdminFacet(_ facet: String) -> Disp? { + do { + return try autoreleasepool { + guard let facade = try handle.findAdminFacet(facet) as? AdminFacetFacade else { + return nil + } + return facade.disp + } + } catch is CommunicatorDestroyedException { + // Ignored + return nil + } catch { + fatalError("\(error)") + } + } + + func findAllAdminFacets() -> FacetMap { + do { + return try autoreleasepool { + try handle.findAllAdminFacets().mapValues { facade in + (facade as! AdminFacetFacade).disp + } + } + } catch is CommunicatorDestroyedException { + // Ignored + return FacetMap() + } catch { + fatalError("\(error)") + } + } + + func getClientDispatchQueue() throws -> DispatchQueue { + return try autoreleasepool { + try handle.getClientDispatchQueue() + } + } + + func getServerDispatchQueue() throws -> DispatchQueue { + return try autoreleasepool { + try handle.getServerDispatchQueue() + } + } +} + +public extension Communicator { + func flushBatchRequestsAsync(_ compress: CompressBatch, + sentOn: DispatchQueue? = PromiseKit.conf.Q.return, + sentFlags: DispatchWorkItemFlags? = nil, + sent: ((Bool) -> Void)? = nil) -> Promise<Void> { + let impl = self as! CommunicatorI + let sentCB = createSentCallback(sentOn: sentOn, sentFlags: sentFlags, sent: sent) + return Promise<Void> { seal in + impl.handle.flushBatchRequestsAsync(compress.rawValue, + exception: { seal.reject($0) }, + sent: { + seal.fulfill(()) + if let sentCB = sentCB { + sentCB($0) + } + }) + } + } + + /// Establish the password prompt object. This must be done before + /// the IceSSL plug-in is initialized. + /// + /// - parameter prompt: `(() -> String)` - The password prompt. + func setSslPasswordPrompt(prompt: @escaping (() -> String)) { + (self as! CommunicatorI).handle.setSslPasswordPrompt(prompt) + } + + /// Establish the certificate verifier objet. This must be done before + /// any connection are established. + /// + /// - parameter prompt: `((SSLConnectionInfo) -> Bool)` The certificate verifier. + func setSslCertificateVerifier(verifier: @escaping ((SSLConnectionInfo) -> Bool)) { + (self as! CommunicatorI).handle.setSslCertificateVerifier { info in + verifier(info as! SSLConnectionInfo) + } + } + + /// Initialize the configured plug-ins. The communicator automatically initializes + /// the plug-ins by default, but an application may need to interact directly with + /// a plug-in prior to initialization. In this case, the application must set + /// `Ice.InitPlugins=0` and then invoke `initializePlugins` manually. The plug-ins are + /// initialized in the order in which they are loaded. If a plug-in raises an exception + /// during initialization, the communicator invokes destroy on the plug-ins that have + /// already been initialized. + /// + /// - throws: `InitializationException` Raised if the plug-ins have already been + /// initialized. + func initializePlugins() throws { + try autoreleasepool { + try (self as! CommunicatorI).handle.initializePlugins() + } + } +} + +struct DefaultsAndOverrides { + init(handle: ICECommunicator) { + var defaultEncoding = EncodingVersion() + handle.getDefaultEncoding(major: &defaultEncoding.major, minor: &defaultEncoding.minor) + self.defaultEncoding = defaultEncoding + defaultFormat = FormatType(rawValue: handle.getDefaultFormat())! + } + + let defaultEncoding: EncodingVersion + let defaultFormat: FormatType +} diff --git a/swift/src/Ice/ConnectionI.swift b/swift/src/Ice/ConnectionI.swift new file mode 100644 index 00000000000..136ffd6a3bd --- /dev/null +++ b/swift/src/Ice/ConnectionI.swift @@ -0,0 +1,161 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import IceObjc +import PromiseKit + +public extension Connection { + func flushBatchRequestsAsync(_ compress: CompressBatch, + sentOn: DispatchQueue? = PromiseKit.conf.Q.return, + sentFlags: DispatchWorkItemFlags? = nil, + sent: ((Bool) -> Void)? = nil) -> Promise<Void> { + let impl = self as! ConnectionI + let sentCB = createSentCallback(sentOn: sentOn, sentFlags: sentFlags, sent: sent) + return Promise<Void> { seal in + impl.handle.flushBatchRequestsAsync(compress.rawValue, + exception: { error in seal.reject(error) }, + sent: { + seal.fulfill(()) + if let sentCB = sentCB { + sentCB($0) + } + }) + } + } + + func heartbeatAsync(sentOn: DispatchQueue? = PromiseKit.conf.Q.return, + sentFlags: DispatchWorkItemFlags? = nil, + sent: ((Bool) -> Void)? = nil) -> Promise<Void> { + let impl = self as! ConnectionI + return Promise<Void> { seal in + impl.handle.heartbeatAsync(exception: { error in seal.reject(error) }, + sent: createSentCallback(sentOn: sentOn, + sentFlags: sentFlags, + sent: sent)) + } + } + + // CustomStringConvertible implementation + var description: String { + return toString() + } +} + +class ConnectionI: LocalObject<ICEConnection>, Connection { + func close(_ mode: ConnectionClose) { + handle.close(mode.rawValue) + } + + func createProxy(_ id: Identity) throws -> ObjectPrx { + precondition(!id.name.isEmpty, "Identity cannot have an empty name") + return try autoreleasepool { + let handle = try self.handle.createProxy(id.name, category: id.category) + let communicator = handle.ice_getCommunicator().getCachedSwiftObject(CommunicatorI.self) + return ObjectPrxI(handle: handle, communicator: communicator) + } + } + + func setAdapter(_ oa: ObjectAdapter?) throws { + try autoreleasepool { + try handle.setAdapter((oa as? ObjectAdapterI)?.handle) + } + } + + func getAdapter() -> ObjectAdapter? { + guard let handle = handle.getAdapter() else { + return nil + } + + return handle.getCachedSwiftObject(ObjectAdapterI.self) + } + + func getEndpoint() -> Endpoint { + let handle = self.handle.getEndpoint() + return handle.getSwiftObject(EndpointI.self) { + EndpointI(handle: handle) + } + } + + func flushBatchRequests(_ compress: CompressBatch) throws { + return try autoreleasepool { + try handle.flushBatchRequests(compress.rawValue) + } + } + + func setCloseCallback(_ callback: CloseCallback?) throws { + return try autoreleasepool { + guard let cb = callback else { + try handle.setCloseCallback(nil) + return + } + + try handle.setCloseCallback { c in + precondition(c.getCachedSwiftObject(ConnectionI.self) === self) + cb(self) + } + } + } + + func setHeartbeatCallback(_ callback: HeartbeatCallback?) { + guard let cb = callback else { + handle.setHeartbeatCallback(nil) + return + } + + handle.setHeartbeatCallback { c in + precondition(c.getCachedSwiftObject(ConnectionI.self) === self) + cb(self) + } + } + + func heartbeat() throws { + return try autoreleasepool { + try handle.heartbeat() + } + } + + func setACM(timeout: Int32?, close: ACMClose?, heartbeat: ACMHeartbeat?) { + precondition(timeout ?? 0 >= 0, "Invalid negative ACM timeout value") + handle.setACM(timeout as NSNumber?, + close: close != nil ? close.unsafelyUnwrapped.rawValue as NSNumber : nil, + heartbeat: heartbeat != nil ? heartbeat.unsafelyUnwrapped.rawValue as NSNumber : nil) + } + + func getACM() -> ACM { + var timeout = Int32() + var close = UInt8() + var heartbeat = UInt8() + handle.getACM(&timeout, close: &close, heartbeat: &heartbeat) + return ACM(timeout: timeout, close: ACMClose(rawValue: close)!, heartbeat: ACMHeartbeat(rawValue: heartbeat)!) + } + + func type() -> String { + return handle.type() + } + + func timeout() -> Int32 { + return handle.timeout() + } + + func toString() -> String { + return handle.toString() + } + + func getInfo() throws -> ConnectionInfo { + // swiftlint:disable force_cast + return try handle.getInfo() as! ConnectionInfo + } + + func setBufferSize(rcvSize: Int32, sndSize: Int32) throws { + return try autoreleasepool { + try handle.setBufferSize(rcvSize, sndSize: sndSize) + } + } + + func throwException() throws { + return try autoreleasepool { + try handle.throwException() + } + } +} diff --git a/swift/src/Ice/ConnectionInfoFactory.swift b/swift/src/Ice/ConnectionInfoFactory.swift new file mode 100644 index 00000000000..bb0766c3b7a --- /dev/null +++ b/swift/src/Ice/ConnectionInfoFactory.swift @@ -0,0 +1,255 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Foundation +import IceObjc + +private class ConnectionInfoI: ConnectionInfo { + var underlying: ConnectionInfo? + var incoming: Bool + var adapterName: String + var connectionId: String + + init(underlying: ConnectionInfo?, incoming: Bool, adapterName: String, connectionId: String) { + self.underlying = underlying + self.incoming = incoming + self.adapterName = adapterName + self.connectionId = connectionId + } +} + +private class IPConnectionInfoI: ConnectionInfoI, IPConnectionInfo { + var localAddress: String + var localPort: Int32 + var remoteAddress: String + var remotePort: Int32 + + init(underlying: ConnectionInfo?, incoming: Bool, adapterName: String, connectionId: String, + localAddress: String, localPort: Int32, remoteAddress: String, remotePort: Int32) { + self.localAddress = localAddress + self.localPort = localPort + self.remoteAddress = remoteAddress + self.remotePort = remotePort + super.init(underlying: underlying, incoming: incoming, adapterName: adapterName, connectionId: connectionId) + } +} + +private class TCPConnectionInfoI: IPConnectionInfoI, TCPConnectionInfo { + var rcvSize: Int32 + var sndSize: Int32 + + init(underlying: ConnectionInfo?, incoming: Bool, adapterName: String, connectionId: String, + localAddress: String, localPort: Int32, remoteAddress: String, remotePort: Int32, + rcvSize: Int32, sndSize: Int32) { + self.rcvSize = rcvSize + self.sndSize = sndSize + super.init(underlying: underlying, incoming: incoming, adapterName: adapterName, connectionId: connectionId, + localAddress: localAddress, localPort: localPort, + remoteAddress: remoteAddress, remotePort: remotePort) + } +} + +private class UDPConnectionInfoI: IPConnectionInfoI, UDPConnectionInfo { + var mcastAddress: String + var mcastPort: Int32 + var rcvSize: Int32 + var sndSize: Int32 + + init(underlying: ConnectionInfo?, incoming: Bool, adapterName: String, connectionId: String, + localAddress: String, localPort: Int32, remoteAddress: String, remotePort: Int32, + mcastAddress: String, mcastPort: Int32, rcvSize: Int32, sndSize: Int32) { + self.mcastAddress = mcastAddress + self.mcastPort = mcastPort + self.rcvSize = rcvSize + self.sndSize = sndSize + super.init(underlying: underlying, incoming: incoming, adapterName: adapterName, connectionId: connectionId, + localAddress: localAddress, localPort: localPort, + remoteAddress: remoteAddress, remotePort: remotePort) + } +} + +private class WSConnectionInfoI: ConnectionInfoI, WSConnectionInfo { + var headers: HeaderDict + + init(underlying: ConnectionInfo?, incoming: Bool, adapterName: String, connectionId: String, + headers: HeaderDict) { + self.headers = headers + super.init(underlying: underlying, incoming: incoming, adapterName: adapterName, connectionId: connectionId) + } +} + +private class SSLConnectionInfoI: ConnectionInfoI, SSLConnectionInfo { + var cipher: String + var certs: [SecCertificate] + var verified: Bool + + init(underlying: ConnectionInfo?, incoming: Bool, adapterName: String, connectionId: String, + cipher: String, certs: StringSeq, verified: Bool) { + self.cipher = cipher + self.certs = [] + let beginPrefix = "-----BEGIN CERTIFICATE-----\n" + let endPrefix = "\n-----END CERTIFICATE-----\n" + + for cert in certs { + var raw = cert + if raw.hasPrefix(beginPrefix) { + raw = String(raw.dropFirst(beginPrefix.count)) + raw = String(raw.dropLast(endPrefix.count)) + } + + if let data = NSData(base64Encoded: raw, options: .ignoreUnknownCharacters) { + if let c = SecCertificateCreateWithData(kCFAllocatorDefault, data) { + self.certs.append(c) + } + } + } + self.verified = verified + super.init(underlying: underlying, incoming: incoming, adapterName: adapterName, connectionId: connectionId) + } +} + +#if os(iOS) || os(watchOS) || os(tvOS) + private class IAPConnectionInfoI: ConnectionInfoI, IAPConnectionInfo { + var name: String + var manufacturer: String + var modelNumber: String + var firmwareRevision: String + var hardwareRevision: String + var `protocol`: String + + init(underlying: ConnectionInfo?, incoming: Bool, adapterName: String, connectionId: String, + name: String, manufacturer: String, modelNumber: String, firmwareRevision: String, + hardwareRevision: String, + protocol: String) { + self.name = name + self.manufacturer = manufacturer + self.modelNumber = modelNumber + self.firmwareRevision = firmwareRevision + self.hardwareRevision = hardwareRevision + self.protocol = `protocol` + super.init(underlying: underlying, incoming: incoming, adapterName: adapterName, connectionId: connectionId) + } + } +#endif + +class ConnectionInfoFactory: ICEConnectionInfoFactory { + static func createIPConnectionInfo(_ underlying: Any, + incoming: Bool, + adapterName: String, + connectionId: String, + localAddress: String, + localPort: Int32, + remoteAddress: String, + remotePort: Int32) -> Any { + return IPConnectionInfoI(underlying: getUnderlying(underlying), + incoming: incoming, + adapterName: adapterName, + connectionId: connectionId, + localAddress: localAddress, + localPort: localPort, + remoteAddress: remoteAddress, + remotePort: remotePort) + } + + static func createTCPConnectionInfo(_ underlying: Any, + incoming: Bool, + adapterName: String, + connectionId: String, + localAddress: String, + localPort: Int32, + remoteAddress: String, + remotePort: Int32, + rcvSize: Int32, + sndSize: Int32) -> Any { + return TCPConnectionInfoI(underlying: getUnderlying(underlying), incoming: incoming, + adapterName: adapterName, + connectionId: connectionId, + localAddress: localAddress, + localPort: localPort, + remoteAddress: remoteAddress, + remotePort: remotePort, + rcvSize: rcvSize, + sndSize: sndSize) + } + + static func createUDPConnectionInfo(_ underlying: Any, + incoming: Bool, + adapterName: String, + connectionId: String, + localAddress: String, + localPort: Int32, + remoteAddress: String, + remotePort: Int32, mcastAddress: String, mcastPort: Int32, + rcvSize: Int32, + sndSize: Int32) -> Any { + return UDPConnectionInfoI(underlying: getUnderlying(underlying), incoming: incoming, + adapterName: adapterName, + connectionId: connectionId, + localAddress: localAddress, + localPort: localPort, + remoteAddress: remoteAddress, + remotePort: remotePort, + mcastAddress: mcastAddress, + mcastPort: mcastPort, + rcvSize: rcvSize, + sndSize: sndSize) + } + + static func createWSConnectionInfo(_ underlying: Any, + incoming: Bool, + adapterName: String, + connectionId: String, + headers: [String: String]) -> Any { + return WSConnectionInfoI(underlying: getUnderlying(underlying), + incoming: incoming, + adapterName: adapterName, + connectionId: connectionId, + headers: headers) + } + + static func createSSLConnectionInfo(_ underlying: Any, + incoming: Bool, + adapterName: String, + connectionId: String, + cipher: String, + certs: [String], verified: Bool) -> Any { + return SSLConnectionInfoI(underlying: getUnderlying(underlying), + incoming: incoming, + adapterName: adapterName, + connectionId: connectionId, + cipher: cipher, + certs: certs, + verified: verified) + } + + #if os(iOS) || os(watchOS) || os(tvOS) + + static func createIAPConnectionInfo(_ underlying: Any, + incoming: Bool, + adapterName: String, + connectionId: String, + name: String, + manufacturer: String, + modelNumber: String, + firmwareRevision: String, + hardwareRevision: String, + protocol: String) -> Any { + return IAPConnectionInfoI(underlying: getUnderlying(underlying), + incoming: incoming, + adapterName: adapterName, + connectionId: connectionId, + name: name, + manufacturer: manufacturer, + modelNumber: modelNumber, + firmwareRevision: firmwareRevision, + hardwareRevision: hardwareRevision, + protocol: `protocol`) + } + + #endif + + static func getUnderlying(_ info: Any) -> ConnectionInfo? { + return info as? ConnectionInfo + } +} diff --git a/swift/src/Ice/EndpointI.swift b/swift/src/Ice/EndpointI.swift new file mode 100644 index 00000000000..b2f9a5a6482 --- /dev/null +++ b/swift/src/Ice/EndpointI.swift @@ -0,0 +1,185 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import IceObjc + +class EndpointI: LocalObject<ICEEndpoint>, Endpoint { + func toString() -> String { + return handle.toString() + } + + func getInfo() -> EndpointInfo? { + return handle.getInfo() as? EndpointInfo + } + + // CustomStringConvertible implementation + var description: String { + return toString() + } +} + +public func != (lhs: Endpoint?, rhs: Endpoint?) -> Bool { + return !(lhs == rhs) +} + +public func == (lhs: Endpoint?, rhs: Endpoint?) -> Bool { + if lhs === rhs { + return true + } else if lhs === nil && rhs === nil { + return true + } else if lhs === nil || rhs === nil { + return false + } else { + let lhsI = lhs as! EndpointI + let rhsI = rhs as! EndpointI + return lhsI.handle.isEqual(rhsI.handle) + } +} + +// We implement EndpointInfo as a LocalObject that delegates to an ObjC/C++ object. +// The alternative - delegating to the Endpoint object - is not practical since the public API +// of Endpoint in C++ does not expose type, datagram or secure. +class EndpointInfoI: LocalObject<ICEEndpointInfo>, EndpointInfo { + var underlying: EndpointInfo? + var timeout: Int32 + var compress: Bool + + init(handle: ICEEndpointInfo, underlying: EndpointInfo?, timeout: Int32, compress: Bool) { + self.underlying = underlying + self.timeout = timeout + self.compress = compress + super.init(handle: handle) + } + + func type() -> Int16 { + return handle.getType() + } + + func datagram() -> Bool { + return handle.getDatagram() + } + + func secure() -> Bool { + return handle.getSecure() + } +} + +// This class is logically abstract and only derived classes should be created. +class IPEndpointInfoI: EndpointInfoI, IPEndpointInfo { + var host: String + var port: Int32 + var sourceAddress: String + + init(handle: ICEEndpointInfo, + underlying: EndpointInfo?, + timeout: Int32, + compress: Bool, + host: String, + port: Int32, + sourceAddress: String) { + self.host = host + self.port = port + self.sourceAddress = sourceAddress + super.init(handle: handle, underlying: underlying, timeout: timeout, compress: compress) + } +} + +class TCPEndpointInfoI: IPEndpointInfoI, TCPEndpointInfo {} + +class UDPEndpointInfoI: IPEndpointInfoI, UDPEndpointInfo { + var mcastInterface: String + var mcastTtl: Int32 + + init(handle: ICEEndpointInfo, + underlying: EndpointInfo?, + timeout: Int32, + compress: Bool, + host: String, + port: Int32, + sourceAddress: String, + mcastInterface: String, + mcastTtl: Int32) { + self.mcastInterface = mcastInterface + self.mcastTtl = mcastTtl + super.init(handle: handle, + underlying: underlying, + timeout: timeout, + compress: compress, + host: host, + port: port, + sourceAddress: sourceAddress) + } +} + +class WSEndpointInfoI: EndpointInfoI, WSEndpointInfo { + var resource: String + + init(handle: ICEEndpointInfo, underlying: EndpointInfo?, timeout: Int32, compress: Bool, resource: String) { + self.resource = resource + super.init(handle: handle, underlying: underlying, timeout: timeout, compress: compress) + } +} + +class OpaqueEndpointInfoI: EndpointInfoI, OpaqueEndpointInfo { + var rawEncoding: EncodingVersion + var rawBytes: ByteSeq + + init(handle: ICEEndpointInfo, + underlying: EndpointInfo?, + timeout: Int32, + compress: Bool, + rawEncoding: EncodingVersion, + rawBytes: ByteSeq) { + self.rawEncoding = rawEncoding + self.rawBytes = rawBytes + super.init(handle: handle, underlying: underlying, timeout: timeout, compress: compress) + } +} + +// +// IceSSL +// +class SSLEndpointInfoI: EndpointInfoI, SSLEndpointInfo {} + +#if os(iOS) || os(watchOS) || os(tvOS) + + // IceIAP (iOS only) + class IAPEndpointInfoI: EndpointInfoI, IAPEndpointInfo { + var manufacturer: String + var modelNumber: String + var name: String + var `protocol`: String + + init(handle: ICEEndpointInfo, underlying: EndpointInfo?, timeout: Int32, compress: Bool, + manufacturer: String, modelNumber: String, name: String, protocol: String) { + self.manufacturer = manufacturer + self.modelNumber = modelNumber + self.name = name + self.protocol = `protocol` + super.init(handle: handle, underlying: underlying, timeout: timeout, compress: compress) + } + } + +#endif + +// +// Internal helpers to convert from ObjC to Swift objects +// +extension Array where Element == ICEEndpoint { + func fromObjc() -> EndpointSeq { + return map { objcEndpt in + objcEndpt.getSwiftObject(EndpointI.self) { + EndpointI(handle: objcEndpt) + } + } + } +} + +extension Array where Element == Endpoint { + func toObjc() -> [ICEEndpoint] { + return map { endpt in + (endpt as! EndpointI).handle + } + } +} diff --git a/swift/src/Ice/EndpointInfoFactory.swift b/swift/src/Ice/EndpointInfoFactory.swift new file mode 100644 index 00000000000..9490fa05234 --- /dev/null +++ b/swift/src/Ice/EndpointInfoFactory.swift @@ -0,0 +1,106 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import IceObjc + +class EndpointInfoFactory: ICEEndpointInfoFactory { + static func createTCPEndpointInfo(_ handle: ICEEndpointInfo, + underlying: Any, + timeout: Int32, + compress: Bool, + host: String, + port: Int32, + sourceAddress: String) -> Any { + return TCPEndpointInfoI(handle: handle, + underlying: getUnderlying(underlying), + timeout: timeout, + compress: compress, + host: host, + port: port, + sourceAddress: sourceAddress) + } + + static func createUDPEndpointInfo(_ handle: ICEEndpointInfo, + underlying: Any, + timeout: Int32, + compress: Bool, + host: String, + port: Int32, + sourceAddress: String, + mcastInterface: String, + mcastTtl: Int32) -> Any { + return UDPEndpointInfoI(handle: handle, + underlying: getUnderlying(underlying), + timeout: timeout, + compress: compress, + host: host, + port: port, + sourceAddress: sourceAddress, + mcastInterface: mcastInterface, + mcastTtl: mcastTtl) + } + + static func createWSEndpointInfo(_ handle: ICEEndpointInfo, + underlying: Any, + timeout: Int32, + compress: Bool, + resource: String) -> Any { + return WSEndpointInfoI(handle: handle, + underlying: getUnderlying(underlying), + timeout: timeout, + compress: compress, + resource: resource) + } + + static func createOpaqueEndpointInfo(_ handle: ICEEndpointInfo, + underlying: Any, + timeout: Int32, + compress: Bool, + encodingMajor: UInt8, + encodingMinor: UInt8, + rawBytes: Data) -> Any { + return OpaqueEndpointInfoI(handle: handle, + underlying: getUnderlying(underlying), + timeout: timeout, + compress: compress, + rawEncoding: EncodingVersion(major: encodingMajor, minor: encodingMinor), + rawBytes: rawBytes) + } + + static func createSSLEndpointInfo(_ handle: ICEEndpointInfo, + underlying: Any, + timeout: Int32, + compress: Bool) -> Any { + return SSLEndpointInfoI(handle: handle, + underlying: getUnderlying(underlying), + timeout: timeout, + compress: compress) + } + + #if os(iOS) || os(watchOS) || os(tvOS) + + static func createIAPEndpointInfo(_ handle: ICEEndpointInfo, + underlying: Any, + timeout: Int32, + compress: Bool, + manufacturer: String, + modelNumber: String, + name: String, + protocol: String) -> Any { + return IAPEndpointInfoI(handle: handle, + underlying: getUnderlying(underlying), + timeout: timeout, + compress: compress, + manufacturer: manufacturer, + modelNumber: modelNumber, + name: name, + protocol: `protocol`) + } + + #endif + + static func getUnderlying(_ info: Any) -> EndpointInfo? { + return info as? EndpointInfo + } +} diff --git a/swift/src/Ice/Exception.swift b/swift/src/Ice/Exception.swift new file mode 100644 index 00000000000..474c9fa7e34 --- /dev/null +++ b/swift/src/Ice/Exception.swift @@ -0,0 +1,100 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +/// Base protocol for Ice exceptions. +public protocol Exception: Error { + /// Returns the type id of this exception. + /// + /// - returns: `String` - The type id of this exception. + func ice_id() -> String + static func ice_staticId() -> String +} + +public extension Exception { + func ice_id() -> String { + return type(of: self).ice_staticId() + } +} + +/// Base class for Ice run-time exceptions. +open class LocalException: Exception, CustomStringConvertible { + public let file: String + public let line: Int + + public var description: String { + return "\(file): \(line): \(ice_id())\(ice_print())" + } + + public init(file: String = #file, line: Int = #line) { + self.file = file + self.line = line + } + + open class func ice_staticId() -> String { + return "::Ice::LocalException" + } + + /// Returns a stringified description of this exception. + /// + /// - returns: `String` - The exception description. + open func ice_print() -> String { + return "" + } +} + +/// Base class for Ice user exceptions. +open class UserException: Exception { + public required init() {} + + open func _iceReadImpl(from _: InputStream) throws {} + open func _iceWriteImpl(to _: OutputStream) {} + + open func _usesClasses() -> Bool { + return false + } + + /// Returns the Slice type ID of the exception. + /// + /// - returns: `String` The Slice type ID. + open class func ice_staticId() -> String { + return "::Ice::UserException" + } + + open func _iceRead(from istr: InputStream) throws { + istr.startException() + try _iceReadImpl(from: istr) + try istr.endException(preserve: false) + } + + open func _iceWrite(to ostr: OutputStream) { + ostr.startException(data: nil) + _iceWriteImpl(to: ostr) + ostr.endException() + } + + /// Returns the sliced data if the exception has a preserved-slice base class and has been sliced during + /// un-marshaling, nil is returned otherwise. + /// + /// - returns: `SlicedData?` - The sliced data or nil. + open func ice_getSlicedData() -> SlicedData? { + return nil + } +} + +/// Error used to wrap C++ std::exception errors. +public class RuntimeError: LocalException { + private let message: String + + public override var description: String { + return message + } + + open override class func ice_staticId() -> String { + return "::Ice::RuntimeError" + } + + public init(_ message: String) { + self.message = message + } +} diff --git a/swift/src/Ice/FormatType.swift b/swift/src/Ice/FormatType.swift new file mode 100644 index 00000000000..0104a77efc8 --- /dev/null +++ b/swift/src/Ice/FormatType.swift @@ -0,0 +1,10 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +/// This enumeration describes the possible formats for classes and exceptions. +public enum FormatType: UInt8 { + case DefaultFormat = 0 + case CompactFormat = 1 + case SlicedFormat = 2 +} diff --git a/swift/src/Ice/IceSwift.h b/swift/src/Ice/IceSwift.h new file mode 100644 index 00000000000..a3f63e82da4 --- /dev/null +++ b/swift/src/Ice/IceSwift.h @@ -0,0 +1,9 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#import <Cocoa/Cocoa.h> + +FOUNDATION_EXPORT double IceVersionNumber; +FOUNDATION_EXPORT const unsigned char IceVersionString[]; + diff --git a/swift/src/Ice/ImplicitContextI.swift b/swift/src/Ice/ImplicitContextI.swift new file mode 100644 index 00000000000..758fd94b29f --- /dev/null +++ b/swift/src/Ice/ImplicitContextI.swift @@ -0,0 +1,31 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import IceObjc + +class ImplicitContextI: LocalObject<ICEImplicitContext>, ImplicitContext { + func getContext() -> Context { + return handle.getContext() + } + + func setContext(_ newContext: Context) { + handle.setContext(newContext) + } + + func containsKey(_ key: String) -> Bool { + return handle.containsKey(key) + } + + func get(_ key: String) -> String { + return handle.get(key) + } + + func put(key: String, value: String) -> String { + return handle.put(key, value: value) + } + + func remove(_ key: String) -> String { + return handle.remove(key) + } +} diff --git a/swift/src/Ice/Incoming.swift b/swift/src/Ice/Incoming.swift new file mode 100644 index 00000000000..001550738d5 --- /dev/null +++ b/swift/src/Ice/Incoming.swift @@ -0,0 +1,239 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Foundation +import IceObjc + +public final class Incoming { + private let current: Current + private var format: FormatType + private let istr: InputStream + private var ostr: OutputStream + private let responseCallback: ICEBlobjectResponse + private let exceptionCallback: ICEBlobjectException + + private var servant: Disp? + private var locator: ServantLocator? + private var cookie: AnyObject? + + init(istr: InputStream, response: @escaping ICEBlobjectResponse, exception: @escaping ICEBlobjectException, + current: Current) { + self.istr = istr + format = .DefaultFormat + responseCallback = response + exceptionCallback = exception + self.current = current + ostr = OutputStream(communicator: istr.communicator, encoding: current.encoding) + } + + public func readEmptyParams() throws { + // + // Remember the encoding used by the input parameters, we'll + // encode the response parameters with the same encoding. + // + current.encoding = try istr.skipEmptyEncapsulation() + } + + public func readParamEncaps() throws -> Data { + let params = try istr.readEncapsulation() + current.encoding = params.encoding + return params.bytes + } + + public func read<T>(_ cb: (InputStream) throws -> T) throws -> T { + // + // Remember the encoding used by the input parameters, we'll + // encode the response parameters with the same encoding. + // + current.encoding = try istr.startEncapsulation() + let l = try cb(istr) + try istr.endEncapsulation() + return l + } + + public func write(_ cb: (OutputStream) -> Void) { + ostr.startEncapsulation(encoding: current.encoding, format: format) + cb(ostr) + ostr.endEncapsulation() + response() + } + + public func writeParamEncaps(ok: Bool, outParams: Data) { + if outParams.isEmpty { + ostr.writeEmptyEncapsulation(current.encoding) + } else { + ostr.writeEncapsulation(outParams) + } + + responseCallback(ok, ostr.finished()) + } + + public func writeEmptyParams() { + ostr.writeEmptyEncapsulation(current.encoding) + response() + } + + public func response() { + guard locator == nil || servantLocatorFinished() else { + return + } + responseCallback(true, ostr.finished()) + } + + public func exception(_ ex: Error) { + guard locator == nil || servantLocatorFinished() else { + return + } + handleException(ex) + } + + public func setFormat(_ format: FormatType) { + self.format = format + } + + func servantLocatorFinished() -> Bool { + guard let locator = locator, let servant = servant else { + preconditionFailure() + } + + do { + try locator.finished(curr: current, servant: servant, cookie: cookie) + return true + } catch { + handleException(error) + } + + return false + } + + func invoke(_ servantManager: ServantManager) { + servant = servantManager.findServant(id: current.id, facet: current.facet) + + if servant == nil { + locator = servantManager.findServantLocator(category: current.id.category) + + if locator == nil, !current.id.category.isEmpty { + locator = servantManager.findServantLocator(category: "") + } + + if let locator = locator { + do { + let locatorReturn = try locator.locate(current) + (servant, cookie) = (locatorReturn.returnValue, locatorReturn.cookie) + } catch { + handleException(error) + return + } + } + } + + guard let s = servant else { + do { + if servantManager.hasServant(id: current.id) || servantManager.isAdminId(current.id) { + throw FacetNotExistException(id: current.id, facet: current.facet, operation: current.operation) + } else { + throw ObjectNotExistException(id: current.id, facet: current.facet, operation: current.operation) + } + } catch { + exceptionCallback(convertException(error)) + return + } + } + + // + // Dispatch in the incoming call + // + do { + try s.dispatch(request: self, current: current) + } catch { + exception(error) + } + } + + func handleException(_ exception: Error) { + guard let e = exception as? UserException else { + exceptionCallback(convertException(exception)) + return + } + ostr = OutputStream(communicator: istr.communicator, encoding: current.encoding) + ostr.startEncapsulation(encoding: current.encoding, format: format) + ostr.write(e) + ostr.endEncapsulation() + responseCallback(false, ostr.finished()) + } + + func convertException(_ exception: Error) -> ICERuntimeException { + // + // 1. run-time exceptions that travel over the wire + // 2. other LocalExceptions and UserExceptions + // 3. all other exceptions are LocalException + // + switch exception { + // 1. Known run-time exceptions + case let exception as ObjectNotExistException: + let e = ICEObjectNotExistException() + e.file = exception.file + e.line = Int32(exception.line) + e.name = exception.id.name + e.category = exception.id.category + e.facet = exception.facet + e.operation = exception.operation + return e + case let exception as FacetNotExistException: + let e = ICEFacetNotExistException() + e.file = exception.file + e.line = Int32(exception.line) + e.name = exception.id.name + e.category = exception.id.category + e.facet = exception.facet + e.operation = exception.operation + return e + case let exception as OperationNotExistException: + let e = ICEOperationNotExistException() + e.file = exception.file + e.line = Int32(exception.line) + e.name = exception.id.name + e.category = exception.id.category + e.facet = exception.facet + e.operation = exception.operation + return e + case let exception as UnknownUserException: + let e = ICEUnknownUserException() + e.file = exception.file + e.line = Int32(exception.line) + e.unknown = exception.unknown + return e + case let exception as UnknownLocalException: + let e = ICEUnknownLocalException() + e.file = exception.file + e.line = Int32(exception.line) + e.unknown = exception.unknown + return e + case let exception as UnknownException: + let e = ICEUnknownException() + e.file = exception.file + e.line = Int32(exception.line) + e.unknown = exception.unknown + return e + // 2. Other LocalExceptions and UserExceptions + case let exception as LocalException: + let e = ICEUnknownLocalException() + e.file = exception.file + e.line = Int32(exception.line) + e.unknown = "\(exception)" + return e + case let exception as UserException: + let e = ICEUnknownUserException() + e.unknown = "\(exception.ice_id())" + return e + // 3. Unknown exceptions + default: + let e = ICEUnknownException() + e.file = #file + e.line = Int32(#line) + e.unknown = "\(exception)" + return e + } + } +} diff --git a/swift/src/Ice/Info.plist b/swift/src/Ice/Info.plist new file mode 100644 index 00000000000..9668b463f36 --- /dev/null +++ b/swift/src/Ice/Info.plist @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>CFBundleDevelopmentRegion</key> + <string>$(DEVELOPMENT_LANGUAGE)</string> + <key>CFBundleExecutable</key> + <string>$(EXECUTABLE_NAME)</string> + <key>CFBundleIdentifier</key> + <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string> + <key>CFBundleInfoDictionaryVersion</key> + <string>6.0</string> + <key>CFBundleName</key> + <string>$(PRODUCT_NAME)</string> + <key>CFBundlePackageType</key> + <string>FMWK</string> + <key>CFBundleShortVersionString</key> + <string>$(CURRENT_PROJECT_VERSION)</string> + <key>CFBundleVersion</key> + <string>$(CURRENT_PROJECT_VERSION)</string> + <key>NSHumanReadableCopyright</key> + <string>Copyright © ZeroC, Inc. All rights reserved.</string> +</dict> +</plist> diff --git a/swift/src/Ice/InitializationData.swift b/swift/src/Ice/InitializationData.swift new file mode 100644 index 00000000000..76ecabc5da3 --- /dev/null +++ b/swift/src/Ice/InitializationData.swift @@ -0,0 +1,16 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +/// Settings optionally supplied during communicator initialization. +public struct InitializationData { + /// The properties for the communicator. + public var properties: Properties? + + /// The logger for the communicator. + public var logger: Logger? + + public var classResolverPrefix: [String]? + + public init() {} +} diff --git a/swift/src/Ice/Initialize.swift b/swift/src/Ice/Initialize.swift new file mode 100644 index 00000000000..1953e3a1443 --- /dev/null +++ b/swift/src/Ice/Initialize.swift @@ -0,0 +1,280 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import IceObjc + +// +// Factories are registered once when `factoriesRegistered' is lazzy initialized, +// all Swift global variables are lazzy initialized. +// +// All code paths that require the use of the factories before `initialize' is call +// should check `factoriesRegistered' to ensure lazzy initinialization occurrs before +// the factories are used. +// +internal let factoriesRegistered: Bool = { + ICEUtil.registerFactories(exception: ExceptionFactory.self, + connectionInfo: ConnectionInfoFactory.self, + endpointInfo: EndpointInfoFactory.self, + adminFacet: AdminFacetFactory.self) + return true +}() + +/// Creates a communicator. +/// +/// - parameter _: `[String]` - A command-line argument vector. Any Ice-related options +/// in this vector are used to initialize the communicator. +/// +/// - parameter initData: `Ice.InitializationData` - Additional intialization data. Property +/// settings in args override property settings in initData. +/// +/// - returns: The initialized communicator. +public func initialize(_ args: [String], initData: InitializationData? = nil) throws -> Communicator { + return try initializeImpl(args: args, initData: initData ?? InitializationData(), withConfigFile: true).0 +} + +/// Creates a communicator. +/// +/// - parameter _: `[String]` - A command-line argument vector. Any Ice-related options +/// in this vector are used to initialize the communicator. This method modifies the +/// argument vector by removing any Ice-related options. +/// +/// - parameter initData: `Ice.InitializationData` - Additional intialization data. Property +/// settings in args override property settings in initData. +/// +/// - returns: `Ice.Communicator` - The initialized communicator. +public func initialize(_ args: inout [String], initData: InitializationData? = nil) throws -> Communicator { + let result = try initializeImpl(args: args, initData: initData ?? InitializationData(), withConfigFile: true) + args = result.1 + return result.0 +} + +/// Creates a communicator. +/// +/// - parameter args: `[String]` - A command-line argument array. Any Ice-related options +/// in this array are used to initialize the communicator. +/// +/// - parameter configFile: `String` - Path to a config file that sets the new communicator's +/// default properties. +/// +/// - returns: `Ice.Communicator` - The initialized communicator. +public func initialize(args: [String], configFile: String) throws -> Communicator { + var initData = InitializationData() + let properties = createProperties() + try properties.load(configFile) + initData.properties = properties + return try initialize(args, initData: initData) +} + +/// Creates a communicator. +/// +/// - parameter args: `[String]` - A command-line argument array. Any Ice-related options +/// in this array are used to initialize the communicator. This method modifies the +/// argument array by removing any Ice-related options. +/// +/// - parameter configFile: `String` - Path to a config file that sets the new communicator's +/// default properties. +/// +/// - returns: `Ice.Communicator` - The initialized communicator. +public func initialize(args: inout [String], configFile: String) throws -> Communicator { + var initData = InitializationData() + let properties = createProperties() + try properties.load(configFile) + initData.properties = properties + return try initialize(&args, initData: initData) +} + +/// Creates a communicator. +/// +/// - parameter _: `Ice.InitializationData` - Additional intialization data. +/// +/// - returns: `Ice.Communicator` - The initialized communicator. +public func initialize(_ initData: InitializationData? = nil) throws -> Communicator { + // This is the no-configFile flavor: we never load config from ICE_CONFIG + return try initializeImpl(args: [], initData: initData ?? InitializationData(), withConfigFile: false).0 +} + +/// Creates a communicator. +/// +/// - parameter _: `String` - Path to a config file that sets the new communicator's default +/// properties. +/// +/// - returns: `Ice.Communicator` - The initialized communicator. +public func initialize(_ configFile: String) throws -> Communicator { + return try initialize(args: [], configFile: configFile) +} + +private func initializeImpl(args: [String], + initData userInitData: InitializationData, + withConfigFile: Bool) throws -> (Communicator, [String]) { + // Ensure factories are initialized + guard factoriesRegistered else { + fatalError("Unable to initialie Ice") + } + + var initData = userInitData + if initData.properties == nil { + initData.properties = createProperties() + } + + var loggerP: ICELoggerProtocol? + if let l = initData.logger { + loggerP = LoggerWrapper(handle: l) + } + + let propsHandle = (initData.properties as! PropertiesI).handle + + return try autoreleasepool { + var remArgs: NSArray? + let handle = try ICEUtil.initialize(args, + properties: propsHandle, + withConfigFile: withConfigFile, + logger: loggerP, + remArgs: &remArgs) + + // + // Update initData.properties reference to point to the properties object + // created by Ice::initialize, in case it changed + // + let newPropsHandle = handle.getProperties() + initData.properties = newPropsHandle.getSwiftObject(PropertiesI.self) { + PropertiesI(handle: newPropsHandle) + } + + // + // Update initData.logger referecnce in case we are using a C++ logger (defined though a property) or + // a C++ logger plug-in installed a new logger + // + if let objcLogger = handle.getLogger() as? ICELogger { + initData.logger = objcLogger.getSwiftObject(ObjcLoggerWrapper.self) { + ObjcLoggerWrapper(handle: objcLogger) + } + } + + precondition(initData.logger != nil && initData.properties != nil) + + let communicator = CommunicatorI(handle: handle, initData: initData) + if remArgs == nil { + return (communicator, []) + } else { + // swiftlint:disable force_cast + return (communicator, remArgs as! [String]) + } + } +} + +/// Creates a new empty property set. +/// +/// - returns: `Properties` - A new empty property set. +public func createProperties() -> Properties { + guard factoriesRegistered else { + fatalError("Unable to initialie Ice") + } + return PropertiesI(handle: ICEUtil.createProperties()) +} + +/// Creates a property set initialized from an argument array. +/// +/// - parameter _: `[String]` - A command-line argument array, possibly containing options to +/// set properties. If the command-line options include a `--Ice.Config` option, the +/// corresponding configuration files are parsed. If the same property is set in a configuration +/// file and in the argument array, the argument array takes precedence. +/// +/// - parameter defaults: `Ice.Properties` - Optional default values for the property set. Settings in +/// configuration files and argument array override these defaults. +/// +/// - returns: `Ice.Properties` - A new property set initialized with the property settings from the arguments +/// array and defaults. +public func createProperties(_ args: [String], defaults: Properties? = nil) throws -> Properties { + guard factoriesRegistered else { + fatalError("Unable to initialie Ice") + } + return try autoreleasepool { + let propertiesHandle = try ICEUtil.createProperties(args, + defaults: (defaults as? PropertiesI)?.handle, + remArgs: nil) + return PropertiesI(handle: propertiesHandle) + } +} + +/// Creates a property set initialized from an argument array. +/// +/// - parameter _: `[String]` - A command-line argument array, possibly containing options to +/// set properties. If the command-line options include a `--Ice.Config` option, the +/// corresponding configuration files are parsed. If the same property is set in a configuration +/// file and in the argument array, the argument array takes precedence. This method modifies the +/// argument array by removing any Ice-related options. +/// +/// - parameter defaults: `Ice.Properties` - Optional default values for the property set. Settings in +/// configuration files and argument array override these defaults. +/// +/// - returns: `Ice.Properties` - A new property set initialized with the property settings from args +/// and defaults. +public func createProperties(_ args: inout [String], defaults: Properties? = nil) throws -> Properties { + guard factoriesRegistered else { + fatalError("Unable to initialie Ice") + } + return try autoreleasepool { + var remArgs: NSArray? + let propertiesHandle = try ICEUtil.createProperties(args, + defaults: (defaults as? PropertiesI)?.handle, + remArgs: &remArgs) + + // swiftlint:disable force_cast + args = remArgs as! [String] + return PropertiesI(handle: propertiesHandle) + } +} + +/// Returns the Ice version as an integer in the form A.BB.CC, where A +/// indicates the major version, BB indicates the minor version, and CC +/// indicates the patch level. For example, for Ice 3.3.1, the returned +/// value is 30301. +public let intVersion: Int = 30761 + +/// The Ice version in the form A.B.C, where A indicates the major version, +/// B indicates the minor version, and C indicates the patch level. +public let stringVersion: String = "3.7b1" + +public let Encoding_1_0 = EncodingVersion(major: 1, minor: 0) +public let Encoding_1_1 = EncodingVersion(major: 1, minor: 1) + +public let currentEncoding = Encoding_1_1 + +/// Converts a string to an object identity. +/// +/// - parameter _: `String` - The string to convert. +/// +/// - returns: `Ice.Identity` - The converted object identity. +public func stringToIdentity(_ string: String) throws -> Identity { + guard factoriesRegistered else { + fatalError("Unable to initialie Ice") + } + return try autoreleasepool { + var name = NSString() + var category = NSString() + try ICEUtil.stringToIdentity(str: string, name: &name, category: &category) + return Identity(name: name as String, category: category as String) + } +} + +/// Converts an object identity to a string. +/// +/// - parameter id: `Ice.Identity` - The object identity to convert. +/// +/// - parameter mode: `ToStringMode` - Specifies if and how non-printable ASCII characters are escaped +/// in the result. +/// +/// - returns: `String` - The string representation of the object identity. +public func identityToString(id: Identity, mode: ToStringMode = ToStringMode.Unicode) -> String { + return ICEUtil.identityToString(name: id.name, category: id.category, mode: mode.rawValue) +} + +/// Converts an encoding version to a string. +/// +/// - parameter _: `Ice.EncodingVersion` - The encoding version to convert. +/// +/// - returns: `String` - The converted string. +public func encodingVersionToString(_ encoding: EncodingVersion) -> String { + return ICEUtil.encodingVersionToString(major: encoding.major, minor: encoding.minor) +} diff --git a/swift/src/Ice/InputStream.swift b/swift/src/Ice/InputStream.swift new file mode 100644 index 00000000000..b7c9aed304c --- /dev/null +++ b/swift/src/Ice/InputStream.swift @@ -0,0 +1,1839 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Foundation +import IceObjc + +/// Stream class to read (unmarshal) Slice types from a sequence of bytes. +public class InputStream { + let data: Data + let classResolverPrefix: [String]? + + private(set) var pos: Int = 0 + private(set) var communicator: Communicator + private let encoding: EncodingVersion + private let traceSlicing: Bool + + private var encaps: Encaps! + + private var startSeq: Int32 = -1 + private var minSeqSize: Int32 = 0 + private let classGraphDepthMax: Int32 + + private var remaining: Int { + return data.count - pos + } + + var currentEncoding: EncodingVersion { + return encaps != nil ? encaps.encoding : encoding + } + + public convenience init(communicator: Communicator, bytes: Data) { + let encoding = (communicator as! CommunicatorI).defaultsAndOverrides.defaultEncoding + self.init(communicator: communicator, encoding: encoding, bytes: bytes) + } + + public required init(communicator: Communicator, + encoding: EncodingVersion, + bytes: Data) { + self.communicator = communicator + self.encoding = encoding + data = bytes + traceSlicing = communicator.getProperties().getPropertyAsIntWithDefault(key: "Ice.Trace.Slicing", value: 0) > 0 + classGraphDepthMax = (communicator as! CommunicatorI).classGraphDepthMax + classResolverPrefix = (communicator as! CommunicatorI).initData.classResolverPrefix + } + + /// Reads an encapsulation from the stream. + /// + /// - returns: `(bytes: Data, encoding: EncodingVersion)` The encapsulation. + public func readEncapsulation() throws -> (bytes: Data, encoding: EncodingVersion) { + let sz: Int32 = try read() + if sz < 6 { + throw UnmarshalOutOfBoundsException(reason: "Invalid size") + } + + if sz - 4 > remaining { + throw UnmarshalOutOfBoundsException(reason: "Invalid size") + } + + let encoding: EncodingVersion = try read() + try changePos(offset: -6) + + let bytes = data[pos ..< pos + Int(sz)] + return (bytes, encoding) + } + + /// Reads the start of an encapsulation. + /// + /// - returns: `Ice.EncodingVersion` - The encapsulation encoding version. + @discardableResult + public func startEncapsulation() throws -> EncodingVersion { + precondition(encaps == nil, "Nested or sequential encapsulations are not supported") + + let start = pos + // + // I don't use readSize() and writeSize() for encapsulations, + // because when creating an encapsulation, I must know in advance + // how many bytes the size information will require in the data + // stream. If I use an Int, it is always 4 bytes. For + // readSize()/writeSize(), it could be 1 or 5 bytes. + // + let sz: Int32 = try read() + + if sz < 6 { + throw UnmarshalOutOfBoundsException(reason: "invalid size") + } + if sz - 4 > remaining { + throw UnmarshalOutOfBoundsException(reason: "invalid size") + } + + let encoding: EncodingVersion = try read() + + try checkSupportedEncoding(encoding) + + encaps = Encaps(start: start, size: Int(sz), encoding: encoding) + + return encoding + } + + /// Ends the previous encapsulation. + public func endEncapsulation() throws { + if !encaps.encoding_1_0 { + try skipOptionals() + if pos != encaps.start + encaps.sz { + throw EncapsulationException(reason: "buffer size does not match decoded encapsulation size") + } + } else if pos != encaps.start + encaps.sz { + if pos + 1 != encaps.start + encaps.sz { + throw EncapsulationException(reason: "buffer size does not match decoded encapsulation size") + } + + // + // Ice version < 3.3 had a bug where user exceptions with + // class members could be encoded with a trailing byte + // when dispatched with AMD. So we tolerate an extra byte + // in the encapsulation. + // + try skip(1) + } + } + + /// Skips an empty encapsulation. + /// + /// - returns: `Ice.EncodingVersion` - The encapsulation's encoding version. + @discardableResult + func skipEmptyEncapsulation() throws -> EncodingVersion { + let sz: Int32 = try read() + + if sz < 6 { + throw EncapsulationException(reason: "invalid size") + } + + if sz - 4 > remaining { + throw UnmarshalOutOfBoundsException(reason: "") + } + + let encoding: EncodingVersion = try read() + try checkSupportedEncoding(encoding) // Make sure the encoding is supported. + + if encoding == Encoding_1_0 { + if sz != 6 { + throw EncapsulationException(reason: "") + } + } else { + // + // Skip the optional content of the encapsulation if we are expecting an + // empty encapsulation. + // + try skip(sz - 6) + } + + return encoding + } + + /// Skips over an encapsulation. + /// + /// - returns: `Ice.EncodingVersion` - The encoding version of the skipped encapsulation. + func skipEncapsulation() throws -> EncodingVersion { + let sz: Int32 = try read() + + if sz < 6 { + throw EncapsulationException(reason: "invalid size") + } + + let encodingVersion: EncodingVersion = try read() + try changePos(offset: Int(sz) - 6) + return encodingVersion + } + + /// Reads the start of a class instance or exception slice. + /// + /// - returns: The Slice type ID for this slice. + @discardableResult + public func startSlice() throws -> String { + precondition(encaps.decoder != nil) + return try encaps.decoder.startSlice() + } + + /// Indicates that the end of a class instance or exception slice has been reached. + public func endSlice() throws { + precondition(encaps.decoder != nil) + try encaps.decoder.endSlice() + } + + /// Skips over a class instance or exception slice. + public func skipSlice() throws { + precondition(encaps.decoder != nil) + try encaps.decoder.skipSlice() + } + + /// Indicates that unmarshaling is complete, except for any class instances. The application must call this method + /// only if the stream actually contains class instances. Calling `readPendingValues` triggers the + /// calls to consumers provided with {@link #readValue} to inform the application that unmarshaling of an instance + /// is complete. + public func readPendingValues() throws { + if encaps.decoder != nil { + try encaps.decoder.readPendingValues() + } else if encaps.encoding_1_0 { + // + // If using the 1.0 encoding and no instances were read, we + // still read an empty sequence of pending instances if + // requested (i.e.: if this is called). + // + // This is required by the 1.0 encoding, even if no instances + // are written we do marshal an empty sequence if marshaled + // data types use classes. + // + try skipSize() + } + } + + /// Extracts a user exception from the stream and throws it. + public func throwException() throws { + initEncaps() + try encaps.decoder.throwException() + } + + func skipOptional(format: OptionalFormat) throws { + switch format { + case .F1: + try skip(1) + case .F2: + try skip(2) + case .F4: + try skip(4) + case .F8: + try skip(8) + case .Size: + try skipSize() + case .VSize: + try skip(readSize()) + case .FSize: + try skip(read()) + case .Class: + try read(UnknownSlicedValue.self, cb: nil) + } + } + + func skipOptionals() throws { + // + // Skip remaining un-read optional members. + // + while true { + if pos >= encaps.start + encaps.sz { + return // End of encapsulation also indicates end of optionals. + } + + let v: UInt8 = try read() + if v == SliceFlags.OPTIONAL_END_MARKER.rawValue { + return + } + + // Read first 3 bits. + guard let format = OptionalFormat(rawValue: v & 0x07) else { + preconditionFailure("invalid optional format") + } + + if v >> 3 == 30 { + try skipSize() + } + + try skipOptional(format: format) + } + } + + private func changePos(offset: Int) throws { + precondition(pos + offset >= 0, "Negative position") + + guard offset <= remaining else { + throw UnmarshalOutOfBoundsException(reason: "Attempt to move past end of buffer") + } + pos += offset + } + + /// Skips the given number of bytes. + /// + /// - parameter _: `Int` - The number of bytes to skip. + public func skip(_ count: Int) throws { + precondition(count >= 0, "skip count is negative") + try changePos(offset: count) + } + + /// Skips the given number of bytes. + /// + /// - parameter _: `Int32` - The number of bytes to skip. + public func skip(_ count: Int32) throws { + try changePos(offset: Int(count)) + } + + /// Skip over a size value. + public func skipSize() throws { + let b: UInt8 = try read() + if b == 255 { + try skip(4) + } + } + + /// Marks the start of a class instance. + public func startValue() { + precondition(encaps.decoder != nil) + encaps.decoder.startInstance(type: .ValueSlice) + } + + /// Marks the end of a class instance. + /// + /// - parameter preserve: `Bool` - True if unknown slices should be preserved, false otherwise. + /// + /// - returns: `Ice.SlicedData` - A SlicedData object containing the preserved slices for unknown types. + @discardableResult + public func endValue(preserve: Bool) throws -> SlicedData? { + precondition(encaps.decoder != nil) + return try encaps.decoder.endInstance(preserve: preserve) + } + + /// Marks the start of a user exception. + public func startException() { + precondition(encaps.decoder != nil) + encaps.decoder.startInstance(type: .ExceptionSlice) + } + + /// Marks the end of a user exception. + /// + /// - parameter preserve: `Bool` - True if unknown slices should be preserved, false otherwise. + /// + /// - returns: `Ice.SlicedData?` - A `SlicedData` object containing the preserved slices for unknown + /// types. + @discardableResult + public func endException(preserve: Bool) throws -> SlicedData? { + precondition(encaps.decoder != nil) + return try encaps.decoder.endInstance(preserve: preserve) + } + + func initEncaps() { + if encaps == nil { + encaps = Encaps(start: 0, size: data.count, encoding: encoding) + } + if encaps.decoder == nil { // Lazy initialization + let valueFactoryManager = communicator.getValueFactoryManager() + if encaps.encoding_1_0 { + encaps.decoder = EncapsDecoder10(stream: self, + valueFactoryManager: valueFactoryManager, + classGraphDepthMax: classGraphDepthMax) + } else { + encaps.decoder = EncapsDecoder11(stream: self, + valueFactoryManager: valueFactoryManager, + classGraphDepthMax: classGraphDepthMax) + } + } + } + + fileprivate func traceSkipSlice(typeId: String, sliceType: SliceType) { + guard traceSlicing else { + return + } + + ICETraceUtil.traceSlicing(kind: sliceType == SliceType.ExceptionSlice ? "exception" : "object", + typeId: typeId, + slicingCat: "Slicing", + logger: LoggerWrapper(handle: communicator.getLogger())) + } + + static func throwUOE(expectedType: Value.Type, v: Value) throws { + // + // If the object is an unknown sliced object, we didn't find an + // value factory, in this case raise a NoValueFactoryException + // instead. + // + if let usv = v as? UnknownSlicedValue { + throw NoValueFactoryException(reason: "", type: usv.ice_id()) + } + + throw UnexpectedObjectException(reason: "expected element of type `\(expectedType)' but received `\(v)'", + type: v.ice_id(), + expectedType: expectedType.ice_staticId()) + } +} + +public extension InputStream { + /// Reads a numeric value from the stream. + /// + /// - returns: `Element` - The numeric value read from the stream. + func read<Element>() throws -> Element where Element: StreamableNumeric { + let size = MemoryLayout<Element>.size + guard size <= remaining else { + throw UnmarshalOutOfBoundsException(reason: "attempting to read past buffer capacity") + } + + var value: Element = 0 + // We assume a little-endian platform + withUnsafeMutablePointer(to: &value) { ptr in + let buf = UnsafeMutableBufferPointer(start: ptr, count: 1) + self.data.copyBytes(to: buf, from: self.pos ..< self.pos + size) + } + pos += size + return value + } + + /// Reads an optional numeric value from the stream. + /// + /// - parameter tag: `Int32` - The tag of the optional data member or parameter. + /// + /// - returns: `Element?` - The optional numeric value read from the stream. + func read<Element>(tag: Int32) throws -> Element? where Element: StreamableNumeric { + let expectedFormat = OptionalFormat(fixedSize: MemoryLayout<Element>.size) + guard try readOptional(tag: tag, expectedFormat: expectedFormat!) else { + return nil + } + return try read() + } + + /// Reads a sequence of numeric values from the stream. + /// + /// - returns: `[Element]` - The sequence of numeric values read from the stream. + func read<Element>() throws -> [Element] where Element: StreamableNumeric { + let sz = try readAndCheckSeqSize(minSize: MemoryLayout<Element>.size) + + if sz == 0 { + return [Element]() + } else { + let eltSize = MemoryLayout<Element>.size + if sz == 1 || eltSize == MemoryLayout<Element>.stride { + // Can copy directly from bytes to array + var a = [Element](repeating: 0, count: sz) + pos += a.withUnsafeMutableBufferPointer { buf in + self.data.copyBytes(to: buf, from: self.pos ..< self.pos + sz * eltSize) + } + return a + } else { + var a = [Element]() + a.reserveCapacity(sz) + for _ in 0 ..< sz { + try a.append(read()) + } + return a + } + } + } + + /// Reads an optional sequence of numeric values from the stream. + /// + /// - parameter tag: `Int32` - The tag of the optional data member or parameter. + /// + /// - returns: `[Element]?` - The optional sequence read from the stream. + func read<Element>(tag: Int32) throws -> [Element]? where Element: StreamableNumeric { + guard try readOptional(tag: tag, expectedFormat: .VSize) else { + return nil + } + if MemoryLayout<Element>.size > 1 { + try skipSize() + } + return try read() + } + + /// Reads a byte from the stream. + /// + /// - returns: `UInt8` - The byte read from the stream. + func read() throws -> UInt8 { + guard remaining > 0 else { + throw UnmarshalOutOfBoundsException(reason: "attempting to read past buffer capacity") + } + let value = data[pos] + pos += 1 + return value + } + + /// Reads a sequence of bytes from the stream. + /// + /// - returns: `[UInt8]` - The sequence of bytes read from the stream. + func read() throws -> [UInt8] { + let sz = try readAndCheckSeqSize(minSize: 1) + let start = pos + pos += sz + return [UInt8](data[start ..< pos]) + } + + /// Reads a sequence of bytes from the stream. + /// + /// - returns: `Data` - The sequence of bytes read from the stream. + func read() throws -> Data { + let sz = try readAndCheckSeqSize(minSize: 1) + let start = pos + pos += sz + return data.subdata(in: start ..< pos) // copy + } + + /// Reads an optional sequence of bytes from the stream. + /// + /// - parameter tag: `Int32` - The tag of the optional data member or parameter. + /// + /// - returns: `Data?` - The optional sequence of bytes read from the stream. + func read(tag: Int32) throws -> Data? { + guard try readOptional(tag: tag, expectedFormat: .VSize) else { + return nil + } + // No skipSize here + return try read() + } + + /// Reads a boolean value from the stream. + /// + /// - returns: `Bool` - The boolean value read from the stream. + func read() throws -> Bool { + let value: UInt8 = try read() + return value == 1 + } + + /// Reads an optional boolean value from the stream. + /// + /// - parameter tag: `Int32` - The tag of the optional data member or parameter. + /// + /// - returns: `Bool?` - The optional boolean value read from the stream. + func read(tag: Int32) throws -> Bool? { + guard try readOptional(tag: tag, expectedFormat: .F1) else { + return nil + } + return try read() as Bool + } + + /// Reads a sequence of boolean value from the stream. + /// + /// - returns: `[Bool]` - The sequence of boolean values read from the stream. + func read() throws -> [Bool] { + let sz = try readAndCheckSeqSize(minSize: 1) + + if sz == 0 { + return [Bool]() + } else if MemoryLayout<Bool>.size == 1, MemoryLayout<Bool>.stride == 1 { + // Copy directly from bytes to array + var a = [Bool](repeating: false, count: sz) + pos += a.withUnsafeMutableBufferPointer { buf in + self.data.copyBytes(to: buf, from: self.pos ..< self.pos + sz) + } + return a + } else { + fatalError("Unsupported Bool memory layout") + } + } + + /// Reads an optional sequence of boolean value from the stream. + /// + /// - parameter tag: `Int32` - The tag of the optional data member or parameter. + /// + /// - returns: `[Bool]?` - The optional sequence of boolean values read from the stream. + func read(tag: Int32) throws -> [Bool]? { + guard try readOptional(tag: tag, expectedFormat: .VSize) else { + return nil + } + return try read() + } + + /// Reads a size from the stream. + /// + /// - returns: `Int32` - The size read from the stream. + func readSize() throws -> Int32 { + let byteVal: UInt8 = try read() + if byteVal == 255 { + return try read() + } else { + return Int32(byteVal) + } + } + + /// Reads a sequence size from the stream and ensures the stream has enough + /// bytes for `size` elements, where each element's size is at least minSize. + /// + /// - parameter minSize: `Int` - The mininum element size to use for the check. + /// + /// - returns: `Int` - The size read from the stream. + func readAndCheckSeqSize(minSize: Int) throws -> Int { + let sz = try Int(readSize()) + + guard sz != 0 else { + return sz + } + + // + // The startSeq variable points to the start of the sequence for which + // we expect to read at least minSeqSize bytes from the stream. + // + // If not initialized or if we already read more data than minSeqSize, + // we reset startSeq and minSeqSize for this sequence (possibly a + // top-level sequence or enclosed sequence it doesn't really matter). + // + // Otherwise, we are reading an enclosed sequence and we have to bump + // minSeqSize by the minimum size that this sequence will require on + // the stream. + // + // The goal of this check is to ensure that when we start un-marshalling + // a new sequence, we check the minimal size of this new sequence against + // the estimated remaining buffer size. This estimatation is based on + // the minimum size of the enclosing sequences, it's minSeqSize. + // + if startSeq == -1 || pos > (startSeq + minSeqSize) { + startSeq = Int32(pos) + minSeqSize = Int32(sz * minSize) + } else { + minSeqSize += Int32(sz * minSize) + } + + // + // If there isn't enough data to read on the stream for the sequence (and + // possibly enclosed sequences), something is wrong with the marshalled + // data: it's claiming having more data that what is possible to read. + // + if startSeq + minSeqSize > data.count { + throw UnmarshalOutOfBoundsException(reason: "bad sequence size") + } + + return sz + } + + // + // Optional + // + func readOptional(tag: Int32, expectedFormat: OptionalFormat) throws -> Bool { + if encaps.decoder != nil { + return try encaps.decoder.readOptional(tag: tag, format: expectedFormat) + } + + return try readOptionalImpl(readTag: tag, expectedFormat: expectedFormat) + } + + internal func readOptionalImpl(readTag: Int32, expectedFormat: OptionalFormat) throws -> Bool { + if encaps.encoding_1_0 { + return false // Optional members aren't supported with the 1.0 encoding. + } + + while true { + if pos >= encaps.start + encaps.sz { + return false // End of encapsulation also indicates end of optionals. + } + + let v: UInt8 = try read() + if v == SliceFlags.OPTIONAL_END_MARKER.rawValue { + try changePos(offset: -1) // Rewind + return false + } + + // First 3 bits. + guard let format = OptionalFormat(rawValue: v & 0x07) else { + throw MarshalException(reason: "invalid optional format") + } + var tag = Int32(v >> 3) + if tag == 30 { + tag = try readSize() + } + + if tag > readTag { + let offset = tag < 30 ? -1 : (tag < 255 ? -2 : -6) // Rewind + try changePos(offset: offset) + return false // No optional data members with the requested tag + } else if tag < readTag { + try skipOptional(format: format) // Skip optional data members + } else { + if format != expectedFormat { + throw MarshalException(reason: "invalid optional data member `\(tag)': unexpected format") + } + return true + } + } + } + + /// Reads an enumerator from the stream, as a byte. + /// + /// - parameter enumMaxValue: `Int32` - The maximum value for the enumerators (used only for the 1.0 encoding). + /// + /// - returns: `UInt8` - The enumerator's byte value. + func read(enumMaxValue: Int32) throws -> UInt8 { + if currentEncoding == Encoding_1_0 { + if enumMaxValue < 127 { + return try read() + } else if enumMaxValue < 32767 { + let v: Int16 = try read() + guard v <= UInt8.max else { + throw UnmarshalOutOfBoundsException(reason: "1.0 encoded enum value is larger than UInt8") + } + return UInt8(v) + } else { + let v: Int32 = try read() + guard v <= UInt8.max else { + throw UnmarshalOutOfBoundsException(reason: "1.0 encoded enum value is larger than UInt8") + } + return UInt8(v) + } + } else { + let v = try readSize() + guard v <= UInt8.max else { + throw UnmarshalOutOfBoundsException(reason: "1.1 encoded enum value is larger than UInt8") + } + return UInt8(v) + } + } + + /// Reads an enumerator from the stream, as a Int32. + /// + /// - parameter enumMaxValue: `Int32` - The maximum value for the enumerators (used only for the 1.0 encoding). + /// + /// - returns: `Int32` - The enumerator's Int32 value. + func read(enumMaxValue: Int32) throws -> Int32 { + if currentEncoding == Encoding_1_0 { + if enumMaxValue < 127 { + return Int32(try read() as UInt8) + } else if enumMaxValue < 32767 { + return Int32(try read() as Int16) + } else { + return try read() + } + } else { + return try readSize() + } + } + + /// Reads a string from the stream. + /// + /// - returns: `String` - The string read from the stream. + func read() throws -> String { + let size = try readSize() + if size == 0 { + return "" + } else { + let start = pos + try skip(size) + let end = pos + guard let str = String(data: data[start ..< end], encoding: .utf8) else { + throw MarshalException(reason: "unable to read string") + } + return str + } + } + + /// Reads an optional string from the stream. + /// + /// - parameter tag: `Int32` - The tag of the optional data member or parameter. + /// + /// - returns: `String?` - The optional string read from the stream. + func read(tag: Int32) throws -> String? { + guard try readOptional(tag: tag, expectedFormat: .VSize) else { + return nil + } + return try read() as String + } + + /// Reads a sequence of strings from the stream. + /// + /// - returns: `[String]` - The sequence of strings read from the stream. + func read() throws -> [String] { + let sz = try readAndCheckSeqSize(minSize: 1) + var r: [String] = [String]() + r.reserveCapacity(sz) + for _ in 0 ..< sz { + r.append(try read()) + } + return r + } + + /// Reads an optional sequence of strings from the stream. + /// + /// - parameter tag: `Int32` - The tag of the optional data member or parameter. + /// + /// - returns: `[String]?` - The optional sequence of strings read from the stream. + func read(tag: Int32) throws -> [String]? { + guard try readOptional(tag: tag, expectedFormat: .FSize) else { + return nil + } + try skip(4) + return try read() as [String] + } + + /// Reads a proxy from the stream (internal helper). + /// + /// - returns: `ProxyImpl?` - The proxy read from the stream. + func read<ProxyImpl>() throws -> ProxyImpl? where ProxyImpl: ObjectPrxI { + return try ProxyImpl.ice_read(from: self) + } + + /// Reads an optional proxy from the stream (internal helper). + /// + /// - parameter tag: `Int32` - The tag of the optional data member or parameter. + /// + /// - returns: `ProxyImpl?` - The proxy read from the stream. + func read<ProxyImpl>(tag: Int32) throws -> ProxyImpl? where ProxyImpl: ObjectPrxI { + guard try readOptional(tag: tag, expectedFormat: .FSize) else { + return nil + } + try skip(4) + return try read() as ProxyImpl? + } + + /// Reads a base proxy from the stream. + /// + /// - returns: `ObjectPrx?` - The proxy read from the stream. + func read(_: ObjectPrx.Protocol) throws -> ObjectPrx? { + return try read() as ObjectPrxI? + } + + /// Reads an optional base proxy from the stream. + /// + /// - parameter tag: `Int32` - The tag of the optional data member or parameter. + /// + /// - returns: `ObjectPrx?` - The proxy read from the stream. + func read(tag: Int32, type _: ObjectPrx.Protocol) throws -> ObjectPrx? { + return try read(tag: tag) as ObjectPrxI? + } + + /// Reads a value from the stream. + func read(cb: ((Value?) throws -> Void)?) throws { + initEncaps() + try encaps.decoder.readValue(cb: cb) + } + + /// Reads an optional value from the stream. + func read(tag: Int32, cb: ((Value?) throws -> Void)?) throws { + if try readOptional(tag: tag, expectedFormat: .Class) { + try read(cb: cb) + } + } + + /// Reads a value from the stream. + func read<ValueType>(_ value: ValueType.Type, cb: ((ValueType?) -> Void)?) throws where ValueType: Value { + initEncaps() + if let cb = cb { + try encaps.decoder.readValue { v in + if v == nil || v is ValueType { + cb(v as? ValueType) + } else { + try InputStream.throwUOE(expectedType: value, v: v!) + } + } + } else { + try encaps.decoder.readValue(cb: nil) + } + } + + /// Reads an optional value from the stream. + func read<ValueType>(tag: Int32, value: ValueType.Type, cb: ((ValueType?) -> Void)?) throws where ValueType: Value { + if try readOptional(tag: tag, expectedFormat: .Class) { + try read(value, cb: cb) + } + } +} + +private class Encaps { + let start: Int + let sz: Int + let encoding: EncodingVersion + let encoding_1_0: Bool + var decoder: EncapsDecoder! + + init(start: Int, size: Int, encoding: EncodingVersion) { + self.start = start + sz = size + self.encoding = encoding + encoding_1_0 = encoding == Ice.Encoding_1_0 + } +} + +private enum SliceType { + case NoSlice + case ValueSlice + case ExceptionSlice +} + +private typealias Callback = (Value?) throws -> Void + +private struct PatchEntry { + let cb: Callback + let classGraphDepth: Int32 + + fileprivate init(cb: @escaping Callback, classGraphDepth: Int32) { + self.cb = cb + self.classGraphDepth = classGraphDepth + } +} + +private protocol EncapsDecoder: AnyObject { + var stream: InputStream { get } + var valueFactoryManager: ValueFactoryManager { get } + + // + // Encapsulation attributes for value unmarshaling. + // + var patchMap: [Int32: [PatchEntry]] { get set } + var unmarshaledMap: [Int32: Value] { get set } + var typeIdMap: [Int32: String] { get set } + var typeIdIndex: Int32 { get set } + var valueList: [Value] { get set } + + var typeIdCache: [String: Value.Type?] { get set } + + var classGraphDepthMax: Int32 { get } + var classGraphDepth: Int32 { get set } + + func readValue(cb: Callback?) throws + func throwException() throws + + func startInstance(type: SliceType) + func endInstance(preserve: Bool) throws -> SlicedData? + func startSlice() throws -> String + func endSlice() throws + func skipSlice() throws + + func readOptional(tag: Int32, format: OptionalFormat) throws -> Bool + func readPendingValues() throws +} + +extension EncapsDecoder { + func readOptional(tag _: Int32, format _: OptionalFormat) throws -> Bool { + return false + } + + func readPendingValues() throws {} + + func readTypeId(isIndex: Bool) throws -> String { + if isIndex { + let index = try stream.readSize() + guard let typeId = typeIdMap[index] else { + throw UnmarshalOutOfBoundsException(reason: "invalid typeId") + } + return typeId + } else { + let typeId: String = try stream.read() + typeIdIndex += 1 + typeIdMap[typeIdIndex] = typeId + return typeId + } + } + + func resolveClass(typeId: String) throws -> Value.Type? { + if let cls = typeIdCache[typeId] { + return cls + } else { + var cls: Value.Type? + for prefix in stream.classResolverPrefix ?? [] { + cls = ClassResolver.resolve(typeId: typeId, prefix: prefix) + if cls != nil { + break + } + } + if cls == nil { + cls = ClassResolver.resolve(typeId: typeId) + } + typeIdCache[typeId] = cls + return cls + } + } + + func newInstance(typeId: String) throws -> Value? { + // + // Try to find a factory registered for the specific type. + // + if let factory = valueFactoryManager.find(typeId) { + if let v = factory(typeId) { + return v + } + } + + // + // If that fails, invoke the default factory if one has been + // registered. + // + if let factory = valueFactoryManager.find("") { + if let v = factory(typeId) { + return v + } + } + + // + // Last chance: try to instantiate the class dynamically. + // + if let cls = try resolveClass(typeId: typeId) { + return cls.init() + } + + return nil + } + + func addPatchEntry(index: Int32, cb: @escaping Callback) throws { + precondition(index > 0, "invalid index") + + // + // Check if we have already unmarshalled the instance. If that's the case, + // just invoke the callback and we're done. + // + if let obj: Value = unmarshaledMap[index] { + try cb(obj) + return + } + + // + // Add patch entry if the instance isn't unmarshaled yet, + // the callback will be called when the instance is + // unmarshaled. + // + var entries = patchMap[index] ?? [] + entries.append(PatchEntry(cb: cb, classGraphDepth: classGraphDepth)) + patchMap[index] = entries + } + + func unmarshal(index: Int32, v: Value) throws { + // + // Add the instance to the map of unmarshaled instances, this must + // be done before reading the instances (for circular references). + // + unmarshaledMap[index] = v + + // + // Read the instance. + // + try v._iceRead(from: stream) + + // + // Patch all instances now that the instance is unmarshaled. + // + if let l = patchMap[index] { + precondition(!l.isEmpty) + + // + // Patch all pointers that refer to the instance. + // + for entry in l { + try entry.cb(v) + } + + // + // Clear out the patch map for that index -- there is nothing left + // to patch for that index for the time being. + // + patchMap.removeValue(forKey: index) + } + + if patchMap.isEmpty, valueList.isEmpty { + v.ice_postUnmarshal() + } else { + valueList.append(v) + + if patchMap.isEmpty { + // + // Iterate over the instance list and invoke ice_postUnmarshal on + // each instance. We must do this after all instances have been + // unmarshaled in order to ensure that any instance data members + // have been properly patched. + // + for p in valueList { + p.ice_postUnmarshal() + } + valueList.removeAll() + } + } + } +} + +private class EncapsDecoder10: EncapsDecoder { + // EncapsDecoder members + unowned let stream: InputStream + let valueFactoryManager: ValueFactoryManager + lazy var patchMap = [Int32: [PatchEntry]]() + lazy var unmarshaledMap = [Int32: Value]() + lazy var typeIdMap = [Int32: String]() + var typeIdIndex: Int32 = 0 + lazy var valueList = [Value]() + lazy var typeIdCache = [String: Value.Type?]() + + // Value/exception attributes + var sliceType: SliceType + var skipFirstSlice: Bool! + + // Slice attributes + var sliceSize: Int32! + var typeId: String! + + let classGraphDepthMax: Int32 + var classGraphDepth: Int32 + + init(stream: InputStream, valueFactoryManager: ValueFactoryManager, classGraphDepthMax: Int32) { + self.stream = stream + self.valueFactoryManager = valueFactoryManager + sliceType = SliceType.NoSlice + self.classGraphDepthMax = classGraphDepthMax + classGraphDepth = 0 + } + + func readValue(cb: Callback?) throws { + guard let cb = cb else { + preconditionFailure("patch fuction can not be nil") + } + + // + // Object references are encoded as a negative integer in 1.0. + // + var index: Int32 = try stream.read() + if index > 0 { + throw MarshalException(reason: "invalid object id") + } + index = -index + + if index == 0 { + try cb(nil) + } else { + try addPatchEntry(index: index, cb: cb) + } + } + + func throwException() throws { + precondition(sliceType == .NoSlice) + + // + // User exception with the 1.0 encoding start with a boolean flag + // that indicates whether or not the exception has classes. + // + // This allows reading the pending instances even if some part of + // the exception was sliced. + // + + let usesClasses: Bool = try stream.read() + + sliceType = .ExceptionSlice + skipFirstSlice = false + + // + // Read the first slice header. + // + try startSlice() + let mostDerivedId = typeId! + + while true { + // + // Look for user exception + // + var userExceptionType: UserException.Type? + for prefix in stream.classResolverPrefix ?? [] { + userExceptionType = ClassResolver.resolve(typeId: typeId, prefix: prefix) + if userExceptionType != nil { + break + } + } + if userExceptionType == nil { + userExceptionType = ClassResolver.resolve(typeId: typeId) + } + + // + // We found the exception. + // + if let type = userExceptionType { + let ex = type.init() + try ex._iceRead(from: stream) + if usesClasses { + try readPendingValues() + } + throw ex + } + + // + // Slice off what we don't understand. + // + try skipSlice() + do { + try startSlice() + } catch let ex as UnmarshalOutOfBoundsException { + // + // An oversight in the 1.0 encoding means there is no marker to indicate + // the last slice of an exception. As a result, we just try to read the + // next type ID, which raises UnmarshalOutOfBoundsException when the + // input buffer underflows. + // + // Set the reason member to a more helpful message. + // + + ex.reason = "unknown exception type `\(mostDerivedId)'" + throw ex + } + } + } + + func startInstance(type: SliceType) { + precondition(sliceType == type) + skipFirstSlice = true + } + + func endInstance(preserve _: Bool) throws -> SlicedData? { + // + // Read the Ice::Value slice. + // + if sliceType == .ValueSlice { + try startSlice() + let sz = try stream.readSize() // For compatibility with the old AFM. + if sz != 0 { + throw MarshalException(reason: "invalid Object slice") + } + try endSlice() + } + + sliceType = .NoSlice + return nil + } + + @discardableResult + func startSlice() throws -> String { + // + // If first slice, don't read the header, it was already read in + // readInstance or throwException to find the factory. + // + if skipFirstSlice { + skipFirstSlice = false + return typeId + } + + // + // For class instances, first read the type ID boolean which indicates + // whether or not the type ID is encoded as a string or as an + // index. For exceptions, the type ID is always encoded as a + // string. + // + if sliceType == .ValueSlice { + let isIndex: Bool = try stream.read() + typeId = try readTypeId(isIndex: isIndex) + } else { + typeId = try stream.read() + } + + sliceSize = try stream.read() + if sliceSize < 4 { + throw UnmarshalOutOfBoundsException(reason: "invalid slice size") + } + return typeId + } + + func endSlice() throws {} + + func skipSlice() throws { + stream.traceSkipSlice(typeId: typeId, sliceType: sliceType) + try stream.skip(sliceSize - 4) + } + + func readPendingValues() throws { + var num: Int32 + repeat { + num = try stream.readSize() + for _ in 0 ..< num { + try readInstance() + } + } while num > 0 + + if !patchMap.isEmpty { + // + // If any entries remain in the patch map, the sender has sent an index for an object, but failed + // to supply the object. + // + throw MarshalException(reason: "index for class received, but no instance") + } + } + + func readInstance() throws { + let index: Int32 = try stream.read() + + if index <= 0 { + throw MarshalException(reason: "invalid object id") + } + + sliceType = SliceType.ValueSlice + skipFirstSlice = false + + // + // Read the first slice header. + // + try startSlice() + let mostDerivedId = typeId! + var v: Value! + + while true { + // + // For the 1.0 encoding, the type ID for the base Object class + // marks the last slice. + // + if typeId == "::Ice::Object" { + throw NoValueFactoryException(reason: "invalid typeId", type: mostDerivedId) + } + + v = try newInstance(typeId: typeId) + + // + // We found a factory, we get out of this loop. + // + if v != nil { + break + } + + // + // Slice off what we don't understand. + // + try skipSlice() + try startSlice() // Read next Slice header for next iteration. + } + + // + // Compute the biggest class graph depth of this object. To compute this, + // we get the class graph depth of each ancestor from the patch map and + // keep the biggest one. + // + classGraphDepth = 0 + if let l = patchMap[index] { + precondition(l.count > 0) + classGraphDepth = l.reduce(0) { max($0, $1.classGraphDepth) } + } + classGraphDepth += 1 + if classGraphDepth > classGraphDepthMax { + throw MarshalException(reason: "maximum class graph depth reached") + } + + // + // Unmarshal the instance and add it to the map of unmarshaled instances. + // + try unmarshal(index: index, v: v) + } +} + +private class EncapsDecoder11: EncapsDecoder { + // EncapsDecoder members + unowned let stream: InputStream + let valueFactoryManager: ValueFactoryManager + lazy var patchMap = [Int32: [PatchEntry]]() + lazy var unmarshaledMap = [Int32: Value]() + lazy var typeIdMap = [Int32: String]() + var typeIdIndex: Int32 = 0 + lazy var valueList = [Value]() + lazy var typeIdCache = [String: Value.Type?]() + + let classGraphDepthMax: Int32 + var classGraphDepth: Int32 + + private var current: InstanceData! + var valueIdIndex: Int32 = 1 // The ID of the next instance to unmarshal. + lazy var compactIdCache = [Int32: Value.Type]() // Cache of compact type IDs. + + private struct IndirectPatchEntry { + var index: Int32 + var cb: Callback + + init(index: Int32, cb: @escaping Callback) { + self.index = index + self.cb = cb + } + } + + private class InstanceData { + // Instance attributes + var sliceType: SliceType! + var skipFirstSlice: Bool! + lazy var slices = [SliceInfo]() // Preserved slices. + lazy var indirectionTables = [[Int32]]() + + // Slice attributes + var sliceFlags: SliceFlags! + var sliceSize: Int32! + var typeId: String! + var compactId: Int32! + lazy var indirectPatchList = [IndirectPatchEntry]() + + let previous: InstanceData? + var next: InstanceData? + + init(previous: InstanceData?) { + self.previous = previous + next = nil + + previous?.next = self + } + } + + init(stream: InputStream, valueFactoryManager: ValueFactoryManager, classGraphDepthMax: Int32) { + self.stream = stream + self.valueFactoryManager = valueFactoryManager + self.classGraphDepthMax = classGraphDepthMax + classGraphDepth = 0 + } + + func readValue(cb: Callback?) throws { + let index = try stream.readSize() + if index < 0 { + throw MarshalException(reason: "invalid object id") + } else if index == 0 { + try cb?(nil) + } else if current != nil, current.sliceFlags.contains(.FLAG_HAS_INDIRECTION_TABLE) { + // + // When reading a class instance within a slice and there's an + // indirect instance table, always read an indirect reference + // that points to an instance from the indirect instance table + // marshaled at the end of the Slice. + // + // Maintain a list of indirect references. Note that the + // indirect index starts at 1, so we decrement it by one to + // derive an index into the indirection table that we'll read + // at the end of the slice. + // + if let cb = cb { + current.indirectPatchList.append(IndirectPatchEntry(index: index - 1, cb: cb)) + } + } else { + _ = try readInstance(index: index, cb: cb) + } + } + + func throwException() throws { + precondition(current == nil) + + push(sliceType: .ExceptionSlice) + // + // Read the first slice header. + // + try startSlice() + let mostDerivedId = current.typeId! + while true { + // + // Look for user exception + // + var userExceptionType: UserException.Type? + for prefix in stream.classResolverPrefix ?? [] { + userExceptionType = ClassResolver.resolve(typeId: current.typeId, prefix: prefix) + if userExceptionType != nil { + break + } + } + if userExceptionType == nil { + userExceptionType = ClassResolver.resolve(typeId: current.typeId) + } + + // + // We found the exception. + // + if let userEx = userExceptionType { + let ex = userEx.init() + try ex._iceRead(from: stream) + throw ex + } + + // + // Slice off what we don't understand. + // + try skipSlice() + + if current.sliceFlags.contains(.FLAG_IS_LAST_SLICE) { + if let range = mostDerivedId.range(of: "::") { + throw UnknownUserException(unknown: String(mostDerivedId[range.upperBound...])) + } else { + throw UnknownUserException(unknown: mostDerivedId) + } + } + + try startSlice() + } + } + + func startInstance(type: SliceType) { + precondition(current.sliceType == type) + current.skipFirstSlice = true + } + + func endInstance(preserve: Bool) throws -> SlicedData? { + var slicedData: SlicedData? + if preserve { + slicedData = try readSlicedData() + } + + current.slices.removeAll() + current.indirectionTables.removeAll() + + current = current.previous + return slicedData + } + + @discardableResult + func startSlice() throws -> String { + // + // If first slice, don't read the header, it was already read in + // readInstance or throwException to find the factory. + // + if current.skipFirstSlice { + current.skipFirstSlice = false + return current.typeId + } + + current.sliceFlags = try SliceFlags(rawValue: stream.read()) + + // + // Read the type ID, for value slices the type ID is encoded as a + // string or as an index, for exceptions it's always encoded as a + // string. + // + if current.sliceType == .ValueSlice { + // Must be checked 1st! + if current.sliceFlags.contains(.FLAG_HAS_TYPE_ID_COMPACT) { + current.typeId = "" + current.compactId = try stream.readSize() + } else if current.sliceFlags.contains(.FLAG_HAS_TYPE_ID_INDEX) || + current.sliceFlags.contains(.FLAG_HAS_TYPE_ID_STRING) { + current.typeId = try readTypeId(isIndex: current.sliceFlags.contains(.FLAG_HAS_TYPE_ID_INDEX)) + current.compactId = -1 + } else { + // + // Only the most derived slice encodes the type ID for the compact format. + // + current.typeId = "" + + current.compactId = -1 + } + } else { + current.typeId = try stream.read() + current.compactId = -1 + } + + // + // Read the slice size if necessary. + // + if current.sliceFlags.contains(SliceFlags.FLAG_HAS_SLICE_SIZE) { + current.sliceSize = try stream.read() + if current.sliceSize < 4 { + throw UnmarshalOutOfBoundsException(reason: "invalid slice size") + } + } else { + current.sliceSize = 0 + } + + return current.typeId + } + + func endSlice() throws { + if current.sliceFlags.contains(.FLAG_HAS_OPTIONAL_MEMBERS) { + try stream.skipOptionals() + } + + // + // Read the indirection table if one is present and transform the + // indirect patch list into patch entries with direct references. + // + if current.sliceFlags.contains(.FLAG_HAS_INDIRECTION_TABLE) { + var indirectionTable = [Int32](repeating: 0, count: Int(try stream.readAndCheckSeqSize(minSize: 1))) + + for i in 0 ..< indirectionTable.count { + indirectionTable[i] = try readInstance(index: stream.readSize(), cb: nil) + } + + // + // Sanity checks. If there are optional members, it's possible + // that not all instance references were read if they are from + // unknown optional data members. + // + if indirectionTable.isEmpty { + throw MarshalException(reason: "empty indirection table") + } + if current.indirectPatchList.isEmpty, + !current.sliceFlags.contains(.FLAG_HAS_OPTIONAL_MEMBERS) { + throw MarshalException(reason: "no references to indirection table") + } + + // + // Convert indirect references into direct references. + // + for e in current.indirectPatchList { + precondition(e.index >= 0) + if e.index >= indirectionTable.count { + throw MarshalException(reason: "indirection out of range") + } + try addPatchEntry(index: indirectionTable[Int(e.index)], cb: e.cb) + } + current.indirectPatchList.removeAll() + } + } + + func skipSlice() throws { + stream.traceSkipSlice(typeId: current.typeId, sliceType: current.sliceType) + + let start = stream.pos + + if current.sliceFlags.contains(.FLAG_HAS_SLICE_SIZE) { + precondition(current.sliceSize >= 4) + try stream.skip(current.sliceSize - 4) + } else { + if current.sliceType == .ValueSlice { + throw NoValueFactoryException(reason: "no value factory found and compact format prevents " + + "slicing (the sender should use the sliced format instead)", + type: current.typeId) + } else { + if let r = current.typeId.range(of: "::") { + throw UnknownUserException(unknown: String(current.typeId[r.upperBound...])) + } else { + throw UnknownUserException(unknown: current.typeId) + } + } + } + + // + // Preserve this slice. + // + let hasOptionalMembers = current.sliceFlags.contains(.FLAG_HAS_OPTIONAL_MEMBERS) + let isLastSlice = current.sliceFlags.contains(.FLAG_IS_LAST_SLICE) + var dataEnd = stream.pos + + if hasOptionalMembers { + // + // Don't include the optional member end marker. It will be re-written by + // endSlice when the sliced data is re-written. + // + dataEnd -= 1 + } + + let bytes = stream.data.subdata(in: start ..< dataEnd) // copy + + let info = SliceInfo(typeId: current.typeId, + compactId: current.compactId, + bytes: bytes, + instances: [], + hasOptionalMembers: hasOptionalMembers, + isLastSlice: isLastSlice) + + // + // Read the indirect instance table. We read the instances or their + // IDs if the instance is a reference to an already unmarhsaled + // instance. + // + // The SliceInfo object sequence is initialized only if + // readSlicedData is called. + // + if current.sliceFlags.contains(.FLAG_HAS_INDIRECTION_TABLE) { + var indirectionTable = [Int32](repeating: 0, count: Int(try stream.readAndCheckSeqSize(minSize: 1))) + + for i in 0 ..< indirectionTable.count { + indirectionTable[i] = try readInstance(index: stream.readSize(), cb: nil) + } + current.indirectionTables.append(indirectionTable) + } else { + current.indirectionTables.append([]) + } + + current.slices.append(info) + } + + func readOptional(tag: Int32, format: OptionalFormat) throws -> Bool { + if current == nil { + return try stream.readOptionalImpl(readTag: tag, expectedFormat: format) + } else if current.sliceFlags.contains(.FLAG_HAS_OPTIONAL_MEMBERS) { + return try stream.readOptionalImpl(readTag: tag, expectedFormat: format) + } + return false + } + + func readInstance(index: Int32, cb: Callback?) throws -> Int32 { + precondition(index > 0) + + if index > 1 { + if let cb = cb { + try addPatchEntry(index: index, cb: cb) + } + return index + } + + push(sliceType: .ValueSlice) + + // + // Get the instance ID before we start reading slices. If some + // slices are skipped, the indirect instance table is still read and + // might read other instances. + // + valueIdIndex += 1 + let index = valueIdIndex + + // + // Read the first slice header. + // + try startSlice() + let mostDerivedId = current.typeId! + + var v: Value? + while true { + var updateCache = false + + if current.compactId >= 0 { + updateCache = true + + // + // Translate a compact (numeric) type ID into a class. + // + if !compactIdCache.isEmpty { + // + // Check the cache to see if we've already translated the compact type ID into a class. + // + if let cls: Value.Type = compactIdCache[current.compactId] { + v = cls.init() + updateCache = false + } + } + + // + // If we haven't already cached a class for the compact ID, then try to translate the + // compact ID into a type ID. + // + if v == nil { + current.typeId = TypeIdResolver.resolve(compactId: current.compactId) ?? "" + } + } + + if v == nil, !current.typeId.isEmpty { + v = try newInstance(typeId: current.typeId) + } + + if let v = v { + if updateCache { + precondition(current.compactId >= 0) + compactIdCache[current.compactId] = type(of: v) + } + + // + // We have an instance, get out of this loop. + // + break + } + + // + // Slice off what we don't understand. + // + try skipSlice() + + // + // If this is the last slice, keep the instance as an opaque + // UnknownSlicedValue object. + // + if current.sliceFlags.contains(.FLAG_IS_LAST_SLICE) { + // + // Provide a factory with an opportunity to supply the instance. + // We pass the "::Ice::Object" ID to indicate that this is the + // last chance to preserve the instance. + // + v = try newInstance(typeId: "::Ice::Object") + if v == nil { + v = UnknownSlicedValue(unknownTypeId: mostDerivedId) + } + + break + } + + try startSlice() // Read next Slice header for next iteration. + } + + classGraphDepth += 1 + if classGraphDepth > classGraphDepthMax { + throw MarshalException(reason: "maximum class graph depth reached") + } + + // + // Unmarshal the instance. + // + try unmarshal(index: index, v: v!) + + classGraphDepth -= 1 + + if current == nil, !patchMap.isEmpty { + // + // If any entries remain in the patch map, the sender has sent an index for an instance, but failed + // to supply the instance. + // + throw MarshalException(reason: "index for class received, but no instance") + } + + try cb?(v) + + return index + } + + func readSlicedData() throws -> SlicedData? { + // No preserved slices. + if current.slices.isEmpty { + return nil + } + + // + // The _indirectionTables member holds the indirection table for each slice + // in _slices. + // + precondition(current.slices.count == current.indirectionTables.count) + + for n in 0 ..< current.slices.count { + // + // We use the "instances" list in SliceInfo to hold references + // to the target instances. Note that the instances might not have + // been read yet in the case of a circular reference to an + // enclosing instance. + + let m = n + let sz = current.indirectionTables[m].count + current.slices[m].instances = [Ice.Value?](repeating: nil, count: sz) + for j in 0 ..< current.slices[m].instances.count { + let k = j + try addPatchEntry(index: current.indirectionTables[m][j]) { v in + self.current.slices[m].instances[k] = v + } + } + } + + return SlicedData(slices: current.slices) + } + + func push(sliceType: SliceType) { + if current == nil { + current = InstanceData(previous: nil) + } else { + current = current.next ?? InstanceData(previous: current) + } + current.sliceType = sliceType + current.skipFirstSlice = false + } +} + +public struct DictEntry<K, V> { + public var key: K! + public var value: UnsafeMutablePointer<V>! + + public init(key: K? = nil, value: UnsafeMutablePointer<V>? = nil) { + self.key = key + self.value = value + } +} + +public class DictEntryArray<K, V> { + public var values: [DictEntry<K, V>] + + public init(size: Int) { + values = [DictEntry<K, V>](repeating: DictEntry<K, V>(), count: size) + } +} + +/// A Numeric type that can be marshaled (written) using an OutputStream and +/// unmarshaled (read) using an InputStream +public protocol StreamableNumeric: Numeric {} + +extension UInt8: StreamableNumeric {} +extension Int16: StreamableNumeric {} +extension Int32: StreamableNumeric {} +extension Int64: StreamableNumeric {} +extension Float: StreamableNumeric {} +extension Double: StreamableNumeric {} diff --git a/swift/src/Ice/LocalExceptionDescription.swift b/swift/src/Ice/LocalExceptionDescription.swift new file mode 100644 index 00000000000..d67765f2f2a --- /dev/null +++ b/swift/src/Ice/LocalExceptionDescription.swift @@ -0,0 +1,762 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import IceObjc + +private extension String { + mutating func sep(_ str: String) { + guard !str.isEmpty else { + return + } + append(":\n\(str)") + } + + mutating func nl(_ str: String) { + guard !str.isEmpty else { + return + } + append("\n\(str)") + } + + mutating func failedRequest(_ ex: RequestFailedException) { + let id: String = identityToString(id: ex.id, mode: .Unicode) + sep("identity: `\(id)'") + nl("facet: \(ex.facet)") + nl("operation: \(ex.operation)") + } + + mutating func hex(_ value: UInt8) { + append("0x") + append(String(format: "%02X", value)) + } +} + +private func socketError(_ error: Int32) -> String { + if error == 0 { + return "unknown error" + } + return ICEUtil.errorToString(error) +} + +extension InitializationException { + var _InitializationExceptionDescription: String { + var s = String() + + s.sep("initialization exception") + s.sep(reason) + + return s + } +} + +extension PluginInitializationException { + var _PluginInitializationExceptionDescription: String { + var s = String() + + s.sep("plug-in initialization failed") + s.sep(reason) + + return s + } +} + +extension CollocationOptimizationException { + var _CollocationOptimizationExceptionDescription: String { + var s = String() + + s.sep("requested feature not available with collocation optimization") + + return s + } +} + +extension AlreadyRegisteredException { + var _AlreadyRegisteredExceptionDescription: String { + var s = String() + + s.sep("\(kindOfObject) with ice `\(id)' is already registered") + + return s + } +} + +extension NotRegisteredException { + var _NotRegisteredExceptionDescription: String { + var s = String() + + s.sep("no \(kindOfObject) with id `\(id)' is registered") + + return s + } +} + +extension TwowayOnlyException { + var _TwowayOnlyExceptionDescription: String { + var s = String() + + s.sep("operation `\(operation)' can only be invoked as a twoway request") + + return s + } +} + +extension CloneNotImplementedException { + var _CloneNotImplementedExceptionDescription: String { + var s = String() + + s.sep("ice_clone() must be implemented in classes derived from abstract base classes") + + return s + } +} + +extension UnknownException { + var _UnknownExceptionDescription: String { + var s = String() + + s.sep("unknown exception") + s.sep(unknown) + + return s + } +} + +extension UnknownLocalException { + var _UnknownLocalExceptionDescription: String { + var s = String() + + s.sep("unknown local exception") + s.sep(unknown) + + return s + } +} + +extension UnknownUserException { + var _UnknownUserExceptionDescription: String { + var s = String() + + s.sep("unknown user exception") + s.sep(unknown) + + return s + } +} + +extension VersionMismatchException { + var _VersionMismatchExceptionDescription: String { + var s = String() + + s.sep("Ice library version mismatch") + + return s + } +} + +extension CommunicatorDestroyedException { + var _CommunicatorDestroyedExceptionDescription: String { + var s = String() + + s.sep("communicator object destroyed") + + return s + } +} + +extension ObjectAdapterDeactivatedException { + var _ObjectAdapterDeactivatedExceptionDescription: String { + var s = String() + + s.sep("object adapter `\(name)' deactivated") + + return s + } +} + +extension ObjectAdapterIdInUseException { + var _ObjectAdapterIdInUseExceptionDescription: String { + var s = String() + + s.sep("object adapter with id `\(id)' is already in use") + + return s + } +} + +extension NoEndpointException { + var _NoEndpointExceptionDescription: String { + var s = String() + + s.sep("no suitable endpoint available for proxy `\(proxy)'") + + return s + } +} + +extension EndpointParseException { + var _EndpointParseExceptionDescription: String { + var s = String() + + s.sep("error while parsing endpoint `\(str)'") + + return s + } +} + +extension EndpointSelectionTypeParseException { + var _EndpointSelectionTypeParseExceptionDescription: String { + var s = String() + + s.sep("error while parsing endpoint selection type `\(str)'") + + return s + } +} + +extension VersionParseException { + var _VersionParseExceptionDescription: String { + var s = String() + + s.sep("error while parsing version `\(str)'") + + return s + } +} + +extension IdentityParseException { + var _IdentityParseExceptionDescription: String { + var s = String() + + s.sep("error while parsing identity `\(str)'") + + return s + } +} + +extension ProxyParseException { + var _ProxyParseExceptionDescription: String { + var s = String() + + s.sep("error while parsing proxy `\(str)'") + + return s + } +} + +extension IllegalIdentityException { + var _IllegalIdentityExceptionDescription: String { + var s = String() + let identity: String = identityToString(id: id, mode: .Unicode) + s.sep("llegal identity: `\(identity)'") + + return s + } +} + +extension IllegalServantException { + var _IllegalServantExceptionDescription: String { + var s = String() + + s.sep("illegal servant: `\(reason)'") + + return s + } +} + +extension RequestFailedException { + var _RequestFailedExceptionDescription: String { + var s = String() + + s.sep("request failed") + s.failedRequest(self) + + return s + } +} + +extension ObjectNotExistException { + var _ObjectNotExistExceptionDescription: String { + var s = String() + + s.sep("object does not exist") + s.failedRequest(self) + + return s + } +} + +extension FacetNotExistException { + var _FacetNotExistExceptionDescription: String { + var s = String() + + s.sep("facet does not exist") + s.failedRequest(self) + + return s + } +} + +extension OperationNotExistException { + var _OperationNotExistExceptionDescription: String { + var s = String() + + s.sep("operation does not exist") + s.failedRequest(self) + + return s + } +} + +extension SyscallException { + var _SyscallExceptionDescription: String { + var s = String() + + if error != 0 { + s.sep("syscall exception: \(ICEUtil.errorToString(error))") + } + + return s + } +} + +extension SocketException { + var _SocketExceptionDescription: String { + var s = String() + + s.sep("socket exception: \(socketError(error))") + + return s + } +} + +extension CFNetworkException { + var _CFNetworkExceptionDescription: String { + var s = String() + + s.sep("network exception: domain: `\(domain)' error: `\(error)'") + + return s + } +} + +extension FileException { + var _FileExceptionDescription: String { + var s = String() + + s.sep("file exception: ") + if error == 0 { + s.append("couldn't open file") + } else { + s.append(ICEUtil.errorToString(error)) + } + if !path.isEmpty { + s.nl("path: \(path)") + } + + return s + } +} + +extension ConnectFailedException { + var _ConnectFailedExceptionDescription: String { + var s = String() + + s.sep("connect failed: \(socketError(error))") + + return s + } +} + +extension ConnectionRefusedException { + var _ConnectionRefusedExceptionDescription: String { + var s = String() + + s.sep("connection refused: \(socketError(error))") + + return s + } +} + +extension ConnectionLostException { + var _ConnectionLostExceptionDescription: String { + var s = String() + + s.sep("connection lost: ") + if error == 0 { + s.append("recv() returned zero") + } else { + s.append(socketError(error)) + } + + return s + } +} + +extension DNSException { + var _DNSExceptionDescription: String { + var s = String() + + s.sep("DNS error: \(ICEUtil.errorToStringDNS(error))") + s.nl("host: \(host)") + + return s + } +} + +extension OperationInterruptedException { + var _OperationInterruptedExceptionDescription: String { + var s = String() + + s.sep("operation interrupted") + + return s + } +} + +extension TimeoutException { + var _TimeoutExceptionDescription: String { + var s = String() + + s.sep("timeout while sending or receiving data") + + return s + } +} + +extension ConnectTimeoutException { + var _ConnectTimeoutExceptionDescription: String { + var s = String() + + s.sep("timeout while establishing a connection") + + return s + } +} + +extension CloseTimeoutException { + var _CloseTimeoutExceptionDescription: String { + var s = String() + + s.sep("timeout while closing a connection") + + return s + } +} + +extension ConnectionTimeoutException { + var _ConnectionTimeoutExceptionDescription: String { + var s = String() + + s.sep("connection has timed out") + + return s + } +} + +extension InvocationTimeoutException { + var _InvocationTimeoutExceptionDescription: String { + var s = String() + + s.sep("invocation has timed out") + + return s + } +} + +extension InvocationCanceledException { + var _InvocationCanceledExceptionDescription: String { + var s = String() + + s.sep("invocation canceled") + + return s + } +} + +extension ProtocolException { + var _ProtocolExceptionDescription: String { + var s = String() + + s.sep("protocol exception") + s.sep(reason) + + return s + } +} + +extension BadMagicException { + var _BadMagicExceptionDescription: String { + var s = String() + + s.sep("unknown magic number: ") + + s.hex(badMagic[0]) + s.append(", ") + s.hex(badMagic[1]) + s.append(", ") + s.hex(badMagic[2]) + s.append(", ") + s.hex(badMagic[3]) + + if !reason.isEmpty { + s.nl(reason) + } + + return s + } +} + +extension UnsupportedProtocolException { + var _UnsupportedProtocolExceptionDescription: String { + var s = String() + + s.sep("protocol error: unsupported protocol version: \(bad)") + s.nl("(can only support protocols compatible with version \(supported))") + + return s + } +} + +extension UnsupportedEncodingException { + var _UnsupportedEncodingExceptionDescription: String { + var s = String() + + s.sep("encoding error: unsupported encoding version: \(bad)") + s.nl("(can only support encodings compatible with version \(supported))") + + if !reason.isEmpty { + s.nl(reason) + } + + return s + } +} + +extension UnknownMessageException { + var _UnknownMessageExceptionDescription: String { + var s = String() + + s.sep("protocol error: unknown message type") + s.sep(reason) + + return s + } +} + +extension ConnectionNotValidatedException { + var _ConnectionNotValidatedExceptionDescription: String { + var s = String() + + s.sep("protocol error: received message over unvalidated connection") + s.sep(reason) + + return s + } +} + +extension UnknownRequestIdException { + var _UnknownRequestIdExceptionDescription: String { + var s = String() + + s.sep("protocol error: unknown request id") + s.sep(reason) + + return s + } +} + +extension UnknownReplyStatusException { + var _UnknownReplyStatusExceptionDescription: String { + var s = String() + + s.sep("protocol error: unknown unknown reply status") + s.sep(reason) + + return s + } +} + +extension CloseConnectionException { + var _CloseConnectionExceptionDescription: String { + var s = String() + + s.sep("protocol error: connection closed") + s.sep(reason) + + return s + } +} + +extension ConnectionManuallyClosedException { + var _ConnectionManuallyClosedExceptionDescription: String { + var s = String() + + let type = graceful ? "gracefully" : "forcefully" + s.sep("protocol error: connection manually closed (\(type))") + + return s + } +} + +extension IllegalMessageSizeException { + var _IllegalMessageSizeExceptionDescription: String { + var s = String() + + s.sep("protocol error: illegal message size") + s.sep(reason) + + return s + } +} + +extension CompressionException { + var _CompressionExceptionDescription: String { + var s = String() + + s.sep("protocol error: failed to compress or uncompress data") + s.sep(reason) + + return s + } +} + +extension DatagramLimitException { + var _DatagramLimitExceptionDescription: String { + var s = String() + + s.sep("protocol error: maximum datagram payload size exceeded") + s.sep(reason) + + return s + } +} + +extension MarshalException { + var _MarshalExceptionDescription: String { + var s = String() + + s.sep("protocol error: error during marshaling or unmarshaling") + s.sep(reason) + + return s + } +} + +extension ProxyUnmarshalException { + var _ProxyUnmarshalExceptionDescription: String { + var s = String() + + s.sep("protocol error: inconsistent proxy data during unmarshaling") + s.sep(reason) + + return s + } +} + +extension UnmarshalOutOfBoundsException { + var _UnmarshalOutOfBoundsExceptionDescription: String { + var s = String() + + s.sep("protocol error: out of bounds during unmarshaling") + s.sep(reason) + + return s + } +} + +extension NoValueFactoryException { + var _NoValueFactoryExceptionDescription: String { + var s = String() + + s.sep("protocol error: no suitable value factory found for `\(type)'") + s.sep(reason) + + return s + } +} + +extension UnexpectedObjectException { + var _UnexpectedObjectExceptionDescription: String { + var s = String() + + s.sep("unexpected class instance of type `\(type)'; expected instance of type `\(expectedType)'") + s.sep(reason) + + return s + } +} + +extension MemoryLimitException { + var _MemoryLimitExceptionDescription: String { + var s = String() + + s.sep("protocol error: memory limit exceeded") + s.sep(reason) + + return s + } +} + +extension StringConversionException { + var _StringConversionExceptionDescription: String { + var s = String() + + s.sep("protocol error: string conversion failed") + s.sep(reason) + + return s + } +} + +extension EncapsulationException { + var _EncapsulationExceptionDescription: String { + var s = String() + + s.sep("protocol error: illegal encapsulation") + s.sep(reason) + + return s + } +} + +extension FeatureNotSupportedException { + var _FeatureNotSupportedExceptionDescription: String { + var s = String() + + s.sep("feature: `\(unsupportedFeature)' is not supported") + + return s + } +} + +extension SecurityException { + var _SecurityExceptionDescription: String { + var s = String() + + s.sep("security exception") + s.sep(reason) + + return s + } +} + +extension FixedProxyException { + var _FixedProxyExceptionDescription: String { + var s = String() + + s.sep("fixed proxy exception") + + return s + } +} + +extension ResponseSentException { + var _ResponseSentExceptionDescription: String { + var s = String() + + s.sep("response sent exception") + + return s + } +} diff --git a/swift/src/Ice/LocalExceptionFactory.swift b/swift/src/Ice/LocalExceptionFactory.swift new file mode 100644 index 00000000000..f4cd6e45f77 --- /dev/null +++ b/swift/src/Ice/LocalExceptionFactory.swift @@ -0,0 +1,304 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import IceObjc + +class ExceptionFactory: ICEExceptionFactory { + static func initializationException(_ reason: String, file: String, line: Int) -> Error { + return InitializationException(reason: reason, file: file, line: line) + } + + static func pluginInitializationException(_ reason: String, file: String, line: Int) -> Error { + return PluginInitializationException(reason: reason, file: file, line: line) + } + + static func collocationOptimizationException(_ file: String, line: Int) -> Error { + return CollocationOptimizationException(file: file, line: line) + } + + static func alreadyRegisteredException(_ kindOfObject: String, id: String, file: String, line: Int) -> Error { + return AlreadyRegisteredException(kindOfObject: kindOfObject, id: id, file: file, line: line) + } + + static func notRegisteredException(_ kindOfObject: String, id: String, file: String, line: Int) -> Error { + return NotRegisteredException(kindOfObject: kindOfObject, id: id, file: file, line: line) + } + + static func twowayOnlyException(_ operation: String, file: String, line: Int) -> Error { + return TwowayOnlyException(operation: operation, file: file, line: line) + } + + static func cloneNotImplementedException(_ file: String, line: Int) -> Error { + return CloneNotImplementedException(file: file, line: line) + } + + static func versionMismatchException(_ file: String, line: Int) -> Error { + return VersionMismatchException(file: file, line: line) + } + + static func communicatorDestroyedException(_ file: String, line: Int) -> Error { + return CommunicatorDestroyedException(file: file, line: line) + } + + static func objectAdapterDeactivatedException(_ name: String, file: String, line: Int) -> Error { + return ObjectAdapterDeactivatedException(name: name, file: file, line: line) + } + + static func objectAdapterIdInUseException(_ id: String, file: String, line: Int) -> Error { + return ObjectAdapterIdInUseException(id: id, file: file, line: line) + } + + static func noEndpointException(_ proxy: String, file: String, line: Int) -> Error { + return NoEndpointException(proxy: proxy, file: file, line: line) + } + + static func endpointParseException(_ str: String, file: String, line: Int) -> Error { + return EndpointParseException(str: str, file: file, line: line) + } + + static func endpointSelectionTypeParseException(_ str: String, file: String, line: Int) -> Error { + return EndpointSelectionTypeParseException(str: str, file: file, line: line) + } + + static func versionParseException(_ str: String, file: String, line: Int) -> Error { + return VersionParseException(str: str, file: file, line: line) + } + + static func identityParseException(_ str: String, file: String, line: Int) -> Error { + return IdentityParseException(str: str, file: file, line: line) + } + + static func proxyParseException(_ str: String, file: String, line: Int) -> Error { + return ProxyParseException(str: str, file: file, line: line) + } + + static func illegalIdentityException(_ name: String, category: String, file: String, line: Int) -> Error { + return IllegalIdentityException(id: Identity(name: name, category: category), file: file, line: line) + } + + static func illegalServantException(_ reason: String, file: String, line: Int) -> Error { + return IllegalServantException(reason: reason, file: file, line: line) + } + + static func dNSException(_ error: Int32, host: String, file: String, line: Int) -> Error { + return DNSException(error: error, host: host, file: file, line: line) + } + + static func operationInterruptedException(_ file: String, line: Int) -> Error { + return OperationInterruptedException(file: file, line: line) + } + + static func invocationCanceledException(_ file: String, line: Int) -> Error { + return InvocationCanceledException(file: file, line: line) + } + + static func featureNotSupportedException(_ unsupportedFeature: String, file: String, line: Int) -> Error { + return FeatureNotSupportedException(unsupportedFeature: unsupportedFeature, file: file, line: line) + } + + static func fixedProxyException(_ file: String, line: Int) -> Error { + return FixedProxyException(file: file, line: line) + } + + static func responseSentException(_ file: String, line: Int) -> Error { + return ResponseSentException(file: file, line: line) + } + + static func securityException(_ reason: String, file: String, line: Int) -> Error { + return SecurityException(reason: reason, file: file, line: line) + } + + static func localException(_ file: String, line: Int) -> Error { + return LocalException(file: file, line: line) + } + + static func unknownLocalException(_ unknown: String, file: String, line: Int) -> Error { + return UnknownLocalException(unknown: unknown, file: file, line: line) + } + + static func unknownUserException(_ unknown: String, file: String, line: Int) -> Error { + return UnknownUserException(unknown: unknown, file: file, line: line) + } + + static func unknownException(_ unknown: String, file: String, line: Int) -> Error { + return UnknownException(unknown: unknown, file: file, line: line) + } + + static func objectNotExistException(_ name: String, category: String, facet: String, operation: String, + file: String, line: Int) -> Error { + return ObjectNotExistException(id: Identity(name: name, category: category), facet: facet, operation: operation, + file: file, line: line) + } + + static func facetNotExistException(_ name: String, category: String, facet: String, operation: String, + file: String, line: Int) -> Error { + return FacetNotExistException(id: Identity(name: name, category: category), facet: facet, operation: operation, + file: file, line: line) + } + + static func operationNotExistException(_ name: String, + category: String, + facet: String, + operation: String, file: String, line: Int) -> Error { + return OperationNotExistException(id: Identity(name: name, + category: category), + facet: facet, + operation: operation, file: file, line: line) + } + + static func requestFailedException(_ name: String, category: String, facet: String, operation: String, + file: String, line: Int) -> Error { + return RequestFailedException(id: Identity(name: name, category: category), facet: facet, operation: operation, + file: file, line: line) + } + + static func connectionRefusedException(_ error: Int32, file: String, line: Int) -> Error { + return ConnectionRefusedException(error: error, file: file, line: line) + } + + static func fileException(_ error: Int32, path: String, file: String, line: Int) -> Error { + return FileException(error: error, path: path, file: file, line: line) + } + + static func connectFailedException(_ error: Int32, file: String, line: Int) -> Error { + return ConnectionRefusedException(error: error, file: file, line: line) + } + + static func connectionLostException(_ error: Int32, file: String, line: Int) -> Error { + return ConnectionLostException(error: error, file: file, line: line) + } + + static func socketException(_ error: Int32, file: String, line: Int) -> Error { + return SocketException(error: error, file: file, line: line) + } + + static func syscallException(_ error: Int32, file: String, line: Int) -> Error { + return SyscallException(error: error, file: file, line: line) + } + + static func connectTimeoutException(_ file: String, line: Int) -> Error { + return ConnectTimeoutException(file: file, line: line) + } + + static func closeTimeoutException(_ file: String, line: Int) -> Error { + return CloseTimeoutException(file: file, line: line) + } + + static func connectionTimeoutException(_ file: String, line: Int) -> Error { + return ConnectionTimeoutException(file: file, line: line) + } + + static func invocationTimeoutException(_ file: String, line: Int) -> Error { + return InvocationTimeoutException(file: file, line: line) + } + + static func timeoutException(_ file: String, line: Int) -> Error { + return TimeoutException(file: file, line: line) + } + + static func badMagicException(_ reason: String, badMagic: Data, file: String, line: Int) -> Error { + // swiftlint:disable force_cast + return BadMagicException(reason: reason, badMagic: badMagic, file: file, line: line) + } + + static func unsupportedProtocolException(_ reason: String, + badMajor: UInt8, + badMinor: UInt8, + supportedMajor: UInt8, + supportedMinor: UInt8, file: String, line: Int) -> Error { + return UnsupportedProtocolException(reason: reason, + bad: ProtocolVersion(major: badMajor, minor: badMinor), + supported: ProtocolVersion(major: supportedMajor, minor: supportedMinor), + file: file, line: line) + } + + static func unsupportedEncodingException(_ reason: String, + badMajor: UInt8, + badMinor: UInt8, + supportedMajor: UInt8, + supportedMinor: UInt8, file: String, line: Int) -> Error { + return UnsupportedEncodingException(reason: reason, + bad: EncodingVersion(major: badMajor, minor: badMinor), + supported: EncodingVersion(major: supportedMajor, minor: supportedMinor), + file: file, line: line) + } + + static func unknownMessageException(_ reason: String, file: String, line: Int) -> Error { + return UnknownMessageException(reason: reason, file: file, line: line) + } + + static func connectionNotValidatedException(_ reason: String, file: String, line: Int) -> Error { + return ConnectionNotValidatedException(reason: reason, file: file, line: line) + } + + static func unknownRequestIdException(_ reason: String, file: String, line: Int) -> Error { + return UnknownRequestIdException(reason: reason, file: file, line: line) + } + + static func unknownReplyStatusException(_ reason: String, file: String, line: Int) -> Error { + return UnknownReplyStatusException(reason: reason, file: file, line: line) + } + + static func closeConnectionException(_ reason: String, file: String, line: Int) -> Error { + return CloseConnectionException(reason: reason, file: file, line: line) + } + + static func connectionManuallyClosedException(_ graceful: Bool, file: String, line: Int) -> Error { + return ConnectionManuallyClosedException(graceful: graceful, file: file, line: line) + } + + static func illegalMessageSizeException(_ reason: String, file: String, line: Int) -> Error { + return IllegalMessageSizeException(reason: reason, file: file, line: line) + } + + static func compressionException(_ reason: String, file: String, line: Int) -> Error { + return CompressionException(reason: reason, file: file, line: line) + } + + static func datagramLimitException(_ reason: String, file: String, line: Int) -> Error { + return DatagramLimitException(reason: reason, file: file, line: line) + } + + static func proxyUnmarshalException(_ reason: String, file: String, line: Int) -> Error { + return ProxyUnmarshalException(reason: reason, file: file, line: line) + } + + static func unmarshalOutofBoundsException(_ reason: String, file: String, line: Int) -> Error { + return UnmarshalOutOfBoundsException(reason: reason, file: file, line: line) + } + + static func noValueFactoryException(_ reason: String, type: String, file: String, line: Int) -> Error { + return NoValueFactoryException(reason: reason, type: type, file: file, line: line) + } + + static func unexpectedObjectException(_ reason: String, type: String, expectedType: String, + file: String, line: Int) -> Error { + return UnexpectedObjectException(reason: reason, type: type, expectedType: expectedType, + file: file, line: line) + } + + static func memoryLimitException(_ reason: String, file: String, line: Int) -> Error { + return MemoryLimitException(reason: reason, file: file, line: line) + } + + static func stringConversionException(_ reason: String, file: String, line: Int) -> Error { + return StringConversionException(reason: reason, file: file, line: line) + } + + static func encapsulationException(_ reason: String, file: String, line: Int) -> Error { + return EncapsulationException(reason: reason, file: file, line: line) + } + + static func marshalException(_ reason: String, file: String, line: Int) -> Error { + return MarshalException(reason: reason, file: file, line: line) + } + + static func protocolException(_ reason: String, file: String, line: Int) -> Error { + return ProtocolException(reason: reason, file: file, line: line) + } + + static func runtimeError(_ message: String) -> Error { + return RuntimeError(message) + } +} diff --git a/swift/src/Ice/LocalObject.swift b/swift/src/Ice/LocalObject.swift new file mode 100644 index 00000000000..de4125ca6ce --- /dev/null +++ b/swift/src/Ice/LocalObject.swift @@ -0,0 +1,52 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import IceObjc + +class LocalObject<Handle: ICELocalObject> { + let handle: Handle + + init(handle: Handle) { + precondition(handle.swiftRef == nil) + self.handle = handle + self.handle.swiftRef = self + } +} + +extension ICELocalObject { + // + // getSwiftObject returns the Swift object holding a handle to this ICELocalObject or initializes a new one + // + func getSwiftObject<Handle, LocalObjectClass>(_: LocalObjectClass.Type, + initializer: () -> LocalObjectClass) -> LocalObjectClass + where Handle: ICELocalObject, LocalObjectClass: LocalObject<Handle> { + objc_sync_enter(self) + defer { objc_sync_exit(self) } + + if let swiftClass = swiftRef { + precondition(swiftClass is LocalObjectClass) + // swiftlint:disable force_cast + return swiftClass as! LocalObjectClass + } + + return initializer() + } + + // + // as returns the Swift object holding a handle to this ICELocalObject + // + func getCachedSwiftObject<Handle, LocalObjectClass>(_: LocalObjectClass.Type) -> LocalObjectClass + where Handle: ICELocalObject, LocalObjectClass: LocalObject<Handle> { + objc_sync_enter(LocalObject.self) + defer { objc_sync_exit(LocalObject.self) } + + guard let swiftClass = swiftRef else { + preconditionFailure("swiftRef is nil") + } + guard let c = swiftClass as? LocalObjectClass else { + preconditionFailure("Invalid swift type for ICELocalObject") + } + return c + } +} diff --git a/swift/src/Ice/LoggerWrapper.swift b/swift/src/Ice/LoggerWrapper.swift new file mode 100644 index 00000000000..266a9f2447a --- /dev/null +++ b/swift/src/Ice/LoggerWrapper.swift @@ -0,0 +1,66 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import IceObjc + +// Wraps Swift Loggers so they can be called by ObjC/C++ +class LoggerWrapper: ICELoggerProtocol { + let handle: Logger + + init(handle: Logger) { + self.handle = handle + } + + func print(_ message: String) { + handle.print(message) + } + + func trace(category: String, message: String) { + handle.trace(category: category, message: message) + } + + func warning(_ message: String) { + handle.warning(message) + } + + func error(_ message: String) { + handle.error(message) + } + + func getPrefix() -> String { + return handle.getPrefix() + } + + func cloneWithPrefix(_ prefix: String) -> Any { + return handle.cloneWithPrefix(prefix) + } +} + +// Wraps Ice C++ logger +class ObjcLoggerWrapper: LocalObject<ICELogger>, Logger { + func print(_ message: String) { + handle.print(message) + } + + func trace(category: String, message: String) { + handle.trace(category: category, message: message) + } + + func warning(_ message: String) { + handle.warning(message) + } + + func error(_ message: String) { + handle.error(message) + } + + func getPrefix() -> String { + return handle.getPrefix() + } + + func cloneWithPrefix(_ prefix: String) -> Logger { + // swiftlint:disable force_cast + return ObjcLoggerWrapper(handle: handle.cloneWithPrefix(prefix) as! ICELogger) + } +} diff --git a/swift/src/Ice/Mutex.swift b/swift/src/Ice/Mutex.swift new file mode 100644 index 00000000000..633f5902915 --- /dev/null +++ b/swift/src/Ice/Mutex.swift @@ -0,0 +1,27 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Foundation + +struct Mutex { + private var unfairLock = os_unfair_lock() + + mutating func lock() { + os_unfair_lock_lock(&unfairLock) + } + + mutating func locked() -> Bool { + return os_unfair_lock_trylock(&unfairLock) + } + + mutating func unlock() { + os_unfair_lock_unlock(&unfairLock) + } + + mutating func sync<R>(_ closure: () throws -> R) rethrows -> R { + lock() + defer { unlock() } + return try closure() + } +} diff --git a/swift/src/Ice/NativePropertiesAdmin.swift b/swift/src/Ice/NativePropertiesAdmin.swift new file mode 100644 index 00000000000..66f9fb3f0cc --- /dev/null +++ b/swift/src/Ice/NativePropertiesAdmin.swift @@ -0,0 +1,23 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +/// Closure called when the communicator's properties have been updated. +/// +/// - parameter: `PropertyDict` A dictionary containing the properties that were added, +/// changed or removed, with a removed property denoted by an entry whose value is an +/// empty string. +public typealias PropertiesAdminUpdateCallback = (PropertyDict) -> Void + +/// Closure used to remove the properties update callback. +public typealias PropertiesAdminRemoveCallback = () -> Void + +/// Base protocol for the Properties admin facet. +public protocol NativePropertiesAdmin { + /// Register an update callback that will be invoked when property updates occur. + /// + /// - parameter cb: `PropertiesAdminUpdateCallback` - The callback. + /// + /// - returns: A closure that can be invoked to remove the callback. + func addUpdateCallback(_ cb: @escaping PropertiesAdminUpdateCallback) -> PropertiesAdminRemoveCallback +} diff --git a/swift/src/Ice/Object.swift b/swift/src/Ice/Object.swift new file mode 100644 index 00000000000..0dc06eaed1a --- /dev/null +++ b/swift/src/Ice/Object.swift @@ -0,0 +1,153 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import IceObjc + +/// Request is an opaque type that represents an incoming request. +public typealias Request = Incoming + +/// A request dispatcher (Disp) is a helper struct used by object adapters to dispatch +/// requests to servants. +public protocol Disp { + /// Dispatch request to servant. + /// + /// - parameter request: `Ice.Request` - The incoming request. + /// + /// - parameter current: `Ice.Current` - The Current object for the dispatch. + func dispatch(request: Request, current: Current) throws +} + +/// A SliceTraits struct describes a Slice interface, class or exception. +public protocol SliceTraits { + /// List of all type-ids. + static var staticIds: [String] { get } + + /// Most derived type-id. + static var staticId: String { get } +} + +/// The base class for servants. +public protocol Object { + /// Returns the Slice type ID of the most-derived interface supported by this object. + /// + /// - parameter current: `Ice.Current` - The Current object for the dispatch. + /// + /// - returns: `String` - The Slice type ID of the most-derived interface. + func ice_id(current: Current) throws -> String + + /// Returns the Slice type IDs of the interfaces supported by this object. + /// + /// - parameter current: `Ice.Current` - The Current object for the dispatch. + /// + /// - returns: `[String]` The Slice type IDs of the interfaces supported by this object, in base-to-derived + /// order. The first element of the returned array is always `::Ice::Object`. + func ice_ids(current: Current) throws -> [String] + + /// Tests whether this object supports a specific Slice interface. + /// + /// - parameter s: `String` - The type ID of the Slice interface to test against. + /// + /// - parameter current: `Ice.Current` - The Current object for the dispatch. + /// + /// - returns: `Bool` - True if this object has the interface specified by s or + /// derives from the interface specified by s. + func ice_isA(id: String, current: Current) throws -> Bool + + /// Tests whether this object can be reached. + /// + /// - parameter current: The Current object for the dispatch. + func ice_ping(current: Current) throws +} + +public extension Object { + func _iceD_ice_id(incoming inS: Incoming, current: Current) throws { + try inS.readEmptyParams() + + let returnValue = try ice_id(current: current) + + inS.write { ostr in + ostr.write(returnValue) + } + } + + func _iceD_ice_ids(incoming inS: Incoming, current: Current) throws { + try inS.readEmptyParams() + + let returnValue = try ice_ids(current: current) + + inS.write { ostr in + ostr.write(returnValue) + } + } + + func _iceD_ice_isA(incoming inS: Incoming, current: Current) throws { + let ident: String = try inS.read { istr in + try istr.read() + } + + let returnValue = try ice_isA(id: ident, current: current) + + inS.write { ostr in + ostr.write(returnValue) + } + } + + func _iceD_ice_ping(incoming inS: Incoming, current: Current) throws { + try inS.readEmptyParams() + try ice_ping(current: current) + inS.writeEmptyParams() + } +} + +/// Traits for Object. +public struct ObjectTraits: SliceTraits { + public static let staticIds = ["::Ice::Object"] + public static let staticId = "::Ice::Object" +} + +/// class ObjectI provides the default implementation of Object operations (ice_id, +/// ice_ping etc.) for a given Slice interface. +open class ObjectI<T: SliceTraits>: Object { + public init() {} + + open func ice_id(current _: Current) throws -> String { + return T.staticId + } + + open func ice_ids(current _: Current) throws -> [String] { + return T.staticIds + } + + open func ice_isA(id: String, current _: Current) throws -> Bool { + return T.staticIds.contains(id) + } + + open func ice_ping(current _: Current) throws { + // Do nothing + } +} + +/// Request dispatcher for plain Object servants. +public struct ObjectDisp: Disp { + public let servant: Object + + public init(_ servant: Object) { + self.servant = servant + } + + public func dispatch(request: Request, current: Current) throws { + switch current.operation { + case "ice_id": + try servant._iceD_ice_id(incoming: request, current: current) + case "ice_ids": + try servant._iceD_ice_ids(incoming: request, current: current) + case "ice_isA": + try servant._iceD_ice_isA(incoming: request, current: current) + case "ice_ping": + try servant._iceD_ice_ping(incoming: request, current: current) + default: + throw OperationNotExistException(id: current.id, facet: current.facet, operation: current.operation) + } + } +} diff --git a/swift/src/Ice/ObjectAdapterI.swift b/swift/src/Ice/ObjectAdapterI.swift new file mode 100644 index 00000000000..81289f872dd --- /dev/null +++ b/swift/src/Ice/ObjectAdapterI.swift @@ -0,0 +1,241 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import IceObjc + +class ObjectAdapterI: LocalObject<ICEObjectAdapter>, ObjectAdapter, ICEBlobjectFacade, Hashable { + private let communicator: Communicator + let servantManager: ServantManager + + init(handle: ICEObjectAdapter, communicator: Communicator) { + self.communicator = communicator + servantManager = ServantManager(adapterName: handle.getName(), communicator: communicator) + super.init(handle: handle) + + handle.registerDefaultServant(self) + } + + func hash(into hasher: inout Hasher) { + hasher.combine(ObjectIdentifier(self).hashValue) + } + + static func == (lhs: ObjectAdapterI, rhs: ObjectAdapterI) -> Bool { + return lhs === rhs + } + + func getName() -> String { + return handle.getName() + } + + func getCommunicator() -> Communicator { + return communicator + } + + func activate() throws { + try autoreleasepool { + try handle.activate() + } + } + + func hold() { + handle.hold() + } + + func waitForHold() { + handle.waitForHold() + } + + func deactivate() { + handle.deactivate() + } + + func waitForDeactivate() { + handle.waitForDeactivate() + } + + func isDeactivated() -> Bool { + return handle.isDeactivated() + } + + func destroy() { + return handle.destroy() + } + + func add(servant: Disp, id: Identity) throws -> ObjectPrx { + return try addFacet(servant: servant, id: id, facet: "") + } + + func addFacet(servant: Disp, id: Identity, facet: String) throws -> ObjectPrx { + precondition(!id.name.isEmpty, "Identity cannot have an empty name") + try servantManager.addServant(servant: servant, id: id, facet: facet) + return try createProxy(id).ice_facet(facet) + } + + func addWithUUID(_ servant: Disp) throws -> ObjectPrx { + return try addFacetWithUUID(servant: servant, facet: "") + } + + func addFacetWithUUID(servant: Disp, facet: String) throws -> ObjectPrx { + return try addFacet(servant: servant, id: Identity(name: UUID().uuidString, category: ""), facet: facet) + } + + func addDefaultServant(servant: Disp, category: String) throws { + try servantManager.addDefaultServant(servant: servant, category: category) + } + + func remove(_ id: Identity) throws -> Disp { + return try removeFacet(id: id, facet: "") + } + + func removeFacet(id: Identity, facet: String) throws -> Disp { + precondition(!id.name.isEmpty, "Identity cannot have an empty name") + return try servantManager.removeServant(id: id, facet: facet) + } + + func removeAllFacets(_ id: Identity) throws -> FacetMap { + precondition(!id.name.isEmpty, "Identity cannot have an empty name") + return try servantManager.removeAllFacets(id: id) + } + + func removeDefaultServant(_ category: String) throws -> Disp { + return try servantManager.removeDefaultServant(category: category) + } + + func find(_ id: Identity) -> Disp? { + return findFacet(id: id, facet: "") + } + + func findFacet(id: Identity, facet: String) -> Disp? { + return servantManager.findServant(id: id, facet: facet) + } + + func findAllFacets(_ id: Identity) -> FacetMap { + return servantManager.findAllFacets(id: id) + } + + func findByProxy(_ proxy: ObjectPrx) -> Disp? { + return findFacet(id: proxy.ice_getIdentity(), facet: proxy.ice_getFacet()) + } + + func addServantLocator(locator: ServantLocator, category: String) throws { + try servantManager.addServantLocator(locator: locator, category: category) + } + + func removeServantLocator(_ category: String) throws -> ServantLocator { + return try servantManager.removeServantLocator(category: category) + } + + func findServantLocator(_ category: String) -> ServantLocator? { + return servantManager.findServantLocator(category: category) + } + + func findDefaultServant(_ category: String) -> Disp? { + return servantManager.findDefaultServant(category: category) + } + + func createProxy(_ id: Identity) throws -> ObjectPrx { + precondition(!id.name.isEmpty, "Identity cannot have an empty name") + return try autoreleasepool { + try ObjectPrxI(handle: handle.createProxy(name: id.name, category: id.category), + communicator: communicator) + } + } + + func createDirectProxy(_ id: Identity) throws -> ObjectPrx { + precondition(!id.name.isEmpty, "Identity cannot have an empty name") + return try autoreleasepool { + try ObjectPrxI(handle: handle.createDirectProxy(name: id.name, category: id.category), + communicator: communicator) + } + } + + func createIndirectProxy(_ id: Identity) throws -> ObjectPrx { + precondition(!id.name.isEmpty, "Identity cannot have an empty name") + return try autoreleasepool { + try ObjectPrxI(handle: handle.createIndirectProxy(name: id.name, category: id.category), + communicator: communicator) + } + } + + func setLocator(_ locator: LocatorPrx?) { + let l = locator as? LocatorPrxI + handle.setLocator(l?.handle ?? nil) + } + + func getLocator() -> LocatorPrx? { + guard let locatorHandle = handle.getLocator() else { + return nil + } + return LocatorPrxI.fromICEObjectPrx(handle: locatorHandle) + } + + func getEndpoints() -> EndpointSeq { + return handle.getEndpoints().fromObjc() + } + + func refreshPublishedEndpoints() throws { + try autoreleasepool { + try handle.refreshPublishedEndpoints() + } + } + + func getPublishedEndpoints() -> EndpointSeq { + return handle.getPublishedEndpoints().fromObjc() + } + + func setPublishedEndpoints(_ newEndpoints: EndpointSeq) throws { + try autoreleasepool { + try handle.setPublishedEndpoints(newEndpoints.toObjc()) + } + } + + func getDispatchQueue() throws -> DispatchQueue { + return try autoreleasepool { + try handle.getDispatchQueue() + } + } + + func facadeInvoke(_ adapter: ICEObjectAdapter, + inEncaps: Data, + con: ICEConnection?, + name: String, + category: String, + facet: String, + operation: String, + mode: UInt8, + context: [String: String], + requestId: Int32, + encodingMajor: UInt8, + encodingMinor: UInt8, + response: @escaping (Bool, Data) -> Void, + exception: @escaping (ICERuntimeException) -> Void) { + precondition(handle == adapter) + + let connection = con?.getSwiftObject(ConnectionI.self) { ConnectionI(handle: con!) } ?? nil + + let current = Current(adapter: self, + con: connection, + id: Identity(name: name, category: category), + facet: facet, + operation: operation, + mode: OperationMode(rawValue: mode)!, + ctx: context, + requestId: requestId, + encoding: EncodingVersion(major: encodingMajor, minor: encodingMinor)) + + let incoming = Incoming(istr: InputStream(communicator: communicator, + encoding: EncodingVersion(major: encodingMajor, + minor: encodingMinor), + bytes: inEncaps), + response: response, + exception: exception, + current: current) + + incoming.invoke(servantManager) + } + + func facadeRemoved() { + servantManager.destroy() + } +} diff --git a/swift/src/Ice/OptionalFormat.swift b/swift/src/Ice/OptionalFormat.swift new file mode 100644 index 00000000000..8e399125a2f --- /dev/null +++ b/swift/src/Ice/OptionalFormat.swift @@ -0,0 +1,30 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +/// Helper for encoding of optional member or parameter. +public enum OptionalFormat: UInt8 { + case F1 = 0 + case F2 = 1 + case F4 = 2 + case F8 = 3 + case Size = 4 + case VSize = 5 + case FSize = 6 + case Class = 7 + + init?(fixedSize: Int) { + switch fixedSize { + case 1: + self.init(rawValue: 0) + case 2: + self.init(rawValue: 1) + case 4: + self.init(rawValue: 2) + case 8: + self.init(rawValue: 3) + default: + return nil + } + } +} diff --git a/swift/src/Ice/OutputStream.swift b/swift/src/Ice/OutputStream.swift new file mode 100644 index 00000000000..e83506b4bf9 --- /dev/null +++ b/swift/src/Ice/OutputStream.swift @@ -0,0 +1,1076 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Foundation +import IceObjc + +/// Stream class to write (marshal) Slice types into a sequence of bytes. +public class OutputStream { + private var data: Data = Data(capacity: 240) + private let communicator: Communicator + private let encoding: EncodingVersion + private let encoding_1_0: Bool + private let format: FormatType + + private var encaps: Encaps! + + /// Determines the current encoding version. + var currentEncoding: EncodingVersion { + return encaps != nil ? encaps.encoding : encoding + } + + public convenience init(communicator: Communicator) { + let encoding = (communicator as! CommunicatorI).defaultsAndOverrides.defaultEncoding + self.init(communicator: communicator, encoding: encoding) + } + + public init(communicator: Communicator, encoding: EncodingVersion) { + self.communicator = communicator + self.encoding = encoding + encoding_1_0 = encoding == Encoding_1_0 + format = (communicator as! CommunicatorI).defaultsAndOverrides.defaultFormat + } + + /// Writes the start of an encapsulation to the stream. + public func startEncapsulation() { + startEncapsulation(encoding: encoding, format: FormatType.DefaultFormat) + } + + /// Writes the start of an encapsulation to the stream. + /// + /// - parameter encoding: `Ice.EncodingVersion` - The encoding version of the encapsulation. + /// + /// - parameter format: `Ice.FormatType` - Specify the compact or sliced format. + public func startEncapsulation(encoding: EncodingVersion, format: FormatType) { + precondition(encaps == nil, "Nested or sequential encapsulations are not supported") + encaps = Encaps(encoding: encoding, format: format, start: data.count) + write(Int32(0)) // Placeholder for the encapsulation length. + write(encaps.encoding) + } + + /// Ends the previous encapsulation. + public func endEncapsulation() { + // Size includes size and version. + let start = encaps.start + let sz = Int32(data.count - start) + write(bytesOf: sz, at: start) + } + + /// Writes an empty encapsulation using the given encoding version. + /// + /// - parameter encoding: `Ice.EncodingVersion` - The encoding version of the encapsulation. + func writeEmptyEncapsulation(_ encoding: EncodingVersion) { + write(Int32(6)) // Size + write(encoding) + } + + /// Writes a pre-encoded encapsulation. + /// + /// - parameter _: `Data` - The encapsulation data. + func writeEncapsulation(_ v: Data) { + precondition(v.count >= 6, "Encapsulation is invalid. Size is too small.") + data.append(v) + } + + func getCount() -> Int { + return data.count + } + + /// Overwrite an existing Numeric at the specified position + /// + func write<Element>(bytesOf value: Element, at: Int) where Element: StreamableNumeric { + withUnsafePointer(to: value) { ptr in + self.data.replaceSubrange(at ..< at + MemoryLayout<Element>.size, + with: UnsafeRawPointer(ptr), count: MemoryLayout<Element>.size) + } + } + + /// Marks the start of a class instance. + /// + /// - parameter data: `Ice.SlicedData?` - Preserved slices for this instance, or nil. + public func startValue(data: SlicedData?) { + precondition(encaps.encoder != nil) + encaps.encoder.startInstance(type: .ValueSlice, data: data) + } + + /// Marks the end of a class instance. + public func endValue() { + precondition(encaps.encoder != nil) + encaps.encoder.endInstance() + } + + /// Marks the start of a user exception. + /// + /// - parameter data: `Ice.SlicedData` Preserved slices for this exception, or nil. + public func startException(data: SlicedData?) { + precondition(encaps.encoder != nil) + encaps.encoder.startInstance(type: .ExceptionSlice, data: data) + } + + /// Marks the end of a user exception. + public func endException() { + precondition(encaps.encoder != nil) + encaps.encoder.endInstance() + } + + private func initEncaps() { + if encaps == nil { + encaps = Encaps(encoding: encoding, format: format, start: 0) + } else if encaps.format == .DefaultFormat { + encaps.format = format + } + + // Lazy initialization. + if encaps.encoder == nil { + if encaps.encoding_1_0 { + encaps.encoder = EncapsEncoder10(os: self, encaps: encaps) + } else { + encaps.encoder = EncapsEncoder11(os: self, encaps: encaps) + } + } + } + + /// Writes the state of Slice classes whose index was previously written with writeValue() to the stream. + public func writePendingValues() { + if encaps != nil, encaps.encoder != nil { + encaps.encoder.writePendingValues() + } else if encoding_1_0 { + // If using the 1.0 encoding and no instances were written, we + // still write an empty sequence for pending instances if + // requested (i.e.: if this is called). + // + // This is required by the 1.0 encoding, even if no instances + // are written we do marshal an empty sequence if marshaled + // data types use classes. + write(size: Int32(0)) + } + } + + /// Returns the underlying data + public func finished() -> Data { + return data + } + + /// Marks the start of a new slice for a class instance or user exception. + /// + /// - parameter typeId: `String` - The Slice type ID corresponding to this slice. + /// + /// - parameter compactId: `Int32` - The Slice compact type ID corresponding to this + /// slice or -1 if no compact ID is defined for the type ID. + /// + /// - parameter last: `Bool` - True if this is the last slice, false otherwise. + public func startSlice(typeId: String, compactId: Int32, last: Bool) { + precondition(encaps != nil && encaps.encoder != nil) + encaps.encoder.startSlice(typeId: typeId, compactId: compactId, last: last) + } + + /// Marks the end of a slice for a class instance or user exception. + public func endSlice() { + precondition(encaps != nil && encaps.encoder != nil) + encaps.encoder.endSlice() + } +} + +public extension OutputStream { + /// Writes a numeric value to the stream. + /// + /// - parameter _: `Element` - The numeric value to write. + func write<Element>(_ v: Element) where Element: StreamableNumeric { + // We assume a little-endian platform + withUnsafePointer(to: v) { ptr in + self.data.append(UnsafeBufferPointer<Element>(start: ptr, count: 1)) + } + } + + /// Writes an optional numeric value to the stream. + /// + /// - parameter tag: `Int32` - The tag of the optional data member or parameter. + /// + /// - parameter value: `Element?` - The numeric value to write. + func write<Element>(tag: Int32, value: Element?) where Element: StreamableNumeric { + let format = OptionalFormat(fixedSize: MemoryLayout<Element>.size) + if let val = value { + if writeOptional(tag: tag, format: format!) { + write(val) + } + } + } + + /// Writes a sequence of numeric values to the stream. + /// + /// - parameter _: `[Element]` - The sequence of numeric values. + func write<Element>(_ v: [Element]) where Element: StreamableNumeric { + write(size: v.count) + + if v.count <= 1 || MemoryLayout<Element>.size == MemoryLayout<Element>.stride { + v.withUnsafeBufferPointer { buf in + self.data.append(buf) + } + } else { + for e in v { + write(e) + } + } + } + + /// Writes an optional sequence of numeric values to the stream. + /// + /// - parameter tag: `Int32` - The tag of the optional data member or parameter. + /// + /// - parameter value: `[Element]?` - The sequence of numeric numeric values to write. + func write<Element>(tag: Int32, value: [Element]?) where Element: StreamableNumeric { + if let val = value { + if writeOptionalVSize(tag: tag, len: val.count, elemSize: MemoryLayout<Element>.size) { + write(val) + } + } + } + + // + // UInt8 optimization + // + + /// Writes a byte to the stream. + /// + /// - parameter _: `UInt8` - The byte to write. + func write(_ v: UInt8) { + data.append(v) + } + + /// Writes a sequence of bytes to the stream. + /// + /// - parameter _: `[UInt8]` - The sequence of bytes to write. + func write(_ v: [UInt8]) { + write(size: v.count) + if v.count > 0 { + data.append(contentsOf: v) + } + } + + /// Writes a sequence of bytes to the stream. + /// + /// - parameter _: `Data` - The sequence of bytes to write. + func write(_ v: Data) { + write(size: v.count) + if v.count > 0 { + data.append(v) + } + } + + /// Writes an optional sequence of bytes to the stream. + /// + /// - parameter tag: `Int32` - The tag of the optional data member or parameter. + /// + /// - parameter value: `Data` - The sequence of bytes to write. + func write(tag: Int32, value: Data?) { + if let val = value { + // Note: not the same as larger Numeric + if writeOptional(tag: tag, format: .VSize) { + write(val) + } + } + } + + /// Writes a boolean value to the stream. + /// + /// - parameter _: `Bool` - The boolean value to write. + func write(_ v: Bool) { + write(UInt8(v == true ? 1 : 0)) + } + + /// Writes an optional boolean value to the stream. + /// + /// - parameter tag: `Int32` - The tag of the optional data member or parameter. + /// + /// - parameter value: `Bool?` - The boolean value to write. + func write(tag: Int32, value: Bool?) { + if let val = value { + if writeOptional(tag: tag, format: .F1) { + write(val) + } + } + } + + /// Writes a sequence of boolean values to the stream. + /// + /// - parameter _: `[Bool]` - The sequence of boolean values to write. + func write(_ v: [Bool]) { + write(size: v.count) + if MemoryLayout<Bool>.size == 1, MemoryLayout<Bool>.stride == 1 { + v.withUnsafeBufferPointer { buf in + self.data.append(buf) + } + } else { + fatalError("Unsupported Bool layout") + } + } + + /// Writes an optional sequence of boolean values to the stream. + /// + /// - parameter tag: `Int32` - The tag of the optional data member or parameter. + /// + /// - parameter value: `[Bool]?` - The sequence of boolean values to write. + func write(tag: Int32, value: [Bool]?) { + if let val = value { + if writeOptional(tag: tag, format: .VSize) { + write(val) + } + } + } + + /// Writes a size to the stream. + /// + /// - parameter size: `Int32` - The size to write. + func write(size: Int32) { + if size > 254 { + write(UInt8(255)) + write(size) + } else { + write(UInt8(size)) + } + } + + /// Writes a size to the stream. + /// + /// - parameter size: `Int` - The size to write. + func write(size: Int) { + precondition(size <= Int32.max, "Size is too large") + write(size: Int32(size)) + } + + func startSize() -> Int32 { + let pos = Int32(data.count) + write(Int32(0)) // Placeholder for 32-bit size + return pos + } + + func endSize(position: Int32) { + precondition(position > 0) + write(bytesOf: Int32(data.count) - position - 4, at: Int(position)) + } + + /// Writes an enumerator to the stream. + /// + /// - parameter val: `UInt8` - The value of the enumerator to write. + /// + /// - parameter maxValue: `Int32` - The maximum value for the enumeration's enumerators + /// (used only for the 1.0 encoding). + func write(enum val: UInt8, maxValue: Int32) { + if currentEncoding == Encoding_1_0 { + if maxValue < 127 { + write(UInt8(val)) + } else if maxValue < 32767 { + write(Int16(val)) + } else { + write(Int32(val)) + } + } else { + write(size: Int32(val)) + } + } + + /// Writes an optional enumerator to the stream. + /// + /// - parameter tag: `Int32` - The tag of the optional data member or parameter. + /// + /// - parameter val: `UInt8` - The value of the enumerator to write. + /// + /// - parameter maxValue: `Int32` - The maximum value for the enumeration's enumerators + /// (used only for the 1.0 encoding). + func write(tag: Int32, val: UInt8, maxValue: Int32) { + if writeOptional(tag: tag, format: .Size) { + write(enum: val, maxValue: maxValue) + } + } + + /// Writes an enumerator to the stream. + /// + /// - parameter val: `Int32` - The value of the enumerator to write. + /// + /// - parameter maxValue: `Int32` - The maximum value for the enumeration's enumerators + /// (used only for the 1.0 encoding). + func write(enum val: Int32, maxValue: Int32) { + if currentEncoding == Encoding_1_0 { + if maxValue < 127 { + write(UInt8(val)) + } else if maxValue < 32767 { + write(Int16(val)) + } else { + write(Int32(val)) + } + } else { + write(size: val) + } + } + + /// Writes an optional enumerator to the stream. + /// + /// - parameter tag: `Int32` - The tag of the optional data member or parameter. + /// + /// - parameter val: `Int32` - The value of the enumerator to write. + /// + /// - parameter maxValue: `Int32` - The maximum value for the enumeration's enumerators + /// (used only for the 1.0 encoding). + func write(tag: Int32, val: Int32, maxValue: Int32) { + if writeOptional(tag: tag, format: .Size) { + write(enum: val, maxValue: maxValue) + } + } + + /// Writes a string to the stream. + /// + /// - parameter _: `String` - The string to write. + func write(_ v: String) { + let bytes = v.data(using: .utf8)! + write(size: bytes.count) + data.append(bytes) + } + + /// Writes a string to the stream. + /// + /// - parameter tag: `Int32` - The tag of the optional data member or parameter. + /// + /// - parameter value: `String?` - The string to write. + func write(tag: Int32, value v: String?) { + if let val = v { + if writeOptional(tag: tag, format: .VSize) { + write(val) + } + } + } + + /// Writes a sequence of strings to the stream. + /// + /// - parameter _: `String` - The sequence of strings to write. + func write(_ v: [String]) { + write(size: v.count) + for s in v { + write(s) + } + } + + /// Writes an optional sequence of strings to the stream. + /// + /// - parameter tag: `Int32` - The tag of the optional data member or parameter. + /// + /// - parameter value: `[String]?` - The sequence of strings to write. + func write(tag: Int32, value v: [String]?) { + if let val = v { + if writeOptional(tag: tag, format: .FSize) { + let pos = startSize() + write(val) + endSize(position: pos) + } + } + } + + /// Writes a proxy to the stream. + /// + /// - parameter _: `ObjectPrx?` - The proxy to write. + func write(_ v: ObjectPrx?) { + if let prxImpl = v as? ObjectPrxI { + prxImpl.ice_write(to: self) + } else { + // + // A nil proxy is represented by an Identity with empty name and category fields. + // + write(Identity()) + } + } + + /// Writes an optional proxy to the stream. + /// + /// - parameter tag: `Int32` - The tag of the optional data member or parameter. + /// + /// - parameter value: `ObjectPrx?` - The proxy to write. + func write(tag: Int32, value v: ObjectPrx?) { + if let val = v { + if writeOptional(tag: tag, format: .FSize) { + let pos = startSize() + write(val) + endSize(position: pos) + } + } + } + + /// Writes a value to the stream. + /// + /// - parameter _: `Value?` - The value to write. + func write(_ v: Value?) { + initEncaps() + encaps.encoder.writeValue(v: v) + } + + /// Writes an optional value to the stream. + /// + /// - parameter tag: `Int32` - The tag of the optional data member or parameter. + /// + /// - parameter value: `Value?` - The value to write. + func write(tag: Int32, value v: Value?) { + if let val = v { + if writeOptional(tag: tag, format: .Class) { + write(val) + } + } + } + + /// Writes a user exception to the stream. + /// + /// - parameter _: `UserException` - The user exception to write. + func write(_ v: UserException) { + initEncaps() + encaps.encoder.writeException(v: v) + } + + func writeOptional(tag: Int32, format: OptionalFormat) -> Bool { + precondition(encaps != nil) + if let encoder = encaps.encoder { + return encoder.writeOptional(tag: tag, format: format) + } + return writeOptionalImpl(tag: tag, format: format) + } + + internal func writeOptionalImpl(tag: Int32, format: OptionalFormat) -> Bool { + guard encoding != Encoding_1_0 else { + return false + } + + var v = format.rawValue + if tag < 30 { + v |= UInt8(tag) << 3 + write(v) + + } else { + v |= 0x0F0 // tag = 30 + write(v) + write(size: tag) + } + return true + } + + func writeOptionalVSize(tag: Int32, len: Int, elemSize: Int) -> Bool { + if writeOptional(tag: tag, format: .VSize) { + if elemSize > 1 { + // We optimize-out the size when elemSize == 1 + write(size: len == 0 ? 1 : (len * elemSize) + (len > 254 ? 5 : 1)) + } + return true + } + return false + } + + /// Writes bytes to the stream. + /// + /// - parameter raw: `Data` - The bytes to write as-is. + func write(raw: Data) { + data.append(raw) + } +} + +extension OutputStream: ICEOutputStreamHelper { + public func copy(_ bytes: Data) { + data.append(bytes) + } +} + +private class Encaps { + let start: Int + var format: FormatType + let encoding: EncodingVersion + let encoding_1_0: Bool + + var encoder: EncapsEncoder! + + init(encoding: EncodingVersion, format: FormatType, start: Int) { + self.start = start + self.format = format + self.encoding = encoding + encoding_1_0 = encoding == Encoding_1_0 + } +} + +private enum SliceType { + case NoSlice + case ValueSlice + case ExceptionSlice +} + +private struct ValueHolder: Hashable { + init(_ value: Value) { + self.value = value + } + + func hash(into hasher: inout Hasher) { + hasher.combine(ObjectIdentifier(value).hashValue) + } + + static func == (lhs: ValueHolder, rhs: ValueHolder) -> Bool { + return lhs.value === rhs.value + } + + fileprivate let value: Value +} + +private protocol EncapsEncoder: AnyObject { + var os: OutputStream { get } + var encaps: Encaps { get } + + // Encapsulation attributes for instance marshaling. + var marshaledMap: [ValueHolder: Int32] { get } + var typeIdMap: [String: Int32] { get set } + var typeIdIndex: Int32 { get set } + + init(os: OutputStream, encaps: Encaps) + + func writeValue(v: Value?) + func writeException(v: UserException) + + func startInstance(type: SliceType, data: SlicedData?) + func endInstance() + + func startSlice(typeId: String, compactId: Int32, last: Bool) + func endSlice() + + // Implemented for the 1.0 encoding, not necessary for subsequent encodings. + func writePendingValues() + func writeOptional(tag: Int32, format: OptionalFormat) -> Bool +} + +extension EncapsEncoder { + func writeOptional(tag _: Int32, format _: OptionalFormat) -> Bool { + return false + } + + func writePendingValues() {} + + func registerTypeId(_ typeId: String) -> Int32 { + guard let p = typeIdMap[typeId] else { + typeIdIndex += 1 + typeIdMap[typeId] = typeIdIndex + return -1 + } + return p + } +} + +private final class EncapsEncoder10: EncapsEncoder { + unowned let os: OutputStream + unowned let encaps: Encaps + var marshaledMap: [ValueHolder: Int32] + lazy var typeIdMap: [String: Int32] = [String: Int32]() + var typeIdIndex: Int32 + + // Instance attributes + private var sliceType: SliceType = SliceType.NoSlice + // Slice attributes + private var writeSlice: Int32 = 0 // Position of the slice data members + // Encapsulation attributes for instance marshaling. + private var valueIdIndex: Int32 = 0 + private var toBeMarshaledMap = [ValueHolder: Int32]() + + init(os: OutputStream, encaps: Encaps) { + self.os = os + self.encaps = encaps + marshaledMap = [ValueHolder: Int32]() + typeIdIndex = 0 + } + + func writeValue(v: Value?) { + // + // Value references are encoded as a negative integer in 1.0. + // + if let val = v { + os.write(-registerValue(val)) + } else { + os.write(Int32(0)) + } + } + + func writeException(v: UserException) { + // + // User exception with the 1.0 encoding start with a boolean + // flag that indicates whether or not the exception uses + // classes. + // + // This allows reading the pending instances even if some part of + // the exception was sliced. + // + let usesClasses = v._usesClasses() + os.write(usesClasses) + v._iceWrite(to: os) + if usesClasses { + writePendingValues() + } + } + + func startInstance(type: SliceType, data _: SlicedData?) { + sliceType = type + } + + func endInstance() { + if sliceType == SliceType.ValueSlice { + // + // Write the Object slice. + // + startSlice(typeId: "::Ice::Object", compactId: -1, last: true) + os.write(size: 0) // For compatibility with the old AFM. + endSlice() + } + sliceType = SliceType.NoSlice + } + + func startSlice(typeId: String, compactId _: Int32, last _: Bool) { + // + // For instance slices, encode a boolean to indicate how the type ID + // is encoded and the type ID either as a string or index. For + // exception slices, always encode the type ID as a string. + // + if sliceType == SliceType.ValueSlice { + let index = registerTypeId(typeId) + if index < 0 { + os.write(false) + os.write(typeId) + } else { + os.write(true) + os.write(size: index) + } + } else { + os.write(typeId) + } + + os.write(Int32(0)) // Placeholder for the slice length. + writeSlice = Int32(os.getCount()) + } + + func endSlice() { + // + // Write the slice length. + // + let sz = Int32(os.getCount()) - writeSlice + 4 + os.write(bytesOf: sz, at: Int(writeSlice - 4)) + } + + func writePendingValues() { + while !toBeMarshaledMap.isEmpty { + // + // Consider the to be marshalled instances as marshaled now, + // this is necessary to avoid adding again the "to be + // marshaled instances" into _toBeMarshaledMap while writing + // instances. + // + for (key, value) in toBeMarshaledMap { + marshaledMap[key] = value + } + + let savedMap = toBeMarshaledMap + toBeMarshaledMap = [ValueHolder: Int32]() + os.write(size: savedMap.count) + + for (key, value) in savedMap { + // + // Consider the to be marshalled instances as marshaled now, + // this is necessary to avoid adding again the "to be + // marshaled instances" into _toBeMarshaledMap while writing + // instances. + // + os.write(Int32(value)) + + key.value.ice_preMarshal() + + key.value._iceWrite(to: os) + } + } + os.write(size: 0) // Zero marker indicates end of sequence of sequences of instances. + } + + func registerValue(_ v: Value) -> Int32 { + // + // Look for this instance in the to-be-marshaled map. + // + let val = ValueHolder(v) + if let p = toBeMarshaledMap[val] { + return p + } + + // + // Didn't find it, try the marshaled map next. + // + if let p = marshaledMap[val] { + return p + } + + // + // We haven't seen this instance previously, create a new + // index, and insert it into the to-be-marshaled map. + // + valueIdIndex += 1 + toBeMarshaledMap[val] = valueIdIndex + return valueIdIndex + } +} + +private final class EncapsEncoder11: EncapsEncoder { + unowned let os: OutputStream + unowned let encaps: Encaps + + var marshaledMap: [ValueHolder: Int32] + lazy var typeIdMap: [String: Int32] = [String: Int32]() + var typeIdIndex: Int32 + + var current: InstanceData! + var valueIdIndex: Int32 = 1 // The ID of the next instance to marhsal + + init(os: OutputStream, encaps: Encaps) { + self.os = os + self.encaps = encaps + marshaledMap = [ValueHolder: Int32]() + typeIdIndex = 0 + } + + func writeValue(v: Value?) { + guard let v = v else { + os.write(size: 0) + return + } + + if let current = current, encaps.format == FormatType.SlicedFormat { + // + // If writing an instance within a slice and using the sliced + // format, write an index from the instance indirection + // table. The indirect instance table is encoded at the end of + // each slice and is always read (even if the Slice is + // unknown). + // + let vh = ValueHolder(v) + if let index = current.indirectionMap[vh] { + os.write(size: index) + } else { + current.indirectionTable.append(vh) + let idx = current.indirectionTable.count // Position + 1 (0 is reserved for nil) + current.indirectionMap[vh] = Int32(idx) + os.write(size: idx) + } + } else { + writeInstance(v) // Write the instance or a reference if already marshaled. + } + } + + func writeException(v: UserException) { + v._iceWrite(to: os) + } + + func startInstance(type: SliceType, data: SlicedData?) { + if let curr = current { + current = curr.next ?? InstanceData(previous: curr) + } else { + current = InstanceData(previous: nil) + } + + current!.sliceType = type + current!.firstSlice = true + + if let d = data { + writeSlicedData(d) + } + } + + func endInstance() { + current = current!.previous + } + + func startSlice(typeId: String, compactId: Int32, last: Bool) { + guard let current = current else { + preconditionFailure("current is nil") + } + + precondition(current.indirectionTable.isEmpty && current.indirectionMap.isEmpty) + + current.sliceFlagsPos = Int32(os.getCount()) + current.sliceFlags = [] + + if encaps.format == FormatType.SlicedFormat { + // Encode the slice size if using the sliced format. + current.sliceFlags.insert(.FLAG_HAS_SLICE_SIZE) + } + if last { + current.sliceFlags.insert(.FLAG_IS_LAST_SLICE) // This is the last slice. + } + + os.write(UInt8(0)) // Placeholder for the slice flags + + // + // For instance slices, encode the flag and the type ID either as a + // string or index. For exception slices, always encode the type + // ID a string. + // + if current.sliceType == SliceType.ValueSlice { + // + // Encode the type ID (only in the first slice for the compact + // encoding). + // + if encaps.format == FormatType.SlicedFormat || current.firstSlice { + if compactId >= 0 { + current.sliceFlags.insert(.FLAG_HAS_TYPE_ID_COMPACT) + os.write(size: compactId) + } else { + let index = registerTypeId(typeId) + if index < 0 { + current.sliceFlags.insert(.FLAG_HAS_TYPE_ID_STRING) + os.write(typeId) + } else { + current.sliceFlags.insert(.FLAG_HAS_TYPE_ID_INDEX) + os.write(size: index) + } + } + } + } else { + os.write(typeId) + } + + if current.sliceFlags.contains(.FLAG_HAS_SLICE_SIZE) { + os.write(Int32(0)) // Placeholder for the slice length. + } + + current.writeSlice = Int32(os.getCount()) + current.firstSlice = false + } + + func endSlice() { + guard let current = current else { + preconditionFailure("current is nil") + } + // + // Write the optional member end marker if some optional members + // were encoded. Note that the optional members are encoded before + // the indirection table and are included in the slice size. + // + if current.sliceFlags.contains(.FLAG_HAS_OPTIONAL_MEMBERS) { + os.write(SliceFlags.OPTIONAL_END_MARKER.rawValue) + } + + // + // Write the slice length if necessary. + // + if current.sliceFlags.contains(.FLAG_HAS_SLICE_SIZE) { + let sz: Int32 = Int32(os.getCount()) - current.writeSlice + 4 + os.write(bytesOf: sz, at: Int(current.writeSlice - 4)) + } + + // + // Only write the indirection table if it contains entries. + // + if !current.indirectionTable.isEmpty { + precondition(encaps.format == FormatType.SlicedFormat) + current.sliceFlags.insert(.FLAG_HAS_INDIRECTION_TABLE) + + // + // Write the indirection instance table. + // + os.write(size: current.indirectionTable.count) + for v in current.indirectionTable { + writeInstance(v.value) + } + + current.indirectionTable.removeAll() + current.indirectionMap.removeAll() + } + + // + // Finally, update the slice flags. + // + os.write(bytesOf: current.sliceFlags.rawValue, at: Int(current.sliceFlagsPos)) + } + + func writeOptional(tag: Int32, format: OptionalFormat) -> Bool { + guard let current = current else { + return os.writeOptionalImpl(tag: tag, format: format) + } + + if os.writeOptionalImpl(tag: tag, format: format) { + current.sliceFlags.insert(.FLAG_HAS_OPTIONAL_MEMBERS) + return true + } else { + return false + } + } + + func writeSlicedData(_ slicedData: SlicedData) { + // + // We only remarshal preserved slices if we are using the sliced + // format. Otherwise, we ignore the preserved slices, which + // essentially "slices" the instance into the most-derived type + // known by the sender. + // + guard encaps.format == .SlicedFormat else { + return + } + + for info in slicedData.slices { + startSlice(typeId: info.typeId, compactId: info.compactId, last: info.isLastSlice) + + // + // Write the bytes associated with this slice. + // + os.write(raw: info.bytes) + + if info.hasOptionalMembers { + current.sliceFlags.insert(.FLAG_HAS_OPTIONAL_MEMBERS) + } + + // + // Make sure to also re-write the instance indirection table. + // + for o in info.instances { + current.indirectionTable.append(ValueHolder(o!)) + } + + endSlice() + } + } + + func writeInstance(_ v: Value) { + // + // If the instance was already marshaled, just write it's ID. + // + if let p = marshaledMap[ValueHolder(v)] { + os.write(size: p) + return + } + + // + // We haven't seen this instance previously, create a new ID, + // insert it into the marshaled map, and write the instance. + // + valueIdIndex += 1 + marshaledMap[ValueHolder(v)] = valueIdIndex + + v.ice_preMarshal() + os.write(size: 1) // Class instance marker. + v._iceWrite(to: os) + } +} + +private class InstanceData { + // Instance attributes + var sliceType: SliceType = SliceType.NoSlice + var firstSlice: Bool = true + + // Slice attributes + var sliceFlags: SliceFlags = [] + var writeSlice: Int32 = 0 // Position of the slice data members + var sliceFlagsPos: Int32 = 0 // Position of the slice flags + lazy var indirectionTable = [ValueHolder]() + lazy var indirectionMap = [ValueHolder: Int32]() + + let previous: InstanceData? + var next: InstanceData? + + init(previous: InstanceData?) { + self.previous = previous + next = nil + if let p = previous { + p.next = self + } + } +} diff --git a/swift/src/Ice/ProcessI.swift b/swift/src/Ice/ProcessI.swift new file mode 100644 index 00000000000..2260dee925e --- /dev/null +++ b/swift/src/Ice/ProcessI.swift @@ -0,0 +1,15 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import IceObjc + +class ProcessI: LocalObject<ICEProcess>, Process { + func shutdown(current _: Current) { + handle.shutdown() + } + + func writeMessage(message: Swift.String, fd: Swift.Int32, current _: Current) { + handle.writeMessage(message, fd: fd) + } +} diff --git a/swift/src/Ice/PropertiesAdminI.swift b/swift/src/Ice/PropertiesAdminI.swift new file mode 100644 index 00000000000..8da8603e54b --- /dev/null +++ b/swift/src/Ice/PropertiesAdminI.swift @@ -0,0 +1,38 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import IceObjc + +class PropertiesAdminI: LocalObject<ICEPropertiesAdmin>, PropertiesAdmin, NativePropertiesAdmin { + private let communicator: Communicator + + init(communicator: Communicator, handle: ICEPropertiesAdmin) { + self.communicator = communicator + super.init(handle: handle) + } + + func getProperty(key: Swift.String, current _: Current) throws -> Swift.String { + return try autoreleasepool { + try handle.getProperty(key) + } + } + + func getPropertiesForPrefix(prefix: Swift.String, current _: Current) throws -> PropertyDict { + return try autoreleasepool { + try handle.getPropertiesForPrefix(prefix) + } + } + + func setProperties(newProperties: PropertyDict, current _: Current) throws { + try autoreleasepool { + try handle.setProperties(newProperties) + } + } + + func addUpdateCallback(_ cb: @escaping PropertiesAdminUpdateCallback) -> PropertiesAdminRemoveCallback { + return handle.addUpdateCallback { (props: PropertyDict) in + cb(props) + } + } +} diff --git a/swift/src/Ice/PropertiesI.swift b/swift/src/Ice/PropertiesI.swift new file mode 100644 index 00000000000..e665e0bb582 --- /dev/null +++ b/swift/src/Ice/PropertiesI.swift @@ -0,0 +1,72 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import IceObjc + +class PropertiesI: LocalObject<ICEProperties>, Properties { + public func getProperty(_ key: String) -> String { + return handle.getProperty(key) + } + + public func getPropertyWithDefault(key: String, value: String) -> String { + return handle.getPropertyWithDefault(key, value: value) + } + + public func getPropertyAsInt(_ key: String) -> Int32 { + return handle.getPropertyAsInt(key) + } + + public func getPropertyAsIntWithDefault(key: String, value: Int32) -> Int32 { + return handle.getPropertyAsIntWithDefault(key: key, value: value) + } + + public func getPropertyAsList(_ key: String) -> StringSeq { + return handle.getPropertyAsList(key) + } + + public func getPropertyAsListWithDefault(key: String, value: StringSeq) -> StringSeq { + return handle.getPropertyAsListWithDefault(key: key, value: value) + } + + public func getPropertiesForPrefix(_ prefix: String) -> PropertyDict { + return handle.getPropertiesForPrefix(prefix) + } + + public func setProperty(key: String, value: String) { + precondition(!key.isEmpty, "Key cannot be empty") + do { + try autoreleasepool { + try handle.setProperty(key, value: value) + } + } catch { + fatalError("\(error)") + } + } + + public func getCommandLineOptions() -> StringSeq { + return handle.getCommandLineOptions() + } + + public func parseCommandLineOptions(prefix: String, options: StringSeq) throws -> StringSeq { + return try autoreleasepool { + try handle.parseCommandLineOptions(prefix, options: options) + } + } + + public func parseIceCommandLineOptions(_ options: StringSeq) throws -> StringSeq { + return try autoreleasepool { + try handle.parseIceCommandLineOptions(options) + } + } + + public func load(_ file: String) throws { + return try autoreleasepool { + try handle.load(file) + } + } + + public func clone() -> Properties { + return PropertiesI(handle: handle.clone()) + } +} diff --git a/swift/src/Ice/Proxy.swift b/swift/src/Ice/Proxy.swift new file mode 100644 index 00000000000..c5dce337781 --- /dev/null +++ b/swift/src/Ice/Proxy.swift @@ -0,0 +1,1419 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Foundation +import IceObjc +import PromiseKit + +/// The base protocol for all Ice proxies. +public protocol ObjectPrx: CustomStringConvertible, AnyObject { + /// Returns the communicator that created this proxy. + /// + /// - returns: `Ice.Communicator` - The communicator that created this proxy. + func ice_getCommunicator() -> Communicator + + /// Returns the identity embedded in this proxy. + /// + /// - returns: `Ice.Identity` - The identity of the target object. + func ice_getIdentity() -> Identity + + /// Creates a new proxy that is identical to this proxy, except for the identity. + /// + /// - parameter _: `Ice.Identity` - The identity for the new proxy. + /// + /// - returns: A proxy with the new identity. + func ice_identity(_ id: Identity) -> Self + + /// Returns the per-proxy context for this proxy. + /// + /// - returns: `Ice.Context` - The per-proxy context. + func ice_getContext() -> Context + + /// Creates a new proxy that is identical to this proxy, except for the per-proxy context. + /// + /// - parameter newContext: `Ice.Context` - The context for the new proxy. + /// + /// - returns: The proxy with the new per-proxy context. + func ice_context(_ context: Context) -> Self + + /// Returns the facet for this proxy. + /// + /// - returns: `String` - The facet for this proxy. If the proxy uses the default facet, + /// the return value is the empty string. + func ice_getFacet() -> String + + /// Creates a new proxy that is identical to this proxy, except for the facet. + /// + /// - parameter _: `String` - The facet for the new proxy. + /// + /// - returns: `Ice.ObjectPrx` - The proxy with the new facet. + func ice_facet(_ facet: String) -> ObjectPrx + + /// Returns the adapter ID for this proxy. + /// + /// - returns: `String` - The adapter ID. If the proxy does not have an adapter ID, the return value is the + /// empty string. + func ice_getAdapterId() -> String + + /// Creates a new proxy that is identical to this proxy, except for the adapter ID. + /// + /// - parameter _: `String` - The adapter ID for the new proxy. + /// + /// - returns: The proxy with the new adapter ID. + func ice_adapterId(_ id: String) -> Self + + /// Returns the endpoints used by this proxy. + /// + /// - returns: `EndpointSeq` - The endpoints used by this proxy. + func ice_getEndpoints() -> EndpointSeq + + /// Creates a new proxy that is identical to this proxy, except for the endpoints. + /// + /// - parameter _: `EndpointSeq` - The endpoints for the new proxy. + /// + /// - returns: The proxy with the new endpoints. + func ice_endpoints(_ endpoints: EndpointSeq) -> Self + + /// Returns the locator cache timeout of this proxy. + /// + /// - returns: `Int32` - The locator cache timeout value (in seconds). + func ice_getLocatorCacheTimeout() -> Int32 + + /// Creates a new proxy that is identical to this proxy, except for the locator cache timeout. + /// + /// - parameter _: `Int32` - The new locator cache timeout (in seconds). + /// + /// - returns: A new proxy with the specified cache timeout. + func ice_locatorCacheTimeout(_ timeout: Int32) -> Self + + /// Returns the invocation timeout of this proxy. + /// + /// - returns: `Int32` - The invocation timeout value (in seconds). + func ice_getInvocationTimeout() -> Int32 + + /// Creates a new proxy that is identical to this proxy, except for the invocation timeout. + /// + /// - parameter _: `Int32` - The new invocation timeout (in seconds). + /// + /// - returns: A new proxy with the specified invocation timeout. + func ice_invocationTimeout(_ timeout: Int32) -> Self + + /// Returns the connection id of this proxy. + /// + /// returns: `String` - The connection id. + func ice_getConnectionId() -> String + + /// Creates a new proxy that is identical to this proxy, except for its connection ID. + /// + /// - parameter _: `String` - The connection ID for the new proxy. An empty string removes the + /// connection ID. + /// + /// - returns: A new proxy with the specified connection ID. + func ice_connectionId(_ id: String) -> Self + + /// Returns whether this proxy caches connections. + /// + /// - returns: `Bool` - True if this proxy caches connections; false, otherwise. + func ice_isConnectionCached() -> Bool + + /// Creates a new proxy that is identical to this proxy, except for connection caching. + /// + /// - parameter _: `Bool` - True if the new proxy should cache connections; false, otherwise. + /// + /// - returns: The new proxy with the specified caching policy. + func ice_connectionCached(_ cached: Bool) -> Self + + /// Returns how this proxy selects endpoints (randomly or ordered). + /// + /// - returns: `Ice.EndpointSelectionType` - The endpoint selection policy. + func ice_getEndpointSelection() -> EndpointSelectionType + + /// Creates a new proxy that is identical to this proxy, except for the endpoint selection policy. + /// + /// - parameter _: `Ice.EndpointSelectionType` - The new endpoint selection policy. + /// + /// - returns: The new proxy with the specified endpoint selection policy. + func ice_endpointSelection(_ type: EndpointSelectionType) -> Self + + /// Returns the encoding version used to marshal requests parameters. + /// + /// - returns: `Ice.EncodingVersion` - The encoding version. + func ice_getEncodingVersion() -> EncodingVersion + + /// Creates a new proxy that is identical to this proxy, except for the encoding used to marshal + /// parameters. + /// + /// - parameter _: `Ice.EncodingVersion` - The encoding version to use to marshal requests parameters. + /// + /// - returns: The new proxy with the specified encoding version. + func ice_encodingVersion(_ encoding: EncodingVersion) -> Self + + /// Returns the router for this proxy. + /// + /// - returns: `Ice.RouterPrx?` - The router for the proxy. If no router is configured for the proxy, + /// the return value is nil. + func ice_getRouter() -> RouterPrx? + + /// Creates a new proxy that is identical to this proxy, except for the router. + /// + /// - parameter router: `Ice.RouterPrx?` - The router for the new proxy. + /// + /// - returns: The new proxy with the specified router. + func ice_router(_ router: RouterPrx?) -> Self + + /// Returns the locator for this proxy. + /// + /// - returns: `Ice.LocatorPrx?` - The locator for this proxy. If no locator is configured, the + /// return value is nil. + func ice_getLocator() -> LocatorPrx? + + /// Creates a new proxy that is identical to this proxy, except for the locator. + /// + /// - parameter _: `Ice.LocatorPrx` The locator for the new proxy. + /// + /// - returns: The new proxy with the specified locator. + func ice_locator(_ locator: LocatorPrx?) -> Self + + /// Returns whether this proxy communicates only via secure endpoints. + /// + /// - returns: `Bool` - True if this proxy communicates only via secure endpoints; false, otherwise. + func ice_isSecure() -> Bool + + /// Creates a new proxy that is identical to this proxy, except for how it selects endpoints. + /// + /// - parameter _: `Bool` - If true only endpoints that use a secure transport are used by the new proxy. + /// otherwise the returned proxy uses both secure and insecure endpoints. + /// + /// - returns: The new proxy with the specified selection policy. + func ice_secure(_ secure: Bool) -> Self + + /// Returns whether this proxy prefers secure endpoints. + /// + /// - returns: `Bool` - True if the proxy always attempts to invoke via secure endpoints before it + /// attempts to use insecure endpoints; false, otherwise. + func ice_isPreferSecure() -> Bool + + /// Creates a new proxy that is identical to this proxy, except for its endpoint selection policy. + /// + /// - parameter _: `Bool` - If true, the new proxy will use secure endpoints for invocations + /// and only use insecure endpoints if an invocation cannot be made via secure endpoints. Otherwise + /// the proxy prefers insecure endpoints to secure ones. + /// + /// - returns: The new proxy with the new endpoint selection policy. + func ice_preferSecure(_ preferSecure: Bool) -> Self + + /// Returns whether this proxy uses twoway invocations. + /// + /// - returns: `Bool` - True if this proxy uses twoway invocations; false, otherwise. + func ice_isTwoway() -> Bool + + /// Creates a new proxy that is identical to this proxy, but uses twoway invocations. + /// + /// - returns: A new proxy that uses twoway invocations. + func ice_twoway() -> Self + + /// Returns whether this proxy uses oneway invocations. + /// + /// - returns: `Bool` - True if this proxy uses oneway invocations; false, otherwise. + func ice_isOneway() -> Bool + + /// Creates a new proxy that is identical to this proxy, but uses oneway invocations. + /// + /// - returns: A new proxy that uses oneway invocations. + func ice_oneway() -> Self + + /// Returns whether this proxy uses batch oneway invocations. + /// + /// - returns: `Bool` - True if this proxy uses batch oneway invocations; false, otherwise. + func ice_isBatchOneway() -> Bool + + /// Creates a new proxy that is identical to this proxy, but uses batch oneway invocations. + /// + /// - returns: A new proxy that uses batch oneway invocations. + func ice_batchOneway() -> Self + + /// Returns whether this proxy uses datagram invocations. + /// + /// - returns: `Bool` - True if this proxy uses datagram invocations; false, otherwise. + func ice_isDatagram() -> Bool + + /// Creates a new proxy that is identical to this proxy, but uses datagram invocations. + /// + /// - returns: A new proxy that uses datagram invocations. + func ice_datagram() -> Self + + /// Returns whether this proxy uses batch datagram invocations. + /// + /// - returns: `Bool` - True if this proxy uses batch datagram invocations; false, otherwise. + func ice_isBatchDatagram() -> Bool + + /// Creates a new proxy that is identical to this proxy, but uses batch datagram invocations. + /// + /// - returns: A new proxy that uses batch datagram invocations. + func ice_batchDatagram() -> Self + + /// Obtains the compression override setting of this proxy. + /// + /// - returns: `Bool` - The compression override setting. If no optional value is present, no override is + /// set. Otherwise, true if compression is enabled, false otherwise. + func ice_getCompress() -> Bool? + + /// Creates a new proxy that is identical to this proxy, except for compression. + /// + /// - parameter _: `Bool` - True enables compression for the new proxy; false disables compression. + /// + /// - returns: A new proxy with the specified compression setting. + func ice_compress(_ compress: Bool) -> Self + + /// Obtains the timeout override of this proxy. + /// + /// - returns: `Int32?` - The timeout override. If no optional value is present, no override is set. + /// Otherwise, returns the timeout override value. + func ice_getTimeout() -> Int32? + + /// Creates a new proxy that is identical to this proxy, except for its timeout setting. + /// + /// - parameter _: `Int32` - The timeout for the new proxy in milliseconds. + /// + /// - returns: A new proxy with the specified timeout. + func ice_timeout(_ timeout: Int32) -> Self + + /// Returns a proxy that is identical to this proxy, except it's a fixed proxy bound + /// to the given connection. + /// + /// - parameter _: `Ice.Connection` - The fixed proxy connection. + /// + /// - returns: A fixed proxy bound to the given connection. + func ice_fixed(_ connection: Connection) -> Self + + /// Returns whether this proxy is a fixed proxy. + /// + /// - returns: `Bool` - True if this is a fixed proxy, false otherwise. + func ice_isFixed() -> Bool + + /// Returns the cached Connection for this proxy. If the proxy does not yet have an established + /// connection, it does not attempt to create a connection. + /// + /// - returns: `Ice.Connection?` - The cached Connection for this proxy (nil if the proxy does not have + /// an established connection). + /// + /// - throws: `CollocationOptimizationException` - If the proxy uses collocation optimization and denotes a + /// collocated object. + func ice_getCachedConnection() -> Connection? + + /// Returns the stringified form of this proxy. + /// + /// - returns: `String` - The stringified proxy + func ice_toString() -> String + + /// Returns whether this proxy uses collocation optimization. + /// + /// - returns: `Bool` - True if the proxy uses collocation optimization; false, otherwise. + func ice_isCollocationOptimized() -> Bool + + /// Creates a new proxy that is identical to this proxy, except for collocation optimization. + /// + /// - parameter _: `Bool` - True if the new proxy enables collocation optimization; false, otherwise. + /// + /// - returns: The new proxy the specified collocation optimization. + func ice_collocationOptimized(_ collocated: Bool) -> Self +} + +/// Casts a proxy to `Ice.ObjectPrx`. This call contacts the server and will throw an Ice run-time exception +/// if the target object does not exist or the server cannot be reached. +/// +/// - parameter prx: `Ice.ObjectPrx` - The proxy to cast to `Ice.ObjectPrx`. +/// +/// - parameter type: `Ice.ObjectPrx.Protocol` - The proxy type to cast to. +/// +/// - parameter facet: `String?` - The optional facet for the new proxy. +/// +/// - parameter context: `Ice.Context?` - The optional context dictionary for the invocation. +/// +/// - throws: Throws an Ice run-time exception if the target object does not exist, the specified facet +/// does not exist, or the server cannot be reached. +/// +/// - returns: The new proxy with the specified facet or nil if the target object does not support the specified +/// interface. +public func checkedCast(prx: Ice.ObjectPrx, + type _: ObjectPrx.Protocol, + facet: String? = nil, + context: Ice.Context? = nil) throws -> ObjectPrx? { + return try ObjectPrxI.checkedCast(prx: prx, facet: facet, context: context) as ObjectPrxI? +} + +/// Creates a new proxy that is identical to the passed proxy, except for its facet. This call does +/// not contact the server and always succeeds. +/// +/// - parameter prx: `Ice.ObjectPrx` - The proxy to cast to `Ice.ObjectPrx`. +/// +/// - parameter type: `Ice.ObjectPrx.Protocol` - The proxy type to cast to. +/// +/// - parameter facet: `String?` - The optional facet for the new proxy. +/// +/// - returns: The new proxy with the specified facet. +public func uncheckedCast(prx: Ice.ObjectPrx, + type _: ObjectPrx.Protocol, + facet: String? = nil) -> ObjectPrx { + return ObjectPrxI.uncheckedCast(prx: prx, facet: facet) as ObjectPrxI +} + +/// Returns the Slice type id of the interface or class associated with this proxy class. +/// +/// - returns: `String` - The type id, "::Ice::Object". +public func ice_staticId(_: ObjectPrx.Protocol) -> Swift.String { + return ObjectTraits.staticId +} + +public func != (lhs: ObjectPrx?, rhs: ObjectPrx?) -> Bool { + return !(lhs == rhs) +} + +public func == (lhs: ObjectPrx?, rhs: ObjectPrx?) -> Bool { + if lhs === rhs { + return true + } else if lhs === nil && rhs === nil { + return true + } else if lhs === nil || rhs === nil { + return false + } else { + let lhsI = lhs as! ObjectPrxI + let rhsI = rhs as! ObjectPrxI + return lhsI.handle.isEqual(rhsI.handle) + } +} + +public extension ObjectPrx { + /// Returns the underdlying implementation object (Ice internal). + var _impl: ObjectPrxI { + return self as! ObjectPrxI + } + + /// Sends ping request to the target object. + /// + /// - parameter context: `Ice.Context` - The optional context dictionary for the invocation. + /// + /// - throws: `Ice.LocalException` such as `Ice.ObjectNotExistException` and + /// `Ice.ConnectionRefusedException`. + func ice_ping(context: Context? = nil) throws { + try _impl._invoke(operation: "ice_ping", + mode: OperationMode.Nonmutating, + context: context) + } + + /// Sends ping request to the target object asynchronously. + /// + /// - parameter context: `Ice.Context` - The optional context dictionary for the invocation. + /// + /// - parameter sentOn: `Dispatch.DispatchQueue` - Optional dispatch queue used to + /// dispatch sent callback, the default is to use `PromiseKit.conf.Q.return` queue. + /// + /// - parameter sentFlags: `Dispatch.DispatchWorkItemFlags` - Optional dispatch flags used to + /// dispatch sent callback + /// + /// - parameter sent: `((Swift.Bool) -> Swift.Void)` - Optional sent callback. + /// + /// - returns: `PromiseKit.Promise<Void>` - A promise object that will be resolved with + /// the return values of invocation. + func ice_pingAsync(context: Context? = nil, + sentOn: DispatchQueue? = PromiseKit.conf.Q.return, + sentFlags: DispatchWorkItemFlags? = nil, + sent: ((Bool) -> Void)? = nil) -> Promise<Void> { + return _impl._invokeAsync(operation: "ice_ping", + mode: .Nonmutating, + context: context, + sentOn: sentOn, + sentFlags: sentFlags, + sent: sent) + } + + /// Tests whether this object supports a specific Slice interface. + /// + /// - parameter id: `String` - The type ID of the Slice interface to test against. + /// + /// - parameter context: `Ice.Context` - The optional context dictionary for the invocation. + /// + /// - returns: `Bool` - True if the target object has the interface specified by id or derives + /// from the interface specified by id. + func ice_isA(id: String, context: Context? = nil) throws -> Bool { + return try _impl._invoke(operation: "ice_isA", + mode: .Nonmutating, + write: { ostr in + ostr.write(id) + }, + read: { istr in try istr.read() as Bool }, + context: context) + } + + /// Tests whether this object supports a specific Slice interface. + /// + /// - parameter id: `String` - The type ID of the Slice interface to test against. + /// + /// - parameter context: `Ice.Context` - The optional context dictionary for the invocation. + /// + /// - parameter sentOn: `Dispatch.DispatchQueue` - Optional dispatch queue used to + /// dispatch sent callback, the default is to use `PromiseKit.conf.Q.return` queue. + /// + /// - parameter sentFlags: `Dispatch.DispatchWorkItemFlags` - Optional dispatch flags used to + /// dispatch sent callback + /// + /// - parameter sent: `((Bool) -> Void)` - Optional sent callback. + /// + /// - returns: `PromiseKit.Promise<Bool>` - A promise object that will be resolved with + /// the return values of invocation. + func ice_isAAsync(id: String, context: Context? = nil, + sentOn: DispatchQueue? = PromiseKit.conf.Q.return, + sentFlags: DispatchWorkItemFlags? = nil, + sent: ((Bool) -> Void)? = nil) -> Promise<Bool> { + return _impl._invokeAsync(operation: "ice_isA", + mode: .Nonmutating, + write: { ostr in + ostr.write(id) + }, + read: { istr in try istr.read() as Bool }, + context: context, + sentOn: sentOn, + sentFlags: sentFlags, + sent: sent) + } + + /// Returns the Slice type ID of the most-derived interface supported by the target object of this proxy. + /// + /// - parameter context: `Ice.Context?` - The optional context dictionary for the invocation. + /// + /// - returns: `String` - The Slice type ID of the most-derived interface. + func ice_id(context: Context? = nil) throws -> String { + return try _impl._invoke(operation: "ice_id", + mode: .Nonmutating, + read: { istr in try istr.read() as String }, + context: context) + } + + /// Returns the Slice type ID of the most-derived interface supported by the target object of this proxy. + /// + /// - parameter context: `Ice.Context?` - The optional context dictionary for the invocation. + /// + /// - parameter sentOn: `Dispatch.DispatchQueue` - Optional dispatch queue used to + /// dispatch sent callback, the default is to use `PromiseKit.conf.Q.return` queue. + /// + /// - parameter sentFlags: `Dispatch.DispatchWorkItemFlags` - Optional dispatch flags used to + /// dispatch sent callback + /// + /// - parameter sent: `((Bool) -> Void)` - Optional sent callback. + /// + /// - returns: `PromiseKit.Promise<String>` A promise object that will be resolved with + /// the return values of invocation. + func ice_idAsync(context: Context? = nil, + sentOn: DispatchQueue? = PromiseKit.conf.Q.return, + sentFlags: DispatchWorkItemFlags? = nil, + sent: ((Bool) -> Void)? = nil) -> Promise<String> { + return _impl._invokeAsync(operation: "ice_id", + mode: .Nonmutating, + read: { istr in try istr.read() as String }, + context: context, + sentOn: sentOn, + sentFlags: sentFlags, + sent: sent) + } + + /// Returns the Slice type IDs of the interfaces supported by the target object of this proxy. + /// + /// - parameter context: `Ice.Context?` - The optional context dictionary for the invocation. + /// + /// - returns: `Ice.StringSeq` - The Slice type IDs of the interfaces supported by the target object, + /// in base-to-derived order. The first element of the returned array is always `::Ice::Object`. + func ice_ids(context: Context? = nil) throws -> StringSeq { + return try _impl._invoke(operation: "ice_ids", + mode: .Nonmutating, + read: { istr in try istr.read() as StringSeq }, + context: context) + } + + /// Returns the Slice type IDs of the interfaces supported by the target object of this proxy. + /// + /// - parameter context: `Ice.Context?` - The optional context dictionary for the invocation. + /// + /// - parameter sentOn: `Dispatch.DispatchQueue` - Optional dispatch queue used to + /// dispatch sent callback, the default is to use `PromiseKit.conf.Q.return` queue. + /// + /// - parameter sentFlags: `Dispatch.DispatchWorkItemFlags` - Optional dispatch flags used to + /// dispatch sent callback + /// + /// - parameter sent: `((Bool) -> Void)` - Optional sent callback. + /// + /// - returns: `PromiseKit.Promise<Ice.StringSeq>` - A promise object that will be resolved with + /// the return values of invocation. + func ice_idsAsync(context: Context? = nil, + sentOn: DispatchQueue? = PromiseKit.conf.Q.return, + sentFlags: DispatchWorkItemFlags? = nil, + sent: ((Bool) -> Void)? = nil) -> Promise<StringSeq> { + return _impl._invokeAsync(operation: "ice_ids", + mode: .Nonmutating, + read: { istr in try istr.read() as StringSeq }, + context: context, + sentOn: sentOn, + sentFlags: sentFlags, + sent: sent) + } + + /// Invokes an operation dynamically. + /// + /// - parameter operation: `String` - The name of the operation to invoke. + /// + /// - parameter mode: `Ice.OperationMode` - The operation mode (normal or idempotent). + /// + /// - parameter inEncaps: `Data` - The encoded in-parameters for the operation. + /// + /// - parameter context: `Ice.Context` - The context dictionary for the invocation. + /// + /// - returns: A tuple with the following fields: + /// + /// - ok: `Bool` - If the operation completed successfully, the value + /// is set to true. If the operation raises a user exception, the return value + /// is false; in this case, outEncaps contains the encoded user exception. If + /// the operation raises a run-time exception, it throws it directly. + /// + /// - outEncaps: `Data` - The encoded out-paramaters and return value for the operation. + /// The return value follows any out-parameters. + func ice_invoke(operation: String, + mode: OperationMode, + inEncaps: Data, + context: Context? = nil) throws -> (ok: Bool, outEncaps: Data) { + if _impl.isTwoway { + var data: Data? + var ok: Bool = false + try _impl.handle.invoke(operation, mode: mode.rawValue, inParams: inEncaps, context: context) { + ok = $0 + data = Data($1) // make a copy + } + return (ok, data!) + } else { + try _impl.handle.onewayInvoke(operation, mode: mode.rawValue, inParams: inEncaps, context: context) + return (true, Data()) + } + } + + /// Invokes an operation dynamically. + /// + /// - parameter operation: `String` - The name of the operation to invoke. + /// + /// - parameter mode: `Ice.OperationMode` - The operation mode (normal or idempotent). + /// + /// - parameter inEncaps: `Data` - The encoded in-parameters for the operation. + /// + /// - parameter context: `Ice.Context` - The context dictionary for the invocation. + /// + /// - parameter sentOn: `Dispatch.DispatchQueue` - Optional dispatch queue used to + /// dispatch sent callback, the default is to use `PromiseKit.conf.Q.return` queue. + /// + /// - parameter sentFlags: `Dispatch.DispatchWorkItemFlags` - Optional dispatch flags used to + /// dispatch sent callback. + /// + /// - parameter sent: `((Bool) -> Void)` - Optional sent callback. + /// + /// - returns: `PromiseKit.Promise<(ok: Bool, outEncaps: Data)>` - A promise object that will be + //// resolved with the return values of the invocation. + func ice_invokeAsync(operation: String, + mode: OperationMode, + inEncaps: Data, + context: Context? = nil, + sentOn: DispatchQueue? = nil, + sentFlags: DispatchWorkItemFlags? = nil, + sent: ((Bool) -> Void)? = nil) -> Promise<(ok: Bool, outEncaps: Data)> { + if _impl.isTwoway { + return Promise<(ok: Bool, outEncaps: Data)> { seal in + _impl.handle.invokeAsync(operation, + mode: mode.rawValue, + inParams: inEncaps, + context: context, + response: { ok, encaps in + do { + let istr = + InputStream(communicator: self._impl.communicator, + encoding: self._impl.encoding, + bytes: Data(encaps)) // make a copy + seal.fulfill((ok, try istr.readEncapsulation().bytes)) + } catch { + seal.reject(error) + } + }, + exception: { error in + seal.reject(error) + }, + sent: createSentCallback(sentOn: sentOn, + sentFlags: sentFlags, + sent: sent)) + } + } else { + let sentCB = createSentCallback(sentOn: sentOn, sentFlags: sentFlags, sent: sent) + return Promise<(ok: Bool, outEncaps: Data)> { seal in + _impl.handle.invokeAsync(operation, + mode: mode.rawValue, + inParams: inEncaps, + context: context, + response: { _, _ in + fatalError("Unexpected response") + }, + exception: { error in + seal.reject(error) + }, + sent: { + seal.fulfill((true, Data())) + if let sentCB = sentCB { + sentCB($0) + } + }) + } + } + } + + /// Returns the connection for this proxy. If the proxy does not yet have an established connection, + /// it first attempts to create a connection. + /// + /// - returns: `Ice.Connection?` - The Connection for this proxy. + /// + /// - throws: `Ice.CollocationOptimizationException` - If the proxy uses collocation optimization and denotes a + /// collocated object. + func ice_getConnection() throws -> Connection? { + return try autoreleasepool { + // + // Returns Any which is either NSNull or ICEConnection + // + guard let handle = try _impl.handle.ice_getConnection() as? ICEConnection else { + return nil + } + return handle.getSwiftObject(ConnectionI.self) { ConnectionI(handle: handle) } + } + } + + /// Returns the connection for this proxy. If the proxy does not yet have an established connection, + /// it first attempts to create a connection. + /// + /// - returns: `PromiseKit.Promise<Ice.Connection?>` - A promise object that will be resolved with + /// the return values of invocation. + /// + /// - throws: `Ice.CollocationOptimizationException` - If the proxy uses collocation optimization and denotes a + /// collocated object. + func ice_getConnectionAsync() -> Promise<Connection?> { + return Promise<Connection?> { seal in + self._impl.handle.ice_getConnectionAsync({ conn in + seal.fulfill(conn?.getSwiftObject(ConnectionI.self) { + ConnectionI(handle: conn!) + }) + }, exception: { ex in seal.reject(ex) }) + } + } + + /// Flushes any pending batched requests for this communicator. The call blocks until the flush is complete. + func ice_flushBatchRequests() throws { + return try autoreleasepool { + try _impl.handle.ice_flushBatchRequests() + } + } + + /// Asynchronously flushes any pending batched requests for this proxy. + /// + /// - parameter sentOn: `Dispatch.DispatchQueue` - Optional dispatch queue used to + /// dispatch sent callback, the default is to use `PromiseKit.conf.Q.return` queue. + /// + /// - parameter sentFlags: `Dispatch.DispatchWorkItemFlags` Optional dispatch flags used to + /// dispatch sent callback. + /// + /// - parameter sent: `((Bool) -> Void)` - Optional sent callback. + /// + /// - returns: `PromiseKit.Promise<Void> - A promise object that will be resolved when + /// the flush is complete. + func ice_flushBatchRequestsAsync(sentOn: DispatchQueue? = PromiseKit.conf.Q.return, + sentFlags: DispatchWorkItemFlags? = nil.self, + sent: ((Bool) -> Void)? = nil) -> Promise<Void> { + let sentCB = createSentCallback(sentOn: sentOn, sentFlags: sentFlags, sent: sent) + return Promise<Void> { seal in + _impl.handle.ice_flushBatchRequestsAsync( + exception: { + seal.reject($0) + }, + sent: { + seal.fulfill(()) + if let sentCB = sentCB { + sentCB($0) + } + } + ) + } + } +} + +// +// ObjectPrxI, the base proxy implementation class is an Ice-internal class used in the +// generated code - this is why we give it the open access level. +// +open class ObjectPrxI: ObjectPrx { + internal let handle: ICEObjectPrx + internal let communicator: Communicator + internal let encoding: EncodingVersion + fileprivate let isTwoway: Bool + + public var description: String { + return handle.ice_toString() + } + + public required init(handle: ICEObjectPrx, communicator: Communicator) { + self.handle = handle + self.communicator = communicator + var encoding = EncodingVersion() + handle.ice_getEncodingVersion(&encoding.major, minor: &encoding.minor) + self.encoding = encoding + isTwoway = handle.ice_isTwoway() + } + + public required init(from prx: ObjectPrx) { + let impl = prx as! ObjectPrxI + handle = impl.handle + communicator = impl.communicator + encoding = impl.encoding + isTwoway = impl.isTwoway + } + + internal func fromICEObjectPrx<ObjectPrxType>(_ h: ICEObjectPrx) -> ObjectPrxType where ObjectPrxType: ObjectPrxI { + return ObjectPrxType(handle: h, communicator: communicator) + } + + internal static func fromICEObjectPrx(handle: ICEObjectPrx, + communicator c: Communicator? = nil) -> Self { + let communicator = c ?? handle.ice_getCommunicator().getCachedSwiftObject(CommunicatorI.self) + return self.init(handle: handle, communicator: communicator) + } + + public func ice_getCommunicator() -> Communicator { + return communicator + } + + open class func ice_staticId() -> String { + return ObjectTraits.staticId + } + + public func ice_getIdentity() -> Identity { + var name = NSString() + var category = NSString() + handle.ice_getIdentity(&name, category: &category) + return Identity(name: name as String, category: category as String) + } + + public func ice_identity(_ id: Identity) -> Self { + precondition(!id.name.isEmpty, "Identity name cannot be empty") + do { + return try autoreleasepool { + try fromICEObjectPrx(handle.ice_identity(id.name, category: id.category)) + } + } catch { + fatalError("\(error)") + } + } + + public func ice_getContext() -> Context { + return handle.ice_getContext() as Context + } + + public func ice_context(_ context: Context) -> Self { + return fromICEObjectPrx(handle.ice_context(context)) + } + + public func ice_getFacet() -> String { + return handle.ice_getFacet() + } + + public func ice_facet(_ facet: String) -> ObjectPrx { + return fromICEObjectPrx(handle.ice_facet(facet)) + } + + public func ice_getAdapterId() -> String { + return handle.ice_getAdapterId() + } + + public func ice_adapterId(_ id: String) -> Self { + precondition(!ice_isFixed(), "Cannot create a fixed proxy with an adapterId") + do { + return try autoreleasepool { + try fromICEObjectPrx(handle.ice_adapterId(id)) + } + } catch { + fatalError("\(error)") + } + } + + public func ice_getEndpoints() -> EndpointSeq { + return handle.ice_getEndpoints().fromObjc() + } + + public func ice_endpoints(_ endpoints: EndpointSeq) -> Self { + precondition(!ice_isFixed(), "Cannot create a fixed proxy with endpoints") + do { + return try autoreleasepool { + try fromICEObjectPrx(handle.ice_endpoints(endpoints.toObjc())) + } + } catch { + fatalError("\(error)") + } + } + + public func ice_getLocatorCacheTimeout() -> Int32 { + return handle.ice_getLocatorCacheTimeout() + } + + public func ice_locatorCacheTimeout(_ timeout: Int32) -> Self { + precondition(!ice_isFixed(), "Cannot create a fixed proxy with a locatorCacheTimeout") + precondition(timeout >= -1, "Invalid locator cache timeout value") + do { + return try autoreleasepool { + try fromICEObjectPrx(handle.ice_locatorCacheTimeout(timeout)) + } + } catch { + fatalError("\(error)") + } + } + + public func ice_getInvocationTimeout() -> Int32 { + return handle.ice_getInvocationTimeout() + } + + public func ice_invocationTimeout(_ timeout: Int32) -> Self { + precondition(timeout >= 1 || timeout == -1 || timeout == -2, "Invalid invocation timeout value") + do { + return try autoreleasepool { + try fromICEObjectPrx(handle.ice_invocationTimeout(timeout)) + } + } catch { + fatalError("\(error)") + } + } + + public func ice_getConnectionId() -> String { + return handle.ice_getConnectionId() + } + + public func ice_connectionId(_ id: String) -> Self { + precondition(!ice_isFixed(), "Cannot create a fixed proxy with a connectionId") + do { + return try autoreleasepool { + try fromICEObjectPrx(handle.ice_connectionId(id)) + } + } catch { + fatalError("\(error)") + } + } + + public func ice_isConnectionCached() -> Bool { + return handle.ice_isConnectionCached() + } + + public func ice_connectionCached(_ cached: Bool) -> Self { + precondition(!ice_isFixed(), "Cannot create a fixed proxy with a cached connection") + do { + return try autoreleasepool { + try fromICEObjectPrx(handle.ice_connectionCached(cached)) + } + } catch { + fatalError("\(error)") + } + } + + public func ice_getEndpointSelection() -> EndpointSelectionType { + return EndpointSelectionType(rawValue: handle.ice_getEndpointSelection())! + } + + public func ice_endpointSelection(_ type: EndpointSelectionType) -> Self { + precondition(!ice_isFixed(), "Cannot create a fixed proxy with an endpointSelectionType") + do { + return try autoreleasepool { + try fromICEObjectPrx(handle.ice_endpointSelection(type.rawValue)) + } + } catch { + fatalError("\(error)") + } + } + + public func ice_getEncodingVersion() -> EncodingVersion { + return encoding + } + + public func ice_encodingVersion(_ encoding: EncodingVersion) -> Self { + return fromICEObjectPrx(handle.ice_encodingVersion(encoding.major, minor: encoding.minor)) + } + + public func ice_getRouter() -> RouterPrx? { + guard let routerHandle = handle.ice_getRouter() else { + return nil + } + return fromICEObjectPrx(routerHandle) as RouterPrxI + } + + public func ice_router(_ router: RouterPrx?) -> Self { + precondition(!ice_isFixed(), "Cannot create a fixed proxy with a router") + do { + return try autoreleasepool { + let r = router as? ObjectPrxI + return try fromICEObjectPrx(handle.ice_router(r?.handle ?? nil)) + } + } catch { + fatalError("\(error)") + } + } + + public func ice_getLocator() -> LocatorPrx? { + guard let locatorHandle = handle.ice_getLocator() else { + return nil + } + return fromICEObjectPrx(locatorHandle) as LocatorPrxI + } + + public func ice_locator(_ locator: LocatorPrx?) -> Self { + precondition(!ice_isFixed(), "Cannot create a fixed proxy with a locator") + do { + return try autoreleasepool { + let l = locator as? ObjectPrxI + return try fromICEObjectPrx(handle.ice_locator(l?.handle ?? nil)) + } + } catch { + fatalError("\(error)") + } + } + + public func ice_isSecure() -> Bool { + return handle.ice_isSecure() + } + + public func ice_secure(_ secure: Bool) -> Self { + return fromICEObjectPrx(handle.ice_secure(secure)) + } + + public func ice_isPreferSecure() -> Bool { + return handle.ice_isPreferSecure() + } + + public func ice_preferSecure(_ preferSecure: Bool) -> Self { + precondition(!ice_isFixed(), "Cannot create a fixed proxy with preferSecure") + do { + return try autoreleasepool { + try fromICEObjectPrx(handle.ice_preferSecure(preferSecure)) + } + } catch { + fatalError("\(error)") + } + } + + public func ice_isTwoway() -> Bool { + return isTwoway + } + + public func ice_twoway() -> Self { + return fromICEObjectPrx(handle.ice_twoway()) + } + + public func ice_isOneway() -> Bool { + return handle.ice_isOneway() + } + + public func ice_oneway() -> Self { + return fromICEObjectPrx(handle.ice_oneway()) + } + + public func ice_isBatchOneway() -> Bool { + return handle.ice_isBatchOneway() + } + + public func ice_batchOneway() -> Self { + return fromICEObjectPrx(handle.ice_batchOneway()) + } + + public func ice_isDatagram() -> Bool { + return handle.ice_isDatagram() + } + + public func ice_datagram() -> Self { + return fromICEObjectPrx(handle.ice_datagram()) + } + + public func ice_isBatchDatagram() -> Bool { + return handle.ice_isBatchDatagram() + } + + public func ice_batchDatagram() -> Self { + return fromICEObjectPrx(handle.ice_batchDatagram()) + } + + public func ice_getCompress() -> Bool? { + guard let compress = handle.ice_getCompress() as? Bool? else { + preconditionFailure("Bool? type was expected") + } + return compress + } + + public func ice_compress(_ compress: Bool) -> Self { + return fromICEObjectPrx(handle.ice_compress(compress)) + } + + public func ice_getTimeout() -> Int32? { + guard let timeout = handle.ice_getTimeout() as? Int32? else { + preconditionFailure("Int32? type was expected") + } + return timeout + } + + public func ice_timeout(_ timeout: Int32) -> Self { + precondition(!ice_isFixed(), "Cannot create a fixed proxy with a connection timeout") + precondition(timeout > 0 || timeout == -1, "Invalid connection timeout value") + do { + return try autoreleasepool { + try fromICEObjectPrx(handle.ice_timeout(timeout)) + } + } catch { + fatalError("\(error)") + } + } + + public func ice_fixed(_ connection: Connection) -> Self { + do { + return try autoreleasepool { + try fromICEObjectPrx(handle.ice_fixed((connection as! ConnectionI).handle)) + } + } catch { + fatalError("\(error)") + } + } + + public func ice_isFixed() -> Bool { + return handle.ice_isFixed() + } + + public func ice_getCachedConnection() -> Connection? { + guard let handle = handle.ice_getCachedConnection() else { + return nil + } + return handle.getSwiftObject(ConnectionI.self) { ConnectionI(handle: handle) } + } + + public func ice_write(to os: OutputStream) { + handle.ice_write(os, encodingMajor: os.currentEncoding.major, encodingMinor: os.currentEncoding.minor) + } + + public func ice_toString() -> String { + return handle.ice_toString() + } + + public func ice_isCollocationOptimized() -> Bool { + return handle.ice_isCollocationOptimized() + } + + public func ice_collocationOptimized(_ collocated: Bool) -> Self { + precondition(!ice_isFixed(), "Cannot create a fixed proxy with collocation optimization") + do { + return try autoreleasepool { + try fromICEObjectPrx(handle.ice_collocationOptimized(collocated)) + } + } catch { + fatalError("\(error)") + } + } + + public static func ice_read(from istr: InputStream) throws -> Self? { + // + // Unmarshaling of proxies is done in C++. Since we don't know how big this proxy will + // be we pass the current buffer position and remaining buffer capacity. + // + + // The number of bytes consumed reading the proxy + var bytesRead: Int = 0 + let encoding = istr.currentEncoding + let communicator = istr.communicator + + // + // Returns Any which is either NSNull or ICEObjectPrx + // + let handleOpt = try ICEObjectPrx.ice_read(istr.data[istr.pos ..< istr.data.count], + communicator: (communicator as! CommunicatorI).handle, + encodingMajor: encoding.major, + encodingMinor: encoding.minor, + bytesRead: &bytesRead) as? ICEObjectPrx + + // Since the proxy was read in C++ we need to skip over the bytes which were read + // We avoid using a defer statment for this since you can not throw from one + try istr.skip(bytesRead) + + guard let handle = handleOpt else { + return nil + } + + return self.init(handle: handle, communicator: communicator) + } + + public func _invoke(operation: String, + mode: OperationMode, + format: FormatType = FormatType.DefaultFormat, + write: ((OutputStream) -> Void)? = nil, + userException: ((UserException) throws -> Void)? = nil, + context: Context? = nil) throws { + if userException != nil, !isTwoway { + throw TwowayOnlyException(operation: operation) + } + + let ostr = OutputStream(communicator: communicator, encoding: encoding) + if let write = write { + ostr.startEncapsulation(encoding: encoding, format: format) + write(ostr) + ostr.endEncapsulation() + } + + if isTwoway { + var uex: Error? + try autoreleasepool { + try handle.invoke(operation, mode: mode.rawValue, + inParams: ostr.finished(), context: context, + response: { ok, encaps in + do { + let istr = InputStream(communicator: self.communicator, + encoding: self.encoding, + bytes: encaps) + if ok == false { + try ObjectPrxI.throwUserException(istr: istr, + userException: userException) + } + try istr.skipEmptyEncapsulation() + } catch { + uex = error + } + }) + + if let e = uex { + throw e + } + } + } else { + try autoreleasepool { + try handle.onewayInvoke(operation, + mode: mode.rawValue, + inParams: ostr.finished(), + context: context) + } + } + } + + public func _invoke<T>(operation: String, + mode: OperationMode, + format: FormatType = FormatType.DefaultFormat, + write: ((OutputStream) -> Void)? = nil, + read: @escaping (InputStream) throws -> T, + userException: ((UserException) throws -> Void)? = nil, + context: Context? = nil) throws -> T { + if !isTwoway { + throw TwowayOnlyException(operation: operation) + } + let ostr = OutputStream(communicator: communicator, encoding: encoding) + if let write = write { + ostr.startEncapsulation(encoding: encoding, format: format) + write(ostr) + ostr.endEncapsulation() + } + var uex: Error? + var ret: T! + try autoreleasepool { + try handle.invoke(operation, + mode: mode.rawValue, + inParams: ostr.finished(), + context: context, + response: { ok, encaps in + do { + let istr = InputStream(communicator: self.communicator, + encoding: self.encoding, + bytes: encaps) + if ok == false { + try ObjectPrxI.throwUserException(istr: istr, + userException: userException) + } + try istr.startEncapsulation() + ret = try read(istr) + try istr.endEncapsulation() + } catch { + uex = error + } + }) + + if let e = uex { + throw e + } + } + + precondition(ret != nil) + return ret + } + + public func _invokeAsync(operation: String, + mode: OperationMode, + format: FormatType = FormatType.DefaultFormat, + write: ((OutputStream) -> Void)? = nil, + userException: ((UserException) throws -> Void)? = nil, + context: Context? = nil, + sentOn: DispatchQueue? = PromiseKit.conf.Q.return, + sentFlags: DispatchWorkItemFlags? = nil, + sent: ((Bool) -> Void)? = nil) -> Promise<Void> { + if userException != nil, !isTwoway { + return Promise(error: TwowayOnlyException(operation: operation)) + } + let ostr = OutputStream(communicator: communicator, encoding: encoding) + if let write = write { + ostr.startEncapsulation(encoding: encoding, format: format) + write(ostr) + ostr.endEncapsulation() + } + if isTwoway { + return Promise<Void> { seal in + handle.invokeAsync(operation, + mode: mode.rawValue, + inParams: ostr.finished(), + context: context, + response: { ok, encaps in + do { + let istr = InputStream(communicator: self.communicator, + encoding: self.encoding, + bytes: encaps) + if ok == false { + try ObjectPrxI.throwUserException(istr: istr, + userException: userException) + } + try istr.skipEmptyEncapsulation() + seal.fulfill(()) + } catch { + seal.reject(error) + } + }, + exception: { error in + seal.reject(error) + }, + sent: createSentCallback(sentOn: sentOn, sentFlags: sentFlags, sent: sent)) + } + } else { + if ice_isBatchOneway() || ice_isBatchDatagram() { + return Promise<Void> { seal in + try autoreleasepool { + try handle.onewayInvoke(operation, + mode: mode.rawValue, + inParams: ostr.finished(), + context: context) + + seal.fulfill(()) + } + } + } else { + return Promise<Void> { seal in + let sentCB = createSentCallback(sentOn: sentOn, sentFlags: sentFlags, sent: sent) + handle.invokeAsync(operation, + mode: mode.rawValue, + inParams: ostr.finished(), + context: context, + response: { _, _ in + fatalError("Unexpected response") + }, + exception: { error in + seal.reject(error) + }, + sent: { + seal.fulfill(()) + if let sentCB = sentCB { + sentCB($0) + } + }) + } + } + } + } + + public func _invokeAsync<T>(operation: String, + mode: OperationMode, + format: FormatType = FormatType.DefaultFormat, + write: ((OutputStream) -> Void)? = nil, + read: @escaping (InputStream) throws -> T, + userException: ((UserException) throws -> Void)? = nil, + context: Context? = nil, + sentOn: DispatchQueue? = PromiseKit.conf.Q.return, + sentFlags: DispatchWorkItemFlags? = nil, + sent: ((Bool) -> Void)? = nil) -> Promise<T> { + if !isTwoway { + return Promise(error: TwowayOnlyException(operation: operation)) + } + let ostr = OutputStream(communicator: communicator, encoding: encoding) + if let write = write { + ostr.startEncapsulation(encoding: encoding, format: format) + write(ostr) + ostr.endEncapsulation() + } + return Promise<T> { seal in + handle.invokeAsync(operation, + mode: mode.rawValue, + inParams: ostr.finished(), + context: context, + response: { ok, encaps in + do { + let istr = InputStream(communicator: self.communicator, + encoding: self.encoding, + bytes: encaps) + if ok == false { + try ObjectPrxI.throwUserException(istr: istr, + userException: userException) + } + try istr.startEncapsulation() + let l = try read(istr) + try istr.endEncapsulation() + seal.fulfill(l) + } catch { + seal.reject(error) + } + }, + exception: { error in + seal.reject(error) + }, + sent: createSentCallback(sentOn: sentOn, sentFlags: sentFlags, sent: sent)) + } + } + + private static func throwUserException(istr: InputStream, userException: ((UserException) throws -> Void)?) throws { + do { + try istr.startEncapsulation() + try istr.throwException() + } catch let error as UserException { + try istr.endEncapsulation() + if let userException = userException { + try userException(error) + } + throw UnknownUserException(unknown: error.ice_id()) + } + fatalError("Failed to throw user exception") + } + + public static func checkedCast<ProxyImpl>(prx: ObjectPrx, + facet: String? = nil, + context: Context? = nil) throws -> ProxyImpl? + where ProxyImpl: ObjectPrxI { + do { + let objPrx = facet != nil ? prx.ice_facet(facet!) : prx + + // checkedCast always calls ice_isA - no optimization on purpose + guard try objPrx.ice_isA(id: ProxyImpl.ice_staticId(), context: context) else { + return nil + } + return ProxyImpl(from: objPrx) + } catch is FacetNotExistException { + return nil + } + } + + public static func uncheckedCast<ProxyImpl>(prx: ObjectPrx, + facet: String? = nil) -> ProxyImpl where ProxyImpl: ObjectPrxI { + if let f = facet { + return ProxyImpl(from: prx.ice_facet(f)) + } else if let optimized = prx as? ProxyImpl { + return optimized + } else { + return ProxyImpl(from: prx) + } + } +} diff --git a/swift/src/Ice/ServantManager.swift b/swift/src/Ice/ServantManager.swift new file mode 100644 index 00000000000..96c5327efc5 --- /dev/null +++ b/swift/src/Ice/ServantManager.swift @@ -0,0 +1,180 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +class ServantManager { + private let adapterName: String + private let communicator: Communicator + + private var servantMapMap = [Identity: [String: Disp]]() + private var defaultServantMap = [String: Disp]() + private var locatorMap = [String: ServantLocator]() + + // This is used to distingish between ObjectNotExistException and FacetNotExistException + // when a servant is not found on a Swift Admin OA. + private var adminId: Identity? + + private var mutex = Mutex() + + init(adapterName: String, communicator: Communicator) { + self.adapterName = adapterName + self.communicator = communicator + } + + func addServant(servant: Disp, id ident: Identity, facet: String) throws { + try mutex.sync { + if var m = servantMapMap[ident] { + if m[facet] != nil { + var id = communicator.identityToString(ident) + if !facet.isEmpty { + id += try " - f " + escapeString(string: facet, special: "", communicator: communicator) + } + throw AlreadyRegisteredException(kindOfObject: "servant", id: id) + } + m[facet] = servant + servantMapMap[ident] = m + } else { + servantMapMap[ident] = [facet: servant] + } + } + } + + func addDefaultServant(servant: Disp, category: String) throws { + try mutex.sync { + guard defaultServantMap[category] == nil else { + throw AlreadyRegisteredException(kindOfObject: "default servant", id: category) + } + + defaultServantMap[category] = servant + } + } + + func removeServant(id ident: Identity, facet: String) throws -> Disp { + return try mutex.sync { + guard var m = servantMapMap[ident], let obj = m.removeValue(forKey: facet) else { + var id = communicator.identityToString(ident) + if !facet.isEmpty { + id += try " - f " + escapeString(string: facet, special: "", communicator: communicator) + } + throw NotRegisteredException(kindOfObject: "servant", id: id) + } + + if m.isEmpty { + servantMapMap.removeValue(forKey: ident) + } else { + servantMapMap[ident] = m + } + return obj + } + } + + func removeDefaultServant(category: String) throws -> Disp { + return try mutex.sync { + guard let obj = defaultServantMap.removeValue(forKey: category) else { + throw NotRegisteredException(kindOfObject: "default servant", id: category) + } + + return obj + } + } + + func removeAllFacets(id: Identity) throws -> FacetMap { + return try mutex.sync { + guard let m = servantMapMap.removeValue(forKey: id) else { + throw NotRegisteredException(kindOfObject: "servant", id: identityToString(id: id)) + } + + return m + } + } + + func findServant(id: Identity, facet: String) -> Disp? { + return mutex.sync { + guard let m = servantMapMap[id] else { + guard let obj = defaultServantMap[id.category] else { + return defaultServantMap[""] + } + + return obj + } + + return m[facet] + } + } + + func findDefaultServant(category: String) -> Disp? { + return mutex.sync { + defaultServantMap[category] + } + } + + func findAllFacets(id: Identity) -> FacetMap { + return mutex.sync { + guard let m = servantMapMap[id] else { + return FacetMap() + } + + return m + } + } + + func hasServant(id: Identity) -> Bool { + return mutex.sync { + servantMapMap[id] != nil + } + } + + func addServantLocator(locator: ServantLocator, category: String) throws { + return try mutex.sync { + guard locatorMap[category] == nil else { + let id = try escapeString(string: category, special: "", communicator: communicator) + throw AlreadyRegisteredException(kindOfObject: "servant locator", id: id) + } + + locatorMap[category] = locator + } + } + + func removeServantLocator(category: String) throws -> ServantLocator { + return try mutex.sync { + guard let l = locatorMap.removeValue(forKey: category) else { + let id = try escapeString(string: category, special: "", communicator: communicator) + throw NotRegisteredException(kindOfObject: "servant locator", id: id) + } + + return l + } + } + + func findServantLocator(category: String) -> ServantLocator? { + return mutex.sync { + locatorMap[category] + } + } + + func setAdminId(_ id: Identity) { + mutex.sync { + adminId = id + } + } + + func isAdminId(_ id: Identity) -> Bool { + return mutex.sync { + adminId == id + } + } + + func destroy() { + var m = [String: ServantLocator]() + mutex.sync { + servantMapMap.removeAll() + defaultServantMap.removeAll() + m = locatorMap + locatorMap.removeAll() + } + + m.forEach { category, locator in + locator.deactivate(category) + } + } +} diff --git a/swift/src/Ice/SliceFlags.swift b/swift/src/Ice/SliceFlags.swift new file mode 100644 index 00000000000..6b5e9bc6193 --- /dev/null +++ b/swift/src/Ice/SliceFlags.swift @@ -0,0 +1,17 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +struct SliceFlags: OptionSet { + let rawValue: UInt8 + + static let FLAG_HAS_TYPE_ID_STRING = SliceFlags(rawValue: 1 << 0) + static let FLAG_HAS_TYPE_ID_INDEX = SliceFlags(rawValue: 1 << 1) + static let FLAG_HAS_TYPE_ID_COMPACT = SliceFlags(rawValue: 1 << 1 | 1 << 0) + static let FLAG_HAS_OPTIONAL_MEMBERS = SliceFlags(rawValue: 1 << 2) + static let FLAG_HAS_INDIRECTION_TABLE = SliceFlags(rawValue: 1 << 3) + static let FLAG_HAS_SLICE_SIZE = SliceFlags(rawValue: 1 << 4) + static let FLAG_IS_LAST_SLICE = SliceFlags(rawValue: 1 << 5) + + static let OPTIONAL_END_MARKER = SliceFlags(rawValue: 0xFF) +} diff --git a/swift/src/Ice/SliceInfo.swift b/swift/src/Ice/SliceInfo.swift new file mode 100644 index 00000000000..e30d0f192c4 --- /dev/null +++ b/swift/src/Ice/SliceInfo.swift @@ -0,0 +1,26 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Foundation + +/// SliceInfo encapsulates the details of a slice for an unknown class or exception type. +public struct SliceInfo { + /// The Slice type ID for this slice. + public let typeId: String + + /// The Slice compact type ID for this slice. + public let compactId: Int32 + + /// The encoded bytes for this slice, including the leading size integer. + public let bytes: Data + + /// The class instances referenced by this slice. + public var instances: [Ice.Value?] + + /// Whether or not the slice contains optional members. + public let hasOptionalMembers: Bool + + /// Whether or not this is the last slice. + public let isLastSlice: Bool +} diff --git a/swift/src/Ice/SlicedData.swift b/swift/src/Ice/SlicedData.swift new file mode 100644 index 00000000000..27e9e788d3f --- /dev/null +++ b/swift/src/Ice/SlicedData.swift @@ -0,0 +1,13 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +/// SlicedData holds the slices of unknown class or exception types. +public struct SlicedData { + /// The details of each slice, in order of most-derived to least-derived. + public let slices: [SliceInfo] + + public init(slices: [SliceInfo]) { + self.slices = slices + } +} diff --git a/swift/src/Ice/UnknownSlicedValue.swift b/swift/src/Ice/UnknownSlicedValue.swift new file mode 100644 index 00000000000..1cec3095fad --- /dev/null +++ b/swift/src/Ice/UnknownSlicedValue.swift @@ -0,0 +1,46 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +/// Unknown sliced value holds an instance of an unknown Slice class type. +public final class UnknownSlicedValue: Value { + private let unknownTypeId: String + private var slicedData: SlicedData? + + public required init() { + unknownTypeId = "" + } + + public init(unknownTypeId: String) { + self.unknownTypeId = unknownTypeId + } + + /// Returns the Slice type ID associated with this object. + /// + /// - returns: `String` - The type ID. + public override func ice_id() -> String { + return unknownTypeId + } + + public override class func ice_staticId() -> String { + return "::Ice::UnknownSlicedValue" + } + + /// Returns the sliced data if the value has a preserved-slice base class and has been sliced during + /// un-marshaling of the value, nil is returned otherwise. + /// + /// - returns: `Ice.SlicedData?` - The sliced data or nil. + public override func ice_getSlicedData() -> SlicedData? { + return slicedData + } + + public override func _iceRead(from ins: InputStream) throws { + ins.startValue() + slicedData = try ins.endValue(preserve: true) + } + + public override func _iceWrite(to os: OutputStream) { + os.startValue(data: slicedData) + os.endValue() + } +} diff --git a/swift/src/Ice/Util.swift b/swift/src/Ice/Util.swift new file mode 100644 index 00000000000..b9ef5cd3e53 --- /dev/null +++ b/swift/src/Ice/Util.swift @@ -0,0 +1,76 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Dispatch +import IceObjc + +/// Converts a string to an encoding version. +/// +/// - parameter _: `String` - The string to convert. +/// +/// - returns: `Ice.EncodingVersion` - The converted encoding version.</returns> +func stringToEncodingVersion(_ s: String) throws -> EncodingVersion { + let (major, minor) = try stringToMajorMinor(s) + return EncodingVersion(major: major, minor: minor) +} + +func stringToMajorMinor(_ s: String) throws -> (UInt8, UInt8) { + let components = s.components(separatedBy: ".") + guard components.count == 2 else { + throw VersionParseException(str: "malformed value `\(s)'") + } + + guard let major = UInt8(components[0] as String), let minor = UInt8(components[1]) else { + throw VersionParseException(str: "invalid version value `\(s)'") + } + + return (major, minor) +} + +func createSentCallback(sentOn: DispatchQueue?, + sentFlags: DispatchWorkItemFlags?, + sent: ((Bool) -> Void)?) -> ((Bool) -> Void)? { + guard let s = sent, let q = sentOn else { + // + // This is either a nil sent callback or a sent callback that is dispatch + // directly without a queue + // + return sent + } + + // + // Create a closure to dispatch the sent callback in the specified queue + // + if let flags = sentFlags { + return { sentSynchronously in + q.async(flags: flags) { + s(sentSynchronously) + } + } + } else { + return { sentSynchronously in + q.async { + s(sentSynchronously) + } + } + } +} + +func escapeString(string: String, special: String, communicator: Communicator) throws -> String { + guard factoriesRegistered else { + fatalError("Unable to initialie Ice") + } + return try autoreleasepool { + try ICEUtil.escapeString(string: string, + special: special, + communicator: (communicator as! CommunicatorI).handle) + } +} + +func checkSupportedEncoding(_ v: EncodingVersion) throws { + let c = currentEncoding + if v.major != c.major || v.minor > c.minor { + throw UnsupportedEncodingException(reason: "", bad: v, supported: c) + } +} diff --git a/swift/src/Ice/Value.swift b/swift/src/Ice/Value.swift new file mode 100644 index 00000000000..c5b89064004 --- /dev/null +++ b/swift/src/Ice/Value.swift @@ -0,0 +1,83 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +// The base class for all Ice values. +open class Value { + public required init() {} + + /// Returns the Slice type ID of the most-derived interface supported by this object. + /// + /// - returns: `String` - The Slice type ID. + open func ice_id() -> String { + return ObjectTraits.staticId + } + + open func _iceReadImpl(from _: InputStream) throws {} + + open func _iceWriteImpl(to _: OutputStream) {} + + /// The Ice run time invokes this method prior to marshaling an object's data members. + /// This allows a subclass to override this method in order to validate its data + /// members. + open func ice_preMarshal() {} + + /// This Ice run time invokes this method after unmarshaling an object's data members. This allows a + /// subclass to override this method in order to perform additional initialization. + open func ice_postUnmarshal() {} + + /// Returns the sliced data if the value has a preserved-slice base class and has been sliced during + /// un-marshaling of the value, nil is returned otherwise. + /// + /// - returns: `SlicedData?` - The sliced data or nil. + open func ice_getSlicedData() -> SlicedData? { + return nil + } + + open func _iceRead(from istr: InputStream) throws { + istr.startValue() + try _iceReadImpl(from: istr) + try istr.endValue(preserve: false) + } + + open func _iceWrite(to os: OutputStream) { + os.startValue(data: nil) + _iceWriteImpl(to: os) + os.endValue() + } + + /// Returns the Slice type ID of this object. + /// + /// - returns: `String` - The Slice type ID. + open class func ice_staticId() -> String { + return ObjectTraits.staticId + } +} + +/// Helper class used to represent an interface passed by value. Note that +/// passing interface by values is deprecated. +open class InterfaceByValue: Value { + private var id: String + + public required init() { + fatalError("Not supported") + } + + public init(id: String) { + self.id = id + } + + open override func ice_id() -> String { + return id + } + + open override func _iceReadImpl(from ostr: InputStream) throws { + _ = try ostr.startSlice() + try ostr.endSlice() + } + + open override func _iceWriteImpl(to istr: OutputStream) { + istr.startSlice(typeId: ice_id(), compactId: -1, last: true) + istr.endSlice() + } +} diff --git a/swift/src/Ice/ValueFactoryManagerI.swift b/swift/src/Ice/ValueFactoryManagerI.swift new file mode 100644 index 00000000000..0902d57fddc --- /dev/null +++ b/swift/src/Ice/ValueFactoryManagerI.swift @@ -0,0 +1,23 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +class ValueFactoryManagerI: ValueFactoryManager { + private var factories = [String: ValueFactory]() + private var mutex = Mutex() + + func add(factory: @escaping ValueFactory, id: String) throws { + try mutex.sync { + if factories[id] != nil { + throw AlreadyRegisteredException(kindOfObject: "value factory", id: id, file: #file, line: #line) + } + factories[id] = factory + } + } + + func find(_ id: String) -> ValueFactory? { + return mutex.sync { + factories[id] + } + } +} diff --git a/swift/src/IceGrid/IceGridSwift.h b/swift/src/IceGrid/IceGridSwift.h new file mode 100644 index 00000000000..73824b48750 --- /dev/null +++ b/swift/src/IceGrid/IceGridSwift.h @@ -0,0 +1,9 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#import <Cocoa/Cocoa.h> + +FOUNDATION_EXPORT double Glacier2VersionNumber; +FOUNDATION_EXPORT const unsigned char Glacier2VersionString[]; + diff --git a/swift/src/IceGrid/Info.plist b/swift/src/IceGrid/Info.plist new file mode 100644 index 00000000000..9668b463f36 --- /dev/null +++ b/swift/src/IceGrid/Info.plist @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>CFBundleDevelopmentRegion</key> + <string>$(DEVELOPMENT_LANGUAGE)</string> + <key>CFBundleExecutable</key> + <string>$(EXECUTABLE_NAME)</string> + <key>CFBundleIdentifier</key> + <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string> + <key>CFBundleInfoDictionaryVersion</key> + <string>6.0</string> + <key>CFBundleName</key> + <string>$(PRODUCT_NAME)</string> + <key>CFBundlePackageType</key> + <string>FMWK</string> + <key>CFBundleShortVersionString</key> + <string>$(CURRENT_PROJECT_VERSION)</string> + <key>CFBundleVersion</key> + <string>$(CURRENT_PROJECT_VERSION)</string> + <key>NSHumanReadableCopyright</key> + <string>Copyright © ZeroC, Inc. All rights reserved.</string> +</dict> +</plist> diff --git a/swift/src/IceObjc/AdminFacetFactory.h b/swift/src/IceObjc/AdminFacetFactory.h new file mode 100644 index 00000000000..107e74023c6 --- /dev/null +++ b/swift/src/IceObjc/AdminFacetFactory.h @@ -0,0 +1,21 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#import "LocalObject.h" + +@class ICECommunicator; +@class ICEProcess; +@class ICEPropertiesAdmin; +@class ICEUnsupportedAdminFacet; +@protocol ICEBlobjectFacade; + +NS_ASSUME_NONNULL_BEGIN + +@protocol ICEAdminFacetFactory ++(id<ICEBlobjectFacade>) createProcess:(ICECommunicator*)communicator handle:(ICEProcess*)handle; ++(id<ICEBlobjectFacade>) createProperties:(ICECommunicator*)communicator handle:(ICEPropertiesAdmin*)handle; ++(id<ICEBlobjectFacade>) createUnsupported:(ICECommunicator*)communicator handle:(ICEUnsupportedAdminFacet*)handle; +@end + +NS_ASSUME_NONNULL_END diff --git a/swift/src/IceObjc/BlobjectFacade.h b/swift/src/IceObjc/BlobjectFacade.h new file mode 100644 index 00000000000..2d944d904eb --- /dev/null +++ b/swift/src/IceObjc/BlobjectFacade.h @@ -0,0 +1,66 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#import "Config.h" + +@class ICEConnection; +@class ICEObjectAdapter; +@class ICERuntimeException; + +NS_ASSUME_NONNULL_BEGIN + +typedef void (^ICEBlobjectResponse) (bool, NSData*); +typedef void (^ICEBlobjectException) (ICERuntimeException*); + +@protocol ICEBlobjectFacade +-(void) facadeInvoke:(ICEObjectAdapter*)adapter + inEncaps:(NSData*)inEncaps + con:(ICEConnection* _Nullable)con + name:(NSString*)name + category:(NSString*)category + facet:(NSString*)facet + operation:(NSString*)operation + mode:(uint8_t)mode + context:(NSDictionary<NSString*, NSString*>*)context + requestId:(int32_t)requestId + encodingMajor:(uint8_t)encodingMajor + encodingMinor:(uint8_t)encodingMinor + response:(ICEBlobjectResponse)response + exception:(ICEBlobjectException)exception; +-(void) facadeRemoved; +@end + +#ifdef __cplusplus + +class BlobjectFacade : public Ice::BlobjectArrayAsync +{ +public: + + BlobjectFacade(id<ICEBlobjectFacade> facade): _facade(facade) + { + } + + ~BlobjectFacade() + { + [_facade facadeRemoved]; + } + + virtual void + ice_invokeAsync(std::pair<const Byte*, const Byte*> inEncaps, + std::function<void(bool, const std::pair<const Byte*, const Byte*>&)> response, + std::function<void(std::exception_ptr)> error, + const Ice::Current& current); + + id<ICEBlobjectFacade> getFacade() const + { + return _facade; + } + +private: + id<ICEBlobjectFacade> _facade; +}; + +#endif + +NS_ASSUME_NONNULL_END diff --git a/swift/src/IceObjc/BlobjectFacade.mm b/swift/src/IceObjc/BlobjectFacade.mm new file mode 100644 index 00000000000..a8972974828 --- /dev/null +++ b/swift/src/IceObjc/BlobjectFacade.mm @@ -0,0 +1,46 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#import "BlobjectFacade.h" +#import "ObjectAdapter.h" +#import "Convert.h" + +#import "Connection.h" + +void +BlobjectFacade::ice_invokeAsync(std::pair<const Byte*, const Byte*> inEncaps, + std::function<void(bool, const std::pair<const Byte*, const Byte*>&)> response, + std::function<void(std::exception_ptr)> error, + const Ice::Current& current) +{ + ICEBlobjectResponse responseCallback = ^(bool ok, NSData* outParams) { + const Ice::Byte* start = static_cast<const Ice::Byte*>(outParams.bytes); + response(ok, std::make_pair(start, start + outParams.length)); + }; + + ICEBlobjectException exceptionCallback = ^(ICERuntimeException* e) { + error(convertException(e)); + }; + + ICEObjectAdapter* adapter = [ICEObjectAdapter getHandle:current.adapter]; + ICEConnection* con = [ICEConnection getHandle:current.con]; + + NSData* inEncapsData = [[NSData alloc] initWithBytesNoCopy:const_cast<Ice::Byte*>(inEncaps.first) + length:inEncaps.second - inEncaps.first + freeWhenDone:NO]; + + [_facade facadeInvoke:adapter + inEncaps:inEncapsData + con:con + name:toNSString(current.id.name) category:toNSString(current.id.category) + facet:toNSString(current.facet) + operation:toNSString(current.operation) + mode:static_cast<uint8_t>(current.mode) + context:toNSDictionary(current.ctx) + requestId:current.requestId + encodingMajor:current.encoding.major + encodingMinor:current.encoding.minor + response:responseCallback + exception:exceptionCallback]; +} diff --git a/swift/src/IceObjc/Communicator.h b/swift/src/IceObjc/Communicator.h new file mode 100644 index 00000000000..46c88f591d1 --- /dev/null +++ b/swift/src/IceObjc/Communicator.h @@ -0,0 +1,68 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#import "LocalObject.h" + +@class ICEObjectPrx; +@class ICEImplicitContext; +@class ICEProperties; +@class ICEObjectAdapter; +@protocol ICELoggerProtocol; +@protocol ICEBlobjectFacade; + +NS_ASSUME_NONNULL_BEGIN + +@interface ICECommunicator : ICELocalObject +-(void) destroy; +-(void) shutdown; +-(void) waitForShutdown; +-(bool) isShutdown; +-(nullable id) stringToProxy:(NSString*)str error:(NSError**)error NS_SWIFT_NAME(stringToProxy(str:));; +-(nullable id) propertyToProxy:(NSString*)property error:(NSError**)error NS_SWIFT_NAME(propertyToProxy(property:)); +-(nullable NSDictionary<NSString*, NSString*>*) proxyToProperty:(ICEObjectPrx*)prx property:(NSString*)property error:(NSError**)error NS_SWIFT_NAME(proxyToProperty(prx:property:));; +-(nullable ICEObjectAdapter*) createObjectAdapter:(NSString*)name error:(NSError**)error; +-(nullable ICEObjectAdapter*) createObjectAdapterWithEndpoints:(NSString*)name endpoints:(NSString*)endpoints error:(NSError**)error NS_SWIFT_NAME(createObjectAdapterWithEndpoints(name:endpoints:));; +-(nullable ICEObjectAdapter*) createObjectAdapterWithRouter:(NSString*)name router:(ICEObjectPrx*)router error:(NSError**)error NS_SWIFT_NAME(createObjectAdapterWithRouter(name:router:)); +-(ICEImplicitContext*) getImplicitContext; +-(id<ICELoggerProtocol>) getLogger; +-(nullable ICEObjectPrx*) getDefaultRouter; +-(BOOL) setDefaultRouter:(ICEObjectPrx* _Nullable)router error:(NSError* _Nullable * _Nullable)error; +-(nullable ICEObjectPrx*) getDefaultLocator; +-(BOOL) setDefaultLocator:(ICEObjectPrx* _Nullable)locator error:(NSError* _Nullable * _Nullable)error; +-(BOOL) flushBatchRequests:(uint8_t)compress error:(NSError* _Nullable * _Nullable)error; +-(void) flushBatchRequestsAsync:(uint8_t)compress + exception:(void (^)(NSError*))exception + sent:(void (^_Nullable)(bool))sent; +-(nullable ICEObjectPrx*) createAdmin:(ICEObjectAdapter* _Nullable)adminAdapter + name:(NSString*)name + category:(NSString*)category + error:(NSError**)error; +-(nullable id) getAdmin:(NSError**)error; +-(BOOL) addAdminFacet:(id<ICEBlobjectFacade>)servant facet:(NSString*)facet error:(NSError**)error; +-(nullable id<ICEBlobjectFacade>) removeAdminFacet:(NSString*)facet error:(NSError* _Nullable * _Nullable)error; +-(nullable id) findAdminFacet:(NSString*)facet error:(NSError* _Nullable * _Nullable)error; +-(nullable NSDictionary<NSString*, id<ICEBlobjectFacade>>*) findAllAdminFacets:(NSError* _Nullable * _Nullable)error; +-(ICEProperties*) getProperties; +-(nullable dispatch_queue_t) getClientDispatchQueue:(NSError* _Nullable * _Nullable)error; +-(nullable dispatch_queue_t) getServerDispatchQueue:(NSError* _Nullable * _Nullable)error; + +// DefaultsAndOverrides +-(void) getDefaultEncoding:(uint8_t*)major minor:(uint8_t*)minor + NS_SWIFT_NAME(getDefaultEncoding(major:minor:)); +-(uint8_t) getDefaultFormat; + +-(void) setSslCertificateVerifier:(nullable bool (^)(id))verifier; +-(void) setSslPasswordPrompt:(nullable NSString* (^)())prompt; +-(BOOL) initializePlugins: (NSError**)error; +@end + +#ifdef __cplusplus + +@interface ICECommunicator() +@property (nonatomic, readonly) std::shared_ptr<Ice::Communicator> communicator; +@end + +#endif + +NS_ASSUME_NONNULL_END diff --git a/swift/src/IceObjc/Communicator.mm b/swift/src/IceObjc/Communicator.mm new file mode 100644 index 00000000000..71357ccb5a2 --- /dev/null +++ b/swift/src/IceObjc/Communicator.mm @@ -0,0 +1,455 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#import "Communicator.h" +#import "ObjectAdapter.h" +#import "ObjectPrx.h" +#import "Logger.h" +#import "ImplicitContext.h" +#import "Properties.h" +#import "IceUtil.h" +#import "BlobjectFacade.h" +#import "Process.h" +#import "PropertiesAdmin.h" +#import "UnsupportedAdminFacet.h" + +#import "LoggerWrapperI.h" +#import "Convert.h" + +#include <Ice/Instance.h> +#include <Ice/DefaultsAndOverrides.h> + +@implementation ICECommunicator + +-(std::shared_ptr<Ice::Communicator>) communicator +{ + return std::static_pointer_cast<Ice::Communicator>(self.cppObject); +} + +-(void) destroy +{ + self.communicator->destroy(); +} + +-(void) shutdown +{ + self.communicator->shutdown(); +} + +-(void) waitForShutdown +{ + self.communicator->waitForShutdown(); +} + +-(bool) isShutdown +{ + return self.communicator->isShutdown(); +} + +-(id) stringToProxy:(NSString*)str error:(NSError**)error +{ + try + { + ICEObjectPrx* prx = [[ICEObjectPrx alloc] initWithCppObjectPrx:self.communicator->stringToProxy(fromNSString(str))]; + if(prx) + { + return prx; + } + else + { + return [NSNull null]; + } + } + catch(const std::exception& e) + { + *error = convertException(e); + } + + return nil; +} + +-(nullable id) propertyToProxy:(NSString*)property error:(NSError* _Nullable * _Nullable)error +{ + try + { + auto prx = self.communicator->propertyToProxy(fromNSString(property)); + if(prx) + { + return [[ICEObjectPrx alloc] initWithCppObjectPrx:prx]; + } + return [NSNull null]; + } + catch(const std::exception& ex) + { + *error = convertException(ex); + return nil; + } +} + +-(NSDictionary<NSString*, NSString*>*) proxyToProperty:(ICEObjectPrx*)prx property:(NSString*)property error:(NSError* _Nullable * _Nullable)error +{ + return toNSDictionary(self.communicator->proxyToProperty([prx prx], fromNSString(property))); +} + +-(ICEObjectAdapter*) createObjectAdapter:(NSString*)name error:(NSError* _Nullable * _Nullable)error +{ + try + { + auto oa = self.communicator->createObjectAdapter(fromNSString(name)); + return [ICEObjectAdapter getHandle:oa]; + } + catch(const std::exception& ex) + { + *error = convertException(ex); + return nil; + } +} + +-(ICEObjectAdapter*) createObjectAdapterWithEndpoints:(NSString*)name endpoints:(NSString*)endpoints error:(NSError* _Nullable * _Nullable)error +{ + try + { + auto oa = self.communicator->createObjectAdapterWithEndpoints(fromNSString(name), fromNSString(endpoints)); + return [ICEObjectAdapter getHandle:oa]; + } + catch(const std::exception& ex) + { + *error = convertException(ex); + return nil; + } +} + +-(ICEObjectAdapter*) createObjectAdapterWithRouter:(NSString*)name router:(ICEObjectPrx*)router error:(NSError* _Nullable * _Nullable)error +{ + try + { + assert(router); + auto oa = self.communicator->createObjectAdapterWithRouter(fromNSString(name), + Ice::uncheckedCast<Ice::RouterPrx>([router prx])); + return [ICEObjectAdapter getHandle:oa]; + } + catch(const std::exception& ex) + { + *error = convertException(ex); + return nil; + } +} + +-(ICEImplicitContext*) getImplicitContext +{ + auto implicitContext = self.communicator->getImplicitContext(); + return [ICEImplicitContext getHandle:implicitContext]; +} + +// id<ICELoggerProtocol> may be either a Swift logger or a wrapper around a C++ logger +-(id<ICELoggerProtocol>) getLogger +{ + auto logger = self.communicator->getLogger(); + + auto swiftLogger = std::dynamic_pointer_cast<LoggerWrapperI>(logger); + if(swiftLogger) + { + return swiftLogger->getLogger(); + } + + return [ICELogger getHandle:logger]; +} + +-(nullable ICEObjectPrx*) getDefaultRouter +{ + return [[ICEObjectPrx alloc] initWithCppObjectPrx:self.communicator->getDefaultRouter()]; +} + +-(BOOL) setDefaultRouter:(ICEObjectPrx*)router error:(NSError**)error +{ + try + { + auto r = router ? [router prx] : nullptr; + self.communicator->setDefaultRouter(Ice::uncheckedCast<Ice::RouterPrx>(r)); + return YES; + } + catch(const std::exception& ex) + { + *error = convertException(ex); + return NO; + } +} + +-(nullable ICEObjectPrx*) getDefaultLocator +{ + return [[ICEObjectPrx alloc] initWithCppObjectPrx:self.communicator->getDefaultLocator()]; +} + +-(BOOL) setDefaultLocator:(ICEObjectPrx*)locator error:(NSError**)error +{ + try + { + auto l = locator ? [locator prx] : nullptr; + self.communicator->setDefaultLocator((Ice::uncheckedCast<Ice::LocatorPrx>(l))); + return YES; + } + catch(const std::exception& ex) + { + *error = convertException(ex); + return NO; + } +} + +-(BOOL) flushBatchRequests:(uint8_t)compress error:(NSError**)error +{ + try + { + self.communicator->flushBatchRequests(Ice::CompressBatch(compress)); + return YES; + } + catch(const std::exception& ex) + { + *error = convertException(ex); + return NO; + } +} + +-(void) flushBatchRequestsAsync:(uint8_t)compress + exception:(void (^)(NSError*))exception + sent:(void (^_Nullable)(bool))sent +{ + try + { + self.communicator->flushBatchRequestsAsync(Ice::CompressBatch(compress), + [exception](std::exception_ptr e) + { + exception(convertException(e)); + }, + [sent](bool sentSynchronously) + { + if(sent) + { + sent(sentSynchronously); + } + }); + } + catch(const std::exception& ex) + { + // Typically CommunicatorDestroyedException. Note that the callback is called on the + // thread making the invocation, which is fine since we only use it to fulfill the + // PromiseKit promise. + exception(convertException(ex)); + } +} + +-(nullable ICEObjectPrx*) createAdmin:(ICEObjectAdapter* _Nullable)adminAdapter + name:(NSString*)name + category:(NSString*)category + error:(NSError**)error +{ + + try + { + auto ident = Ice::Identity{fromNSString(name), fromNSString(category)}; + auto adapter = adminAdapter ? [adminAdapter objectAdapter] : nullptr; + auto prx = self.communicator->createAdmin(adapter, ident); + return [[ICEObjectPrx alloc] initWithCppObjectPrx:prx]; + } + catch(const std::exception& ex) + { + *error = convertException(ex); + return nil; + } + +} + +-(nullable id) getAdmin:(NSError**)error +{ + try + { + auto adminPrx = self.communicator->getAdmin(); + return adminPrx ? [[ICEObjectPrx alloc] initWithCppObjectPrx:adminPrx] : [NSNull null]; + } + catch(const std::exception& ex) + { + *error = convertException(ex); + return nil; + } +} + +-(BOOL) addAdminFacet:(id<ICEBlobjectFacade>)facade facet:(NSString*)facet error:(NSError**)error +{ + try + { + auto servant = std::make_shared<BlobjectFacade>(facade); + self.communicator->addAdminFacet(servant, fromNSString(facet)); + return YES; + } + catch(const std::exception& ex) + { + *error = convertException(ex); + return NO; + } +} + +-(id<ICEBlobjectFacade>) removeAdminFacet:(NSString*)facet error:(NSError**)error +{ + try + { + // servant can either be a Swift wrapped facet or a builtin admin facet + return [self facetToFacade:self.communicator->removeAdminFacet(fromNSString(facet))]; + } + catch(const std::exception& ex) + { + *error = convertException(ex); + return nil; + } +} + +-(nullable id) findAdminFacet:(NSString*)facet error:(NSError**)error +{ + try + { + // servant can either be null, a Swift wrapped facet, or a builtin admin facet + auto servant = self.communicator->findAdminFacet(fromNSString(facet)); + + if(!servant) + { + return [NSNull null]; + } + + return [self facetToFacade:servant]; + + } + catch(const std::exception& ex) + { + *error = convertException(ex); + return nil; + } +} + +-(nullable NSDictionary<NSString*, id<ICEBlobjectFacade>>*) findAllAdminFacets:(NSError**)error +{ + try + { + NSMutableDictionary<NSString*, id<ICEBlobjectFacade>>* facets = [NSMutableDictionary dictionary]; + + for(const auto& d : self.communicator->findAllAdminFacets()) + { + [facets setObject:[self facetToFacade:d.second] forKey:toNSString(d.first)]; + } + + return facets; + } + catch(const std::exception& ex) + { + *error = convertException(ex); + return nil; + } +} + +-(ICEProperties*) getProperties +{ + auto props = self.communicator->getProperties(); + return [ICEProperties getHandle:props]; +} + +-(nullable dispatch_queue_t) getClientDispatchQueue:(NSError* _Nullable * _Nullable)error +{ + try + { + return self.communicator->getClientDispatchQueue(); + } + catch(const std::exception& ex) + { + *error = convertException(ex); + return nil; + } +} + +-(nullable dispatch_queue_t) getServerDispatchQueue:(NSError* _Nullable * _Nullable)error +{ + try + { + return self.communicator->getServerDispatchQueue(); + } + catch(const std::exception& ex) + { + *error = convertException(ex); + return nil; + } +} + +-(void) getDefaultEncoding:(uint8_t*)major minor:(uint8_t*)minor +{ + auto defaultEncoding = IceInternal::getInstance(self.communicator)->defaultsAndOverrides()->defaultEncoding; + *major = defaultEncoding.major; + *minor = defaultEncoding.minor; +} + +-(uint8_t) getDefaultFormat +{ + return static_cast<uint8_t>(IceInternal::getInstance(self.communicator)->defaultsAndOverrides()->defaultFormat); +} + +-(id<ICEBlobjectFacade>) facetToFacade:(const std::shared_ptr<Ice::Object>&) servant +{ + if(!servant) + { + return nil; + } + + auto blobjectFacade = std::dynamic_pointer_cast<BlobjectFacade>(servant); + if(blobjectFacade) + { + return blobjectFacade->getFacade(); + } + + Class<ICEAdminFacetFactory> factory = [ICEUtil adminFacetFactory]; + + auto process = std::dynamic_pointer_cast<Ice::Process>(servant); + if(process) + { + return [factory createProcess:self handle:[ICEProcess getHandle:process]]; + } + + auto propertiesAdmin = std::dynamic_pointer_cast<Ice::PropertiesAdmin>(servant); + if(propertiesAdmin) + { + return [factory createProperties:self handle: [ICEPropertiesAdmin getHandle:propertiesAdmin]]; + } + + return [factory createUnsupported:self handle:[ICEUnsupportedAdminFacet getHandle:servant]]; +} + +-(void) setSslCertificateVerifier:(nullable bool (^)(id))verifier +{ + auto pluginManager = self.communicator->getPluginManager(); + auto plugin = std::dynamic_pointer_cast<IceSSL::Plugin>(pluginManager->getPlugin("IceSSL")); + assert(plugin); + + plugin->setCertificateVerifier([verifier] (const std::shared_ptr<IceSSL::ConnectionInfo>& info) -> bool { + return verifier(createConnectionInfo(info)); + }); +} + +-(void) setSslPasswordPrompt:(nullable NSString* (^)())prompt; +{ + auto pluginManager = self.communicator->getPluginManager(); + auto plugin = std::dynamic_pointer_cast<IceSSL::Plugin>(pluginManager->getPlugin("IceSSL")); + assert(plugin); + plugin->setPasswordPrompt([prompt] { + return fromNSString(prompt()); + }); +} + +-(BOOL) initializePlugins: (NSError**)error +{ + try + { + self.communicator->getPluginManager()->initializePlugins(); + return YES; + } + catch(const std::exception& ex) + { + *error = convertException(ex); + return NO; + } +} +@end diff --git a/swift/src/IceObjc/Config.h b/swift/src/IceObjc/Config.h new file mode 100644 index 00000000000..5e9e0c65be8 --- /dev/null +++ b/swift/src/IceObjc/Config.h @@ -0,0 +1,18 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#import <Foundation/Foundation.h> + +#ifdef __cplusplus + +#include <Ice/Ice.h> +#include <IceSSL/IceSSL.h> + +#if TARGET_OS_IPHONE +# include <IceIAP/IceIAP.h> +#endif + +#endif + +# define ICE_SWIFT_UNAVAILABLE(msg) __attribute__((unavailable(msg))) diff --git a/swift/src/IceObjc/Connection.h b/swift/src/IceObjc/Connection.h new file mode 100644 index 00000000000..af34e275f2d --- /dev/null +++ b/swift/src/IceObjc/Connection.h @@ -0,0 +1,117 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#import "LocalObject.h" + +@class ICEObjectPrx; +@class ICEEndpoint; +@class ICEObjectAdapter; + +NS_ASSUME_NONNULL_BEGIN + +@interface ICEConnection : ICELocalObject +-(void) close:(uint8_t)mode; +-(nullable ICEObjectPrx*) createProxy:(NSString*)name category:(NSString*)category error:(NSError* _Nullable * _Nullable)error; +-(BOOL) setAdapter:(ICEObjectAdapter* _Nullable)oa error:(NSError* _Nullable * _Nullable)error; +-(nullable ICEObjectAdapter*) getAdapter; +-(ICEEndpoint*) getEndpoint; +-(BOOL) flushBatchRequests:(uint8_t)compress error:(NSError* _Nullable * _Nullable)error; +-(void) flushBatchRequestsAsync:(uint8_t)compress + exception:(void (^)(NSError*))exception + sent:(void (^_Nullable)(bool))sent; +-(BOOL) setCloseCallback:(nullable void (^)(ICEConnection*))callback error:(NSError* _Nullable * _Nullable)error; +-(void) setHeartbeatCallback:(nullable void (^)(ICEConnection*))callback; +-(BOOL) heartbeat:(NSError* _Nullable * _Nullable)error; +-(void) heartbeatAsync:(void (^)(NSError*))exception + sent:(void (^_Nullable)(bool))sent + NS_SWIFT_NAME(heartbeatAsync(exception:sent:)); +-(void) setACM:(NSNumber* _Nullable)timeout close:(NSNumber* _Nullable)close heartbeat:(NSNumber* _Nullable)heartbeat; +-(void) getACM:(int32_t*)timeout close:(uint8_t*)close heartbeat:(uint8_t*)heartbeat; +-(NSString*) type; +-(int32_t) timeout; +-(NSString*) toString; +-(nullable id) getInfo:(NSError* _Nullable * _Nullable)error; +-(BOOL) setBufferSize:(int32_t)rcvSize sndSize:(int32_t)sndSize error:(NSError* _Nullable * _Nullable)error; +-(BOOL) throwException:(NSError* _Nullable * _Nullable)error; +@end + +@interface ICEConnectionInfo: NSObject +@end + +@protocol ICEConnectionInfoFactory ++(id) createIPConnectionInfo:(id)underlying + incoming:(BOOL)incoming + adapterName:(NSString*)adapterName + connectionId:(NSString*)connectionId + localAddress:(NSString*)localAddress + localPort:(int32_t)localPort + remoteAddress:(NSString*)remoteAddress + remotePort:(int32_t)remotePort; + ++(id) createTCPConnectionInfo:(id)underlying + incoming:(BOOL)incoming + adapterName:(NSString*)adapterName + connectionId:(NSString*)connectionId + localAddress:(NSString*)localAddress + localPort:(int32_t)localPort + remoteAddress:(NSString*)remoteAddress + remotePort:(int32_t)remotePort + rcvSize:(int32_t)rcvSize + sndSize:(int32_t)sndSize; + ++(id) createUDPConnectionInfo:(id)underlying + incoming:(BOOL)incoming + adapterName:(NSString*)adapterName + connectionId:(NSString*)connectionId + localAddress:(NSString*)localAddress + localPort:(int32_t)localPort + remoteAddress:(NSString*)remoteAddress + remotePort:(int32_t)remotePort + mcastAddress:(NSString*)mcastAddress + mcastPort:(int32_t)mcastPort + rcvSize:(int32_t)rcvSize + sndSize:(int32_t)sndSize; + ++(id) createWSConnectionInfo:(id)underlying + incoming:(BOOL)incoming + adapterName:(NSString*)adapterName + connectionId:(NSString*)connectionId + headers:(NSDictionary<NSString*, NSString*>*)headers; + ++(id) createSSLConnectionInfo:(id)underlying + incoming:(BOOL)incoming + adapterName:(NSString*)adapterName + connectionId:(NSString*)connectionId + cipher:(NSString*)cipher + certs:(NSArray<NSString*>*)certs + verified:(BOOL)verified; + +#if TARGET_OS_IPHONE + ++(id) createIAPConnectionInfo:(id)underlying + incoming:(BOOL)incoming + adapterName:(NSString*)adapterName + connectionId:(NSString*)connectionId + name:(NSString*)name + manufacturer:(NSString*)manufacturer + modelNumber:(NSString*)modelNumber + firmwareRevision:(NSString*)firmwareRevision + hardwareRevision:(NSString*)hardwareRevision + protocol:(NSString*)protocol; + +#endif + +@end + +#ifdef __cplusplus + +id createConnectionInfo(std::shared_ptr<Ice::ConnectionInfo>); + +@interface ICEConnection() +@property (nonatomic, readonly) std::shared_ptr<Ice::Connection> connection; +@end + +#endif + +NS_ASSUME_NONNULL_END diff --git a/swift/src/IceObjc/Connection.mm b/swift/src/IceObjc/Connection.mm new file mode 100644 index 00000000000..0cfc278e6e5 --- /dev/null +++ b/swift/src/IceObjc/Connection.mm @@ -0,0 +1,373 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#import "Connection.h" +#import "Endpoint.h" +#import "ObjectAdapter.h" +#import "ObjectPrx.h" +#import "IceUtil.h" +#import "Convert.h" + +@implementation ICEConnection + +-(std::shared_ptr<Ice::Connection>) connection +{ + return std::static_pointer_cast<Ice::Connection>(self.cppObject); +} + +-(void) close:(uint8_t)mode +{ + self.connection->close(Ice::ConnectionClose(mode)); +} + +-(nullable ICEObjectPrx*) createProxy:(NSString*)name category:(NSString*)category error:(NSError**)error +{ + try + { + auto cppPrx = self.connection->createProxy(Ice::Identity{fromNSString(name), fromNSString(category)}); + return [[ICEObjectPrx alloc] initWithCppObjectPrx:cppPrx]; + } + catch(const std::exception& ex) + { + *error = convertException(ex); + return nil; + } +} + +-(BOOL) setAdapter:(ICEObjectAdapter* _Nullable)oa error:(NSError* _Nullable * _Nullable)error; +{ + try + { + self.connection->setAdapter(oa == nil ? nullptr : [oa objectAdapter]); + return YES; + } + catch(const std::exception& ex) + { + *error = convertException(ex); + return NO; + } +} + +-(nullable ICEObjectAdapter*) getAdapter +{ + auto cppAdapter = self.connection->getAdapter(); + + return [ICEObjectAdapter getHandle:cppAdapter]; +} + +-(ICEEndpoint*) getEndpoint +{ + auto endpoint = self.connection->getEndpoint(); + return [ICEEndpoint getHandle:endpoint]; +} + +-(BOOL) flushBatchRequests:(uint8_t)compress error:(NSError**)error +{ + try + { + self.connection->flushBatchRequests(Ice::CompressBatch(compress)); + return YES; + } + catch(const std::exception& ex) + { + *error = convertException(ex); + return NO; + } +} + +-(void) flushBatchRequestsAsync:(uint8_t)compress + exception:(void (^)(NSError*))exception + sent:(void (^_Nullable)(bool))sent +{ + try + { + self.connection->flushBatchRequestsAsync(Ice::CompressBatch(compress), + [exception](std::exception_ptr e) + { + exception(convertException(e)); + }, + [sent](bool sentSynchronously) + { + if(sent) + { + sent(sentSynchronously); + } + }); + } + catch(const std::exception& ex) + { + // Typically CommunicatorDestroyedException. Note that the callback is called on the + // thread making the invocation, which is fine since we only use it to fulfill the + // PromiseKit promise. + exception(convertException(ex)); + } +} + +-(BOOL) setCloseCallback:(void (^)(ICEConnection*))callback error:(NSError**)error +{ + try + { + if(!callback) + { + self.connection->setCloseCallback(nullptr); + } + else + { + self.connection->setCloseCallback([callback](auto connection) + { + ICEConnection* conn = [ICEConnection getHandle:connection]; + assert(conn); + callback(conn); + }); + } + return YES; + } + catch(const std::exception& ex) + { + *error = convertException(ex); + return NO; + } +} + +-(void) setHeartbeatCallback:(void (^)(ICEConnection*))callback +{ + if(!callback) + { + self.connection->setHeartbeatCallback(nullptr); + } + else + { + self.connection->setHeartbeatCallback([callback](auto connection) + { + ICEConnection* conn = [ICEConnection getHandle:connection]; + assert(conn); + callback(conn); + }); + } +} + +-(BOOL) heartbeat:(NSError**)error +{ + try + { + self.connection->heartbeat(); + return YES; + } + catch(const std::exception& ex) + { + *error = convertException(ex); + return NO; + } +} + +-(void) heartbeatAsync:(void (^)(NSError*))exception + sent:(void (^_Nullable)(bool))sent +{ + try + { + self.connection->heartbeatAsync([exception](std::exception_ptr e) + { + exception(convertException(e)); + }, + [sent](bool sentSynchronously) + { + if(sent) + { + sent(sentSynchronously); + } + }); + } + catch(const std::exception& ex) + { + // Typically CommunicatorDestroyedException. Note that the callback is called on the + // thread making the invocation, which is fine since we only use it to fulfill the + // PromiseKit promise. + exception(convertException(ex)); + } +} + +-(void) setACM:(NSNumber* _Nullable)timeout close:(NSNumber* _Nullable)close heartbeat:(NSNumber* _Nullable)heartbeat +{ + Ice::optional<int> opTimeout; + Ice::optional<Ice::ACMClose> opClose; + Ice::optional<Ice::ACMHeartbeat> opHeartbeat; + + if(timeout != nil) + { + opTimeout = [timeout intValue]; + } + + if(close != nil) + { + opClose = Ice::ACMClose([close unsignedCharValue]); + } + + if(heartbeat != nil) + { + opHeartbeat = Ice::ACMHeartbeat([heartbeat unsignedCharValue]); + } + + self.connection->setACM(opTimeout, opClose, opHeartbeat); +} + +-(void) getACM:(int32_t*)timeout close:(uint8_t*)close heartbeat:(uint8_t*)heartbeat +{ + auto acm = self.connection->getACM(); + *timeout = acm.timeout; + *close = static_cast<uint8_t>(acm.close); + *heartbeat = static_cast<uint8_t>(acm.heartbeat); +} + +-(NSString*) type +{ + return toNSString(self.connection->type()); +} + +-(int32_t) timeout +{ + return self.connection->timeout(); +} + +-(NSString*) toString +{ + return toNSString(self.connection->toString()); +} + +-(id) getInfo:(NSError**)error +{ + try + { + auto info = self.connection->getInfo(); + return createConnectionInfo(info); + } + catch(const std::exception& ex) + { + *error = convertException(ex); + return nil; + } +} + +-(BOOL) setBufferSize:(int32_t)rcvSize sndSize:(int32_t)sndSize error:(NSError**)error +{ + try + { + self.connection->setBufferSize(rcvSize, sndSize); + return YES; + } + catch(const std::exception& ex) + { + *error = convertException(ex); + return NO; + } +} + +-(BOOL) throwException:(NSError**)error +{ + try + { + self.connection->throwException(); + return YES; + } + catch(const std::exception& ex) + { + *error = convertException(ex); + return NO; + } +} +@end + +id createConnectionInfo(std::shared_ptr<Ice::ConnectionInfo> infoPtr) +{ + id underlying = infoPtr->underlying ? createConnectionInfo(infoPtr->underlying) : [NSNull null]; + + Class<ICEConnectionInfoFactory> factory = [ICEUtil connectionInfoFactory]; + + auto ipInfo = std::dynamic_pointer_cast<Ice::IPConnectionInfo>(infoPtr); + if(ipInfo) + { + [factory createIPConnectionInfo:underlying + incoming:infoPtr->incoming + adapterName:toNSString(infoPtr->adapterName) + connectionId:toNSString(ipInfo->connectionId) + localAddress:toNSString(ipInfo->localAddress) + localPort:ipInfo->localPort + remoteAddress:toNSString(ipInfo->remoteAddress) + remotePort:ipInfo->remotePort]; + } + + auto tcpInfo = std::dynamic_pointer_cast<Ice::TCPConnectionInfo>(infoPtr); + if(tcpInfo) + { + return [factory createTCPConnectionInfo:underlying + incoming:tcpInfo->incoming + adapterName:toNSString(tcpInfo->adapterName) + connectionId:toNSString(tcpInfo->connectionId) + localAddress:toNSString(tcpInfo->localAddress) + localPort:tcpInfo->localPort + remoteAddress:toNSString(tcpInfo->remoteAddress) + remotePort:tcpInfo->remotePort + rcvSize:tcpInfo->rcvSize + sndSize:tcpInfo->sndSize]; + } + + auto udpInfo = std::dynamic_pointer_cast<Ice::UDPConnectionInfo>(infoPtr); + if(udpInfo) + { + return [factory createUDPConnectionInfo:underlying + incoming:infoPtr->incoming + adapterName:toNSString(infoPtr->adapterName) + connectionId:toNSString(ipInfo->connectionId) + localAddress:toNSString(ipInfo->localAddress) + localPort:ipInfo->localPort + remoteAddress:toNSString(ipInfo->remoteAddress) + remotePort:ipInfo->remotePort + mcastAddress:toNSString(udpInfo->mcastAddress) + mcastPort:udpInfo->mcastPort + rcvSize:udpInfo->rcvSize + sndSize:udpInfo->sndSize]; + } + + auto wsInfo = std::dynamic_pointer_cast<Ice::WSConnectionInfo>(infoPtr); + if(wsInfo) + { + return [factory createWSConnectionInfo:underlying + incoming:wsInfo->incoming + adapterName:toNSString(wsInfo->adapterName) + connectionId:toNSString(wsInfo->adapterName) + headers:toNSDictionary(wsInfo->headers)]; + } + + auto sslInfo = std::dynamic_pointer_cast<IceSSL::ConnectionInfo>(infoPtr); + if(sslInfo) + { + return [factory createSSLConnectionInfo:underlying + incoming:sslInfo->incoming + adapterName:toNSString(sslInfo->adapterName) + connectionId:toNSString(sslInfo->connectionId) + cipher:toNSString(sslInfo->cipher) + certs:toNSArray(sslInfo->certs) + verified:sslInfo->verified]; + } + +#if TARGET_OS_IPHONE + + auto iapInfo = std::dynamic_pointer_cast<IceIAP::ConnectionInfo>(infoPtr); + if(iapInfo) + { + return [factory createIAPConnectionInfo:underlying + incoming:iapInfo->incoming + adapterName:toNSString(iapInfo->adapterName) + connectionId:toNSString(iapInfo->connectionId) + name:toNSString(iapInfo->name) + manufacturer:toNSString(iapInfo->manufacturer) + modelNumber:toNSString(iapInfo->modelNumber) + firmwareRevision:toNSString(iapInfo->firmwareRevision) + hardwareRevision:toNSString(iapInfo->hardwareRevision) + protocol:toNSString(iapInfo->protocol)]; + } + +#endif + + return [NSNull null]; +} diff --git a/swift/src/IceObjc/Convert.h b/swift/src/IceObjc/Convert.h new file mode 100644 index 00000000000..b9674aee8b1 --- /dev/null +++ b/swift/src/IceObjc/Convert.h @@ -0,0 +1,124 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#import "LocalObject.h" + +#include <exception> +#include <vector> +#include <map> +#include <string> + +@class ICERuntimeException; + +namespace IceSSL +{ + class Certificate; +} + +NSError* convertException(const std::exception_ptr&); +NSError* convertException(const std::exception&); +std::exception_ptr convertException(ICERuntimeException*); + +inline NSString* +toNSString(const std::string& s) +{ + return [[NSString alloc] initWithUTF8String:s.c_str()]; +} + +inline std::string +fromNSString(NSString* s) +{ + return s == nil ? std::string() : [s UTF8String]; +} + +inline NSObject<NSCopying>* +toObjC(const std::string& s) +{ + return [[NSString alloc] initWithUTF8String:s.c_str()]; +} + +inline void +fromObjC(id object, std::string& s) +{ + s = object == [NSNull null] ? ::std::string() : [object UTF8String]; +} + +NSObject* toObjC(const std::shared_ptr<Ice::Endpoint>& endpoint); +void fromObjC(id object, std::shared_ptr<Ice::Endpoint>& endpoint); + +NSObject* toObjC(const std::shared_ptr<IceSSL::Certificate>& cert); + +template<typename T> NSMutableArray* +toNSArray(const std::vector<T>& seq) +{ + NSMutableArray* array = [[NSMutableArray alloc] initWithCapacity:seq.size()]; + for(typename std::vector<T>::const_iterator p = seq.begin(); p != seq.end(); ++p) + { + NSObject* obj = toObjC(*p); + [array addObject:obj]; + } + return array; +} + +template<typename T> std::vector<T>& +fromNSArray(NSArray* array, std::vector<T>& seq) +{ + if(array != nil) + { + seq.reserve([array count]); + NSEnumerator* enumerator = [array objectEnumerator]; + id obj = nil; + while((obj = [enumerator nextObject])) + { + T v; + fromObjC(obj, v); + seq.push_back(v); + } + } + return seq; +} + +template<typename T> NSMutableData* +toNSData(const std::vector<T>& seq) +{ + NSMutableData* array = [[NSMutableData alloc] initWithLength:seq.size() * sizeof(T)]; + T* target = (T*)[array bytes]; + for(typename std::vector<T>::const_iterator p = seq.begin(); p != seq.end(); ++p) + { + *target++ = *p; + } + return array; +} + +template<typename K, typename V> NSMutableDictionary* +toNSDictionary(const std::map<K, V>& dict) +{ + NSMutableDictionary* dictionary = [[NSMutableDictionary alloc] initWithCapacity:dict.size()]; + for(typename std::map<K, V>::const_iterator p = dict.begin(); p != dict.end(); ++p) + { + NSObject<NSCopying>* key = toObjC(p->first); + NSObject* value = toObjC(p->second); + [dictionary setObject:value forKey:key]; + } + return dictionary; +} + +template<typename K, typename V> std::map<K, V>& +fromNSDictionary(NSDictionary* dictionary, std::map<K, V>& dict) +{ + if(dictionary != nil) + { + NSEnumerator* enumerator = [dictionary keyEnumerator]; + id obj = nil; + while((obj = [enumerator nextObject])) + { + K k; + fromObjC(obj, k); + V v; + fromObjC([dictionary objectForKey:obj], v); + dict.insert(std::pair<K, V>(k, v)); + } + } + return dict; +} diff --git a/swift/src/IceObjc/Convert.mm b/swift/src/IceObjc/Convert.mm new file mode 100644 index 00000000000..5936047ea1f --- /dev/null +++ b/swift/src/IceObjc/Convert.mm @@ -0,0 +1,392 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#import "BlobjectFacade.h" +#import "Exception.h" +#import "IceUtil.h" +#import "Convert.h" + +NSError* +convertException(const std::exception_ptr& excPtr) +{ + try + { + std::rethrow_exception(excPtr); + } + catch(const std::exception& exc) + { + return convertException(exc); + } + assert(false); +} + +NSError* +convertException(const std::exception& exc) +{ + Class<ICEExceptionFactory> factory = [ICEUtil exceptionFactory]; + + if(dynamic_cast<const Ice::LocalException*>(&exc)) + { + auto iceEx = dynamic_cast<const Ice::LocalException*>(&exc); + + try + { + iceEx->ice_throw(); + } + catch(const Ice::InitializationException& e) + { + return [factory initializationException:toNSString(e.reason) file:toNSString(e.ice_file()) line:e.ice_line()]; + } + catch(const Ice::PluginInitializationException& e) + { + return [factory pluginInitializationException:toNSString(e.reason) file:toNSString(e.ice_file()) line:e.ice_line()]; + } + catch(const Ice::CollocationOptimizationException& e) + { + return [factory collocationOptimizationException:toNSString(e.ice_file()) line:e.ice_line()]; + } + catch(const Ice::AlreadyRegisteredException& e) + { + return [factory alreadyRegisteredException:toNSString(e.kindOfObject) id:toNSString(e.id) file:toNSString(e.ice_file()) line:e.ice_line()]; + } + catch(const Ice::NotRegisteredException& e) + { + return [factory notRegisteredException:toNSString(e.kindOfObject) id:toNSString(e.id) file:toNSString(e.ice_file()) line:e.ice_line()]; + } + catch(const Ice::TwowayOnlyException& e) + { + return [factory twowayOnlyException:toNSString(e.operation) file:toNSString(e.ice_file()) line:e.ice_line()]; + } + catch(const Ice::CloneNotImplementedException& e) + { + return [factory cloneNotImplementedException:toNSString(e.ice_file()) line:e.ice_line()]; + } + catch(const Ice::VersionMismatchException& e) + { + return [factory versionMismatchException:toNSString(e.ice_file()) line:e.ice_line()]; + } + catch(const Ice::CommunicatorDestroyedException& e) + { + return [factory communicatorDestroyedException:toNSString(e.ice_file()) line:e.ice_line()]; + } + catch(const Ice::ObjectAdapterDeactivatedException& e) + { + return [factory objectAdapterDeactivatedException:toNSString(e.name) file:toNSString(e.ice_file()) line:e.ice_line()]; + } + catch(const Ice::ObjectAdapterIdInUseException& e) + { + return [factory objectAdapterIdInUseException:toNSString(e.id) file:toNSString(e.ice_file()) line:e.ice_line()]; + } + catch(const Ice::NoEndpointException& e) + { + return [factory noEndpointException:toNSString(e.proxy) file:toNSString(e.ice_file()) line:e.ice_line()]; + } + catch(const Ice::EndpointParseException& e) + { + return [factory endpointParseException:toNSString(e.str) file:toNSString(e.ice_file()) line:e.ice_line()]; + } + catch(const Ice::EndpointSelectionTypeParseException& e) + { + return [factory endpointSelectionTypeParseException:toNSString(e.str) file:toNSString(e.ice_file()) line:e.ice_line()]; + } + catch(const Ice::VersionParseException& e) + { + return [factory versionParseException:toNSString(e.str) file:toNSString(e.ice_file()) line:e.ice_line()]; + } + catch(const Ice::IdentityParseException& e) + { + return [factory identityParseException:toNSString(e.str) file:toNSString(e.ice_file()) line:e.ice_line()]; + } + catch(const Ice::ProxyParseException& e) + { + return [factory proxyParseException:toNSString(e.str) file:toNSString(e.ice_file()) line:e.ice_line()]; + } + catch(const Ice::IllegalIdentityException& e) + { + return [factory illegalIdentityException:toNSString(e.id.name) category:toNSString(e.id.category) file:toNSString(e.ice_file()) line:e.ice_line()]; + } + catch(const Ice::IllegalServantException& e) + { + return [factory illegalServantException:toNSString(e.reason) file:toNSString(e.ice_file()) line:e.ice_line()]; + } + catch(const Ice::DNSException& e) + { + return [factory dNSException:e.error host:toNSString(e.host) file:toNSString(e.ice_file()) line:e.ice_line()]; + } + catch(const Ice::OperationInterruptedException& e) + { + return [factory operationInterruptedException:toNSString(e.ice_file()) line:e.ice_line()]; + } + catch(const Ice::InvocationCanceledException& e) + { + return [factory invocationCanceledException:toNSString(e.ice_file()) line:e.ice_line()]; + } + catch(const Ice::FeatureNotSupportedException& e) + { + return [factory featureNotSupportedException:toNSString(e.unsupportedFeature) file:toNSString(e.ice_file()) line:e.ice_line()]; + } + catch(const Ice::FixedProxyException& e) + { + return [factory fixedProxyException:toNSString(e.ice_file()) line:e.ice_line()]; + } + catch(const Ice::ResponseSentException& e) + { + return [factory responseSentException:toNSString(e.ice_file()) line:e.ice_line()]; + } + catch(const Ice::SecurityException& e) + { + return [factory securityException:toNSString(e.reason) file:toNSString(e.ice_file()) line:e.ice_line()]; + } + catch(const Ice::UnknownLocalException& e) + { + return [factory unknownLocalException:toNSString(e.unknown) file:toNSString(e.ice_file()) line:e.ice_line()]; + } + catch(const Ice::UnknownUserException& e) + { + return [factory unknownUserException:toNSString(e.unknown) file:toNSString(e.ice_file()) line:e.ice_line()]; + } + catch(const Ice::UnknownException& e) + { + return [factory unknownException:toNSString(e.unknown) file:toNSString(e.ice_file()) line:e.ice_line()]; + } + catch(const Ice::ObjectNotExistException& e) + { + return [factory objectNotExistException:toNSString(e.id.name) category:toNSString(e.id.category) facet:toNSString(e.facet) operation:toNSString(e.operation) file:toNSString(e.ice_file()) line:e.ice_line()]; + } + catch(const Ice::FacetNotExistException& e) + { + return [factory facetNotExistException:toNSString(e.id.name) category:toNSString(e.id.category) facet:toNSString(e.facet) operation:toNSString(e.operation) file:toNSString(e.ice_file()) line:e.ice_line()]; + } + catch(const Ice::OperationNotExistException& e) + { + return [factory operationNotExistException:toNSString(e.id.name) category:toNSString(e.id.category) facet:toNSString(e.facet) operation:toNSString(e.operation) file:toNSString(e.ice_file()) line:e.ice_line()]; + } + catch(const Ice::RequestFailedException& e) + { + return [factory requestFailedException:toNSString(e.id.name) category:toNSString(e.id.category) facet:toNSString(e.facet) operation:toNSString(e.operation) file:toNSString(e.ice_file()) line:e.ice_line()]; + } + catch(const Ice::ConnectionRefusedException& e) + { + return [factory connectionRefusedException:e.error file:toNSString(e.ice_file()) line:e.ice_line()]; + } + catch(const Ice::FileException& e) + { + return [factory fileException:e.error path:toNSString(e.path) file:toNSString(e.ice_file()) line:e.ice_line()]; + } + catch(const Ice::ConnectFailedException& e) + { + return [factory connectFailedException:e.error file:toNSString(e.ice_file()) line:e.ice_line()]; + } + catch(const Ice::ConnectionLostException& e) + { + return [factory connectionLostException:e.error file:toNSString(e.ice_file()) line:e.ice_line()]; + } + catch(const Ice::SocketException& e) + { + return [factory socketException:e.error file:toNSString(e.ice_file()) line:e.ice_line()]; + } + catch(const Ice::SyscallException& e) + { + return [factory syscallException:e.error file:toNSString(e.ice_file()) line:e.ice_line()]; + } + catch(const Ice::ConnectTimeoutException& e) + { + return [factory connectTimeoutException:toNSString(e.ice_file()) line:e.ice_line()]; + } + catch(const Ice::CloseTimeoutException& e) + { + return [factory closeTimeoutException:toNSString(e.ice_file()) line:e.ice_line()]; + } + catch(const Ice::ConnectionTimeoutException& e) + { + return [factory connectionTimeoutException:toNSString(e.ice_file()) line:e.ice_line()]; + } + catch(const Ice::InvocationTimeoutException& e) + { + return [factory invocationTimeoutException:toNSString(e.ice_file()) line:e.ice_line()]; + } + catch(const Ice::TimeoutException& e) + { + return [factory timeoutException:toNSString(e.ice_file()) line:e.ice_line()]; + } + catch(const Ice::BadMagicException& e) + { + NSData* badMagic = [[NSData alloc] initWithBytes:e.badMagic.data() length:e.badMagic.size()]; + return [factory badMagicException:toNSString(e.reason) badMagic:badMagic file:toNSString(e.ice_file()) line:e.ice_line()]; + } + catch(const Ice::UnsupportedProtocolException& e) + { + return [factory unsupportedProtocolException:toNSString(e.reason) badMajor:e.bad.major badMinor:e.bad.minor supportedMajor:e.supported.major supportedMinor:e.supported.minor file:toNSString(e.ice_file()) line:e.ice_line()]; + } + catch(const Ice::UnsupportedEncodingException& e) + { + return [factory unsupportedEncodingException:toNSString(e.reason) badMajor:e.bad.major badMinor:e.bad.minor supportedMajor:e.supported.major supportedMinor:e.supported.minor file:toNSString(e.ice_file()) line:e.ice_line()]; + } + catch(const Ice::UnknownMessageException& e) + { + return [factory unknownMessageException:toNSString(e.reason) file:toNSString(e.ice_file()) line:e.ice_line()]; + } + catch(const Ice::ConnectionNotValidatedException& e) + { + return [factory connectionNotValidatedException:toNSString(e.reason) file:toNSString(e.ice_file()) line:e.ice_line()]; + } + catch(const Ice::UnknownRequestIdException& e) + { + return [factory unknownRequestIdException:toNSString(e.reason) file:toNSString(e.ice_file()) line:e.ice_line()]; + } + catch(const Ice::UnknownReplyStatusException& e) + { + return [factory unknownReplyStatusException:toNSString(e.reason) file:toNSString(e.ice_file()) line:e.ice_line()]; + } + catch(const Ice::CloseConnectionException& e) + { + return [factory closeConnectionException:toNSString(e.reason) file:toNSString(e.ice_file()) line:e.ice_line()]; + } + catch(const Ice::ConnectionManuallyClosedException& e) + { + return [factory connectionManuallyClosedException:e.graceful file:toNSString(e.ice_file()) line:e.ice_line()]; + } + catch(const Ice::IllegalMessageSizeException& e) + { + return [factory illegalMessageSizeException:toNSString(e.reason) file:toNSString(e.ice_file()) line:e.ice_line()]; + } + catch(const Ice::CompressionException& e) + { + return [factory compressionException:toNSString(e.reason) file:toNSString(e.ice_file()) line:e.ice_line()]; + } + catch(const Ice::DatagramLimitException& e) + { + return [factory datagramLimitException:toNSString(e.reason) file:toNSString(e.ice_file()) line:e.ice_line()]; + } + catch(const Ice::ProxyUnmarshalException& e) + { + return [factory proxyUnmarshalException:toNSString(e.reason) file:toNSString(e.ice_file()) line:e.ice_line()]; + } + catch(const Ice::UnmarshalOutOfBoundsException& e) + { + return [factory unmarshalOutOfBoundsException:toNSString(e.reason) file:toNSString(e.ice_file()) line:e.ice_line()]; + } + catch(const Ice::NoValueFactoryException& e) + { + return [factory noValueFactoryException:toNSString(e.reason) type:toNSString(e.type) file:toNSString(e.ice_file()) line:e.ice_line()]; + } + catch(const Ice::UnexpectedObjectException& e) + { + return [factory unexpectedObjectException:toNSString(e.reason) type:toNSString(e.type) expectedType:toNSString(e.expectedType) file:toNSString(e.ice_file()) line:e.ice_line()]; + } + catch(const Ice::MemoryLimitException& e) + { + return [factory memoryLimitException:toNSString(e.reason) file:toNSString(e.ice_file()) line:e.ice_line()]; + } + catch(const Ice::StringConversionException& e) + { + return [factory stringConversionException:toNSString(e.reason) file:toNSString(e.ice_file()) line:e.ice_line()]; + } + catch(const Ice::EncapsulationException& e) + { + return [factory encapsulationException:toNSString(e.reason) file:toNSString(e.ice_file()) line:e.ice_line()]; + } + catch(const Ice::MarshalException& e) + { + return [factory marshalException:toNSString(e.reason) file:toNSString(e.ice_file()) line:e.ice_line()]; + } + catch(const Ice::ProtocolException& e) + { + return [factory protocolException:toNSString(e.reason) file:toNSString(e.ice_file()) line:e.ice_line()]; + } + catch(const Ice::LocalException& e) + { + return [factory localException:toNSString(e.ice_file()) line:e.ice_line()]; + } + } + else + { + return [factory runtimeError:toNSString(exc.what())]; + } + + return nil; +} + +std::exception_ptr +convertException(ICERuntimeException* exc) +{ + const auto file = fromNSString([exc file]); + const auto line = [exc line]; + + @try + { + @throw exc; + } + @catch(ICEObjectNotExistException* e) + { + return std::make_exception_ptr(Ice::ObjectNotExistException(file.c_str(), + line, + Ice::Identity{fromNSString([e name]), + fromNSString([e category])}, + fromNSString([e facet]), + fromNSString([e operation]))); + } + @catch(ICEFacetNotExistException* e) + { + return std::make_exception_ptr(Ice::FacetNotExistException(file.c_str(), + line, + Ice::Identity{fromNSString([e name]), + fromNSString([e category])}, + fromNSString([e facet]), + fromNSString([e operation]))); + } + @catch(ICEOperationNotExistException* e) + { + return std::make_exception_ptr(Ice::OperationNotExistException(file.c_str(), + line, + Ice::Identity{fromNSString([e name]), + fromNSString([e category])}, + fromNSString([e facet]), + fromNSString([e operation]))); + } + @catch(ICEUnknownUserException* e) + { + return std::make_exception_ptr(Ice::UnknownUserException(file.c_str(), + line, + fromNSString([e unknown]))); + } + @catch(ICEUnknownLocalException* e) + { + return std::make_exception_ptr(Ice::UnknownLocalException(file.c_str(), + line, + fromNSString([e unknown]))); + } + @catch(ICEUnknownException* e) + { + return std::make_exception_ptr(Ice::UnknownException(file.c_str(), + line, + fromNSString([e unknown]))); + } + @catch(...) + { + + return std::make_exception_ptr(Ice::UnknownException(file.c_str(), + line, + fromNSString(NSStringFromClass([exc class])))); + } +} + +NSObject* +toObjC(const std::shared_ptr<Ice::Endpoint>& endpoint) +{ + return [ICEEndpoint getHandle:endpoint]; +} + +void +fromObjC(id object, std::shared_ptr<Ice::Endpoint>& endpoint) +{ + ICEEndpoint* endpt = object; + endpoint = object == [NSNull null] ? nullptr : [endpt endpoint]; +} + +NSObject* +toObjC(const std::shared_ptr<IceSSL::Certificate>& cert) +{ + return toNSString(cert->encode()); +} diff --git a/swift/src/IceObjc/Endpoint.h b/swift/src/IceObjc/Endpoint.h new file mode 100644 index 00000000000..25fdb63e6c8 --- /dev/null +++ b/swift/src/IceObjc/Endpoint.h @@ -0,0 +1,87 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#import "LocalObject.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface ICEEndpoint: ICELocalObject +-(NSString*) toString; +-(id) getInfo; +-(bool) isEqual:(ICEEndpoint* _Nullable)endpoint; +@end + +@interface ICEEndpointInfo: ICELocalObject +-(int16_t) getType; +-(BOOL) getDatagram; +-(BOOL) getSecure; +@end + +@protocol ICEEndpointInfoFactory ++(id) createTCPEndpointInfo:(ICEEndpointInfo*)handle + underlying:(id)underlying + timeout:(int32_t)timeout + compress:(BOOL)compress + host:(NSString*)host + port:(int32_t)port + sourceAddress:(NSString*)sourceAddress; + ++(id) createUDPEndpointInfo:(ICEEndpointInfo*)handle + underlying:(id)underlying + timeout:(int32_t)timeout + compress:(BOOL)compress + host:(NSString*)host + port:(int32_t)port + sourceAddress:(NSString*)sourceAddress + mcastInterface:(NSString*)mcastInterface + mcastTtl:(int32_t)mcastTtl; + ++(id) createWSEndpointInfo:(ICEEndpointInfo*)handle + underlying:(id)underlying + timeout:(int32_t)timeout + compress:(BOOL)compress + resource:(NSString*)resource; + ++(id) createOpaqueEndpointInfo:(ICEEndpointInfo*)handle + underlying:(id)underlying + timeout:(int32_t)timeout + compress:(BOOL)compress + encodingMajor:(UInt8)encodingMajor + encodingMinor:(UInt8)encodingMinor + rawBytes:(NSData*)rawBytes; + ++(id) createSSLEndpointInfo:(ICEEndpointInfo*)handle + underlying:(id)underlying + timeout:(int32_t)timeout + compress:(BOOL)compress; + +#if TARGET_OS_IPHONE + ++(id) createIAPEndpointInfo:(ICEEndpointInfo*)handle + underlying:(id)underlying + timeout:(int32_t)timeout + compress:(BOOL)compress + manufacturer:(NSString*)manufacturer + modelNumber:(NSString*)modelNumber + name:(NSString*)name + protocol:(NSString*)protocol; + +#endif + +@end + +#ifdef __cplusplus + +@interface ICEEndpoint() +@property (nonatomic, readonly) std::shared_ptr<Ice::Endpoint> endpoint; ++(nullable ICEEndpointInfo*) createEndpointInfo:(std::shared_ptr<Ice::EndpointInfo>)infoPtr NS_RETURNS_RETAINED; +@end + +@interface ICEEndpointInfo() +@property (nonatomic, readonly) std::shared_ptr<Ice::EndpointInfo> info; +@end + +#endif + +NS_ASSUME_NONNULL_END diff --git a/swift/src/IceObjc/Endpoint.mm b/swift/src/IceObjc/Endpoint.mm new file mode 100644 index 00000000000..0ee26c4419f --- /dev/null +++ b/swift/src/IceObjc/Endpoint.mm @@ -0,0 +1,147 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#import "Endpoint.h" +#import "IceUtil.h" +#import "Convert.h" + +@implementation ICEEndpointInfo + +-(std::shared_ptr<Ice::EndpointInfo>) info +{ + return std::static_pointer_cast<Ice::EndpointInfo>(self.cppObject); +} + +-(int16_t) getType +{ + return self.info->type(); +} + +-(BOOL) getDatagram +{ + return self.info->datagram(); +} + +-(BOOL) getSecure +{ + return self.info->secure(); +} + +@end + +@implementation ICEEndpoint + +-(std::shared_ptr<Ice::Endpoint>) endpoint +{ + return std::static_pointer_cast<Ice::Endpoint>(self.cppObject); +} + +-(NSString*) toString +{ + return toNSString(self.endpoint->toString()); +} + +-(id) getInfo +{ + auto info = self.endpoint->getInfo(); + return [ICEEndpoint createEndpointInfo:info]; +} + +-(bool) isEqual:(ICEEndpoint*)other +{ + return Ice::targetEqualTo(self.endpoint, other.endpoint); +} + ++(id) createEndpointInfo:(std::shared_ptr<Ice::EndpointInfo>)infoPtr +{ + ICEEndpointInfo* handle = [ICEEndpointInfo getHandle:infoPtr]; + id underlying = infoPtr->underlying ? [self createEndpointInfo:infoPtr->underlying] : [NSNull null]; + + Class<ICEEndpointInfoFactory> factory = [ICEUtil endpointInfoFactory]; + + // + // Don't use info->type() to determine the type of the EndpointInfo object. When an endpoint is the + // underlying endpoint of a parent, the child's value for type() is the same as its parent. We have + // to use type casts instead. + // + + auto opaqueInfo = std::dynamic_pointer_cast<Ice::OpaqueEndpointInfo>(infoPtr); + if(opaqueInfo) + { + NSData* rawBytes = [[NSData alloc] initWithBytes:opaqueInfo->rawBytes.data() + length:opaqueInfo->rawBytes.size()]; + + return [factory createOpaqueEndpointInfo:handle + underlying:underlying + timeout:opaqueInfo->timeout + compress:opaqueInfo->compress + encodingMajor:opaqueInfo->rawEncoding.major + encodingMinor:opaqueInfo->rawEncoding.minor + rawBytes:rawBytes]; + } + + auto udpInfo = std::dynamic_pointer_cast<Ice::UDPEndpointInfo>(infoPtr); + if(udpInfo) + { + return [factory createUDPEndpointInfo:handle + underlying:underlying + timeout:udpInfo->timeout + compress:udpInfo->compress + host:toNSString(udpInfo->host) + port:udpInfo->port + sourceAddress:toNSString(udpInfo->sourceAddress) + mcastInterface:toNSString(udpInfo->mcastInterface) + mcastTtl:udpInfo->mcastTtl]; + } + + auto ipInfo = std::dynamic_pointer_cast<Ice::IPEndpointInfo>(infoPtr); + if(std::dynamic_pointer_cast<Ice::TCPEndpointInfo>(infoPtr)) + { + return [factory createTCPEndpointInfo:handle + underlying:underlying + timeout:ipInfo->timeout + compress:ipInfo->compress + host:toNSString(ipInfo->host) + port:ipInfo->port + sourceAddress:toNSString(ipInfo->sourceAddress)]; + } + + auto wsInfo = std::dynamic_pointer_cast<Ice::WSEndpointInfo>(infoPtr); + if(wsInfo) + { + return [factory createWSEndpointInfo:handle + underlying:underlying + timeout:infoPtr->timeout + compress:infoPtr->compress + resource:toNSString(wsInfo->resource)]; + } + + if(std::dynamic_pointer_cast<IceSSL::EndpointInfo>(infoPtr)) + { + return [factory createSSLEndpointInfo:handle + underlying:underlying + timeout:infoPtr->timeout + compress:infoPtr->compress]; + } + +#if TARGET_OS_IPHONE + + auto iapInfo = std::dynamic_pointer_cast<IceIAP::EndpointInfo>(infoPtr); + if(iapInfo) + { + return [factory createIAPEndpointInfo:handle + underlying:underlying + timeout:iapInfo->timeout + compress:iapInfo->compress + manufacturer:toNSString(iapInfo->manufacturer) + modelNumber:toNSString(iapInfo->modelNumber) + name:toNSString(iapInfo->name) + protocol:toNSString(iapInfo->protocol)]; + } + +#endif + + return [NSNull null]; +} +@end diff --git a/swift/src/IceObjc/Exception.h b/swift/src/IceObjc/Exception.h new file mode 100644 index 00000000000..cdffcd6c015 --- /dev/null +++ b/swift/src/IceObjc/Exception.h @@ -0,0 +1,129 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#import <Foundation/Foundation.h> + +NS_ASSUME_NONNULL_BEGIN + +@protocol ICEExceptionFactory ++(NSError*) initializationException:(NSString*)reason file:(NSString*)file line:(size_t)line; ++(NSError*) pluginInitializationException:(NSString*)reason file:(NSString*)file line:(size_t)line; ++(NSError*) collocationOptimizationException:(NSString*)file line:(size_t)line; ++(NSError*) alreadyRegisteredException:(NSString*)kindOfObject id:(NSString*)id file:(NSString*)file line:(size_t)line; ++(NSError*) notRegisteredException:(NSString*)kindOfObject id:(NSString*)id file:(NSString*)file line:(size_t)line; ++(NSError*) twowayOnlyException:(NSString*)operation file:(NSString*)file line:(size_t)line; ++(NSError*) cloneNotImplementedException:(NSString*)file line:(size_t)line; ++(NSError*) versionMismatchException:(NSString*)file line:(size_t)line; ++(NSError*) communicatorDestroyedException:(NSString*)file line:(size_t)line; ++(NSError*) objectAdapterDeactivatedException:(NSString*)name file:(NSString*)file line:(size_t)line; ++(NSError*) objectAdapterIdInUseException:(NSString*)id file:(NSString*)file line:(size_t)line NS_SWIFT_NAME(objectAdapterIdInUseException(_:file:line:)); ++(NSError*) noEndpointException:(NSString*)proxy file:(NSString*)file line:(size_t)line; ++(NSError*) endpointParseException:(NSString*)str file:(NSString*)file line:(size_t)line; ++(NSError*) endpointSelectionTypeParseException:(NSString*)str file:(NSString*)file line:(size_t)line; ++(NSError*) versionParseException:(NSString*)str file:(NSString*)file line:(size_t)line; ++(NSError*) identityParseException:(NSString*)str file:(NSString*)file line:(size_t)line; ++(NSError*) proxyParseException:(NSString*)str file:(NSString*)file line:(size_t)line; ++(NSError*) illegalIdentityException:(NSString*)name category:(NSString*)category file:(NSString*)file line:(size_t)line; ++(NSError*) illegalServantException:(NSString*)reason file:(NSString*)file line:(size_t)line; ++(NSError*) dNSException:(int32_t)error host:(NSString*)host file:(NSString*)file line:(size_t)line; ++(NSError*) operationInterruptedException:(NSString*)file line:(size_t)line; ++(NSError*) invocationCanceledException:(NSString*)file line:(size_t)line; ++(NSError*) featureNotSupportedException:(NSString*)unsupportedFeature file:(NSString*)file line:(size_t)line; ++(NSError*) fixedProxyException:(NSString*)file line:(size_t)line; ++(NSError*) responseSentException:(NSString*)file line:(size_t)line; ++(NSError*) securityException:(NSString*)reason file:(NSString*)file line:(size_t)line; ++(NSError*) localException:(NSString*)file line:(size_t)line; + +// UnknownException ++(NSError*) unknownLocalException:(NSString*)unknown file:(NSString*)file line:(size_t)line; ++(NSError*) unknownUserException:(NSString*)unknown file:(NSString*)file line:(size_t)line; ++(NSError*) unknownException:(NSString*)unknown file:(NSString*)file line:(size_t)line; + +// RequestFailedException ++(NSError*) objectNotExistException:(NSString*)name category:(NSString*)category facet:(NSString*)facet operation:(NSString*)operation file:(NSString*)file line:(size_t)line; ++(NSError*) facetNotExistException:(NSString*)name category:(NSString*)category facet:(NSString*)facet operation:(NSString*)operation file:(NSString*)file line:(size_t)line; ++(NSError*) operationNotExistException:(NSString*)name category:(NSString*)category facet:(NSString*)facet operation:(NSString*)operation file:(NSString*)file line:(size_t)line; ++(NSError*) requestFailedException:(NSString*)name category:(NSString*)category facet:(NSString*)facet operation:(NSString*)operation file:(NSString*)file line:(size_t)line; + +// SyscallException ++(NSError*) connectionRefusedException:(int32_t)error file:(NSString*)file line:(size_t)line; // ConnectFailedException: SyscallException ++(NSError*) fileException:(int32_t)error path:(NSString*)path file:(NSString*)file line:(size_t)line; ++(NSError*) connectFailedException:(int32_t)error file:(NSString*)file line:(size_t)line; ++(NSError*) connectionLostException:(int32_t)error file:(NSString*)file line:(size_t)line; ++(NSError*) socketException:(int32_t)error file:(NSString*)file line:(size_t)line; ++(NSError*) syscallException:(int32_t)error file:(NSString*)file line:(size_t)line; + +// TimeoutException ++(NSError*) connectTimeoutException:(NSString*)file line:(size_t)line; ++(NSError*) closeTimeoutException:(NSString*)file line:(size_t)line; ++(NSError*) connectionTimeoutException:(NSString*)file line:(size_t)line; ++(NSError*) invocationTimeoutException:(NSString*)file line:(size_t)line; ++(NSError*) timeoutException:(NSString*)file line:(size_t)line; + +// ProtocolException ++(NSError*) badMagicException:(NSString*)reason badMagic:(NSData*)badMagic file:(NSString*)file line:(size_t)line; ++(NSError*) unsupportedProtocolException:(NSString*)reason badMajor:(uint8_t)badMajor badMinor:(uint8_t)badMinor supportedMajor:(uint8_t)supportedMajor supportedMinor:(uint8_t)supportedMinor file:(NSString*)file line:(size_t)line; ++(NSError*) unsupportedEncodingException:(NSString*)reason badMajor:(uint8_t)badMajor badMinor:(uint8_t)badMinor supportedMajor:(uint8_t)supportedMajor supportedMinor:(uint8_t)supportedMinor file:(NSString*)file line:(size_t)line; ++(NSError*) unknownMessageException:(NSString*)reason file:(NSString*)file line:(size_t)line; ++(NSError*) connectionNotValidatedException:(NSString*)reason file:(NSString*)file line:(size_t)line; ++(NSError*) unknownRequestIdException:(NSString*)reason file:(NSString*)file line:(size_t)line; ++(NSError*) unknownReplyStatusException:(NSString*)reason file:(NSString*)file line:(size_t)line; ++(NSError*) closeConnectionException:(NSString*)reason file:(NSString*)file line:(size_t)line; ++(NSError*) connectionManuallyClosedException:(BOOL)graceful file:(NSString*)file line:(size_t)line; ++(NSError*) illegalMessageSizeException:(NSString*)reason file:(NSString*)file line:(size_t)line; ++(NSError*) compressionException:(NSString*)reason file:(NSString*)file line:(size_t)line; ++(NSError*) datagramLimitException:(NSString*)reason file:(NSString*)file line:(size_t)line; +// ProtocolException/MarshalException ++(NSError*) proxyUnmarshalException:(NSString*)reason file:(NSString*)file line:(size_t)line; ++(NSError*) unmarshalOutOfBoundsException:(NSString*)reason file:(NSString*)file line:(size_t)line NS_SWIFT_NAME(unmarshalOutofBoundsException(_:file:line:)); ++(NSError*) noValueFactoryException:(NSString*)reason type:(NSString*)type file:(NSString*)file line:(size_t)line; ++(NSError*) unexpectedObjectException:(NSString*)reason type:(NSString*)type expectedType:(NSString*)expectedType file:(NSString*)file line:(size_t)line; ++(NSError*) memoryLimitException:(NSString*)reason file:(NSString*)file line:(size_t)line; ++(NSError*) stringConversionException:(NSString*)reason file:(NSString*)file line:(size_t)line; ++(NSError*) encapsulationException:(NSString*)reason file:(NSString*)file line:(size_t)line; ++(NSError*) marshalException:(NSString*)reason file:(NSString*)file line:(size_t)line; ++(NSError*) protocolException:(NSString*)reason file:(NSString*)file line:(size_t)line; + +// For generic std::exception ++(NSError*) runtimeError:(NSString*)message; +@end + +@interface ICERuntimeException : NSObject +@property NSString* file; +@property int line; +@end + +// +// Request Failed exceptions +// +@interface ICERequestFailedException : ICERuntimeException +@property (nonatomic) NSString* name; +@property (nonatomic) NSString* category; +@property (nonatomic) NSString* facet; +@property (nonatomic) NSString* operation; +@end + +@interface ICEObjectNotExistException : ICERequestFailedException +@end + +@interface ICEFacetNotExistException : ICERequestFailedException +@end + +@interface ICEOperationNotExistException : ICERequestFailedException +@end + +// +// Unknown exceptions +// +@interface ICEUnknownException : ICERuntimeException +@property (nonatomic) NSString* unknown; +@end + +@interface ICEUnknownLocalException : ICEUnknownException +@end + +@interface ICEUnknownUserException : ICEUnknownException +@end + +NS_ASSUME_NONNULL_END diff --git a/swift/src/IceObjc/Exception.mm b/swift/src/IceObjc/Exception.mm new file mode 100644 index 00000000000..d63b1e4ce0f --- /dev/null +++ b/swift/src/IceObjc/Exception.mm @@ -0,0 +1,36 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#import "Exception.h" + +@implementation ICERuntimeException +@synthesize file; +@synthesize line; +@end + +@implementation ICERequestFailedException +@synthesize name; +@synthesize category; +@synthesize facet; +@synthesize operation; +@end + +@implementation ICEObjectNotExistException +@end + +@implementation ICEFacetNotExistException +@end + +@implementation ICEOperationNotExistException +@end + +@implementation ICEUnknownException +@synthesize unknown; +@end + +@implementation ICEUnknownLocalException +@end + +@implementation ICEUnknownUserException +@end diff --git a/swift/src/IceObjc/IceUtil.h b/swift/src/IceObjc/IceUtil.h new file mode 100644 index 00000000000..97eb3ce0e57 --- /dev/null +++ b/swift/src/IceObjc/IceUtil.h @@ -0,0 +1,67 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#import "Communicator.h" +#import "Connection.h" +#import "Endpoint.h" +#import "Exception.h" +#import "Logger.h" +#import "Properties.h" +#import "AdminFacetFactory.h" + +NS_ASSUME_NONNULL_BEGIN + +// +// Utility methods +// +@interface ICEUtil: NSObject +@property (class, nonatomic, readonly) Class<ICEExceptionFactory> exceptionFactory; +@property (class, nonatomic, readonly) Class<ICEConnectionInfoFactory> connectionInfoFactory; +@property (class, nonatomic, readonly) Class<ICEEndpointInfoFactory> endpointInfoFactory; +@property (class, nonatomic, readonly) Class<ICEAdminFacetFactory> adminFacetFactory; + +//This method should only be called once to guarenteed thread safety ++(BOOL) registerFactories:(Class<ICEExceptionFactory>)exception + connectionInfo:(Class<ICEConnectionInfoFactory>)connectionInfo + endpointInfo:(Class<ICEEndpointInfoFactory>)endpointInfo + adminFacet:(Class<ICEAdminFacetFactory>)adminFacet +NS_SWIFT_NAME(registerFactories(exception:connectionInfo:endpointInfo:adminFacet:)); + ++(nullable ICECommunicator*) initialize:(NSArray*)swiftArgs + properties:(ICEProperties*)properties + withConfigFile:(BOOL)withConfiFile + logger:(id<ICELoggerProtocol> _Nullable)logger + remArgs:(NSArray* _Null_unspecified * _Null_unspecified)remArgs + error:(NSError* _Nullable * _Nullable)error; + ++(ICEProperties*) createProperties; + ++(nullable ICEProperties*) createProperties:(NSArray* _Nullable)swiftArgs + defaults:(ICEProperties* _Nullable)defaults + remArgs:(NSArray* _Null_unspecified * _Null_unspecified)remArgs + error:(NSError* _Nullable * _Nullable)error; ++(BOOL) stringToIdentity:(NSString*)str + name:(NSString* __strong _Nonnull * _Nonnull)name + category:(NSString* __strong _Nonnull * _Nonnull)category + error:(NSError* _Nullable * _Nullable)error NS_SWIFT_NAME(stringToIdentity(str:name:category:)); + ++(NSString*) identityToString:(NSString*)name + category:(NSString*)category + mode:(uint8_t)mode + NS_SWIFT_NAME(identityToString(name:category:mode:)); + ++(NSString*) encodingVersionToString:(UInt8)major + minor:(UInt8)minor NS_SWIFT_NAME(encodingVersionToString(major:minor:)); + ++(nullable NSString*) escapeString:(NSString*)string + special:(NSString*)special + communicator:(ICECommunicator*)communicator + error:(NSError* _Nullable * _Nullable)error + NS_SWIFT_NAME(escapeString(string:special:communicator:)); + ++(NSString*) errorToString:(int32_t)error NS_SWIFT_NAME(errorToString(_:)); ++(NSString*) errorToStringDNS:(int32_t)error NS_SWIFT_NAME(errorToStringDNS(_:)); +@end + +NS_ASSUME_NONNULL_END diff --git a/swift/src/IceObjc/IceUtil.mm b/swift/src/IceObjc/IceUtil.mm new file mode 100644 index 00000000000..86fcfae57c1 --- /dev/null +++ b/swift/src/IceObjc/IceUtil.mm @@ -0,0 +1,220 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#import "Logger.h" +#import "Properties.h" +#import "IceUtil.h" +#import "Convert.h" +#import "LoggerWrapperI.h" + +#import <Ice/Instance.h> +#import <Ice/StringUtil.h> +#import <Ice/Network.h> + +namespace +{ + class Init + { + public: + + Init() + { + // + // Register plug-ins included in the Ice framework (a single binary file) + // See also RegisterPluginsInit.cpp in cpp/src/Ice + // + Ice::registerIceSSL(false); + Ice::registerIceDiscovery(false); + Ice::registerIceLocatorDiscovery(false); +#if defined(__APPLE__) && TARGET_OS_IPHONE != 0 + Ice::registerIceIAP(false); +#endif + } + }; + Init init; +} + +@implementation ICEUtil +static Class<ICEExceptionFactory> _exceptionFactory; +static Class<ICEConnectionInfoFactory> _connectionInfoFactory; +static Class<ICEEndpointInfoFactory> _endpointInfoFactory; +static Class<ICEAdminFacetFactory> _adminFacetFactory; + ++(Class<ICEExceptionFactory>) exceptionFactory +{ + return _exceptionFactory; +} + ++(Class<ICEConnectionInfoFactory>) connectionInfoFactory +{ + return _connectionInfoFactory; +} + ++(Class<ICEEndpointInfoFactory>) endpointInfoFactory +{ + return _endpointInfoFactory; +} + ++(Class<ICEAdminFacetFactory>) adminFacetFactory +{ + return _adminFacetFactory; +} + ++(BOOL) registerFactories:(Class<ICEExceptionFactory>)exception + connectionInfo:(Class<ICEConnectionInfoFactory>)connectionInfo + endpointInfo:(Class<ICEEndpointInfoFactory>)endpointInfo + adminFacet:(Class<ICEAdminFacetFactory>)adminFacet +{ + _exceptionFactory = exception; + _connectionInfoFactory = connectionInfo; + _endpointInfoFactory = endpointInfo; + _adminFacetFactory = adminFacet; + return true; +} + ++(ICECommunicator*) initialize:(NSArray*)swiftArgs + properties:(ICEProperties*)properties + withConfigFile:(BOOL)withConfigFile + logger:(id<ICELoggerProtocol>)logger + remArgs:(NSArray**)remArgs + error:(NSError**)error +{ + Ice::StringSeq args; + fromNSArray(swiftArgs, args); + + assert(properties); + assert(withConfigFile || args.empty()); + + // + // Collect InitializationData members. + // + Ice::InitializationData initData; + initData.properties = [properties properties]; + + if(logger) + { + initData.logger = std::make_shared<LoggerWrapperI>(logger); + } + + try + { + std::shared_ptr<Ice::Communicator> communicator; + if(withConfigFile) + { + communicator = Ice::initialize(args, initData); + *remArgs = toNSArray(args); + } + else + { + communicator = Ice::initialize(initData); + } + return [ICECommunicator getHandle:communicator]; + } + catch(const std::exception& err) + { + *error = convertException(err); + } + return nil; +} + ++(ICEProperties*) createProperties +{ + return [ICEProperties getHandle:Ice::createProperties()]; +} + ++(ICEProperties*) createProperties:(NSArray*)swiftArgs + defaults:(ICEProperties*)defaults + remArgs:(NSArray**)remArgs + error:(NSError**)error +{ + try + { + std::vector<std::string> a; + fromNSArray(swiftArgs, a); + std::shared_ptr<Ice::Properties> def; + if(defaults) + { + def = [defaults properties]; + } + auto props = Ice::createProperties(a, def); + + // a now contains remaning arguments that were not used by Ice::createProperties + if(remArgs) + { + *remArgs = toNSArray(a); + } + return [ICEProperties getHandle:props]; + } + catch(const std::exception& ex) + { + *error = convertException(ex); + } + + return nil; +} + ++(BOOL) stringToIdentity:(NSString*)str + name:(NSString* __strong _Nonnull * _Nonnull)name + category:(NSString* __strong _Nonnull * _Nonnull)category + error:(NSError* _Nullable * _Nullable)error +{ + try + { + auto ident = Ice::stringToIdentity(fromNSString(str)); + *name = toNSString(ident.name); + *category = toNSString(ident.category); + return YES; + } + catch(const std::exception& ex) + { + *error = convertException(ex); + return NO; + } +} + ++(NSString*) identityToString:(NSString*)name + category:(NSString*)category + mode:(uint8_t)mode +{ + Ice::Identity identity{fromNSString(name), fromNSString(category)}; + return toNSString(Ice::identityToString(identity, static_cast<Ice::ToStringMode>(mode))); +} + ++(NSString*) encodingVersionToString:(UInt8)major minor:(UInt8)minor +{ + Ice::EncodingVersion v {major, minor}; + return toNSString(Ice::encodingVersionToString(v)); +} + ++(NSString*) escapeString:(NSString *)string + special:(NSString *)special + communicator:(ICECommunicator*)communicator error:(NSError *__autoreleasing _Nullable *)error +{ + try + { + + auto instance = IceInternal::getInstance([communicator communicator]); + return toNSString(IceInternal::escapeString(fromNSString(string), + fromNSString(special), + instance->toStringMode())); + } + catch(const std::exception& ex) + { + *error = convertException(ex); + return nil; + } + +} + ++(NSString*) errorToString:(int32_t)error +{ + return toNSString(IceUtilInternal::errorToString(error)); +} + ++(NSString*) errorToStringDNS:(int32_t)error +{ + return toNSString(IceInternal::errorToStringDNS(error)); +} + +@end diff --git a/swift/src/IceObjc/ImplicitContext.h b/swift/src/IceObjc/ImplicitContext.h new file mode 100644 index 00000000000..091761e7a6e --- /dev/null +++ b/swift/src/IceObjc/ImplicitContext.h @@ -0,0 +1,26 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#import "LocalObject.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface ICEImplicitContext: ICELocalObject +-(NSDictionary<NSString*, NSString*>*) getContext; +-(void) setContext:(NSDictionary<NSString*, NSString*>*)context; +-(bool) containsKey:(NSString*)string; +-(NSString*) get:(NSString*)key; +-(NSString*) put:(NSString*)key value:(NSString*)value; +-(NSString*) remove:(NSString*)key; +@end + +#ifdef __cplusplus + +@interface ICEImplicitContext() +@property (nonatomic, readonly) std::shared_ptr<Ice::ImplicitContext> implicitContext; +@end + +#endif + +NS_ASSUME_NONNULL_END diff --git a/swift/src/IceObjc/ImplicitContext.mm b/swift/src/IceObjc/ImplicitContext.mm new file mode 100644 index 00000000000..01f448c5af7 --- /dev/null +++ b/swift/src/IceObjc/ImplicitContext.mm @@ -0,0 +1,47 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#import "ImplicitContext.h" +#import "Convert.h" + +@implementation ICEImplicitContext + +-(std::shared_ptr<Ice::ImplicitContext>) implicitContext +{ + return std::static_pointer_cast<Ice::ImplicitContext>(self.cppObject); +} + +-(NSDictionary<NSString*, NSString*>*) getContext +{ + return toNSDictionary(self.implicitContext->getContext()); +} + +-(void) setContext:(NSDictionary<NSString*, NSString*>*)context +{ + Ice::Context c; + fromNSDictionary(context, c); + self.implicitContext->setContext(c); +} + +-(bool) containsKey:(NSString*)string +{ + return self.implicitContext->containsKey(fromNSString(string)); +} + +-(NSString*) get:(NSString*)key +{ + return toNSString(self.implicitContext->get(fromNSString(key))); +} + +-(NSString*) put:(NSString*)key value:(NSString*)value +{ + return toNSString(self.implicitContext->put(fromNSString(key), fromNSString(value))); +} + +-(NSString*) remove:(NSString*)key +{ + return toNSString(self.implicitContext->remove(fromNSString(key))); +} + +@end diff --git a/swift/src/IceObjc/LocalObject.h b/swift/src/IceObjc/LocalObject.h new file mode 100644 index 00000000000..73d97cbb5c3 --- /dev/null +++ b/swift/src/IceObjc/LocalObject.h @@ -0,0 +1,27 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#import "Config.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface ICELocalObject : NSObject +// +// We hold a weak referece to the (possile) Swift object which has a handle to +// this ICELocalObject. That way we can recover the Swift object later. +// +@property (weak, atomic, nullable) id swiftRef; +-(instancetype) init ICE_SWIFT_UNAVAILABLE(""); +@end + +#ifdef __cplusplus + +@interface ICELocalObject () +@property (nonatomic, readonly) std::shared_ptr<void> cppObject; ++(nullable instancetype) getHandle:(std::shared_ptr<void>)cppObject NS_RETURNS_RETAINED; +@end + +#endif + +NS_ASSUME_NONNULL_END diff --git a/swift/src/IceObjc/LocalObject.mm b/swift/src/IceObjc/LocalObject.mm new file mode 100644 index 00000000000..092397a308a --- /dev/null +++ b/swift/src/IceObjc/LocalObject.mm @@ -0,0 +1,64 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#include <unordered_map> + +#import "LocalObject.h" + +namespace +{ + std::unordered_map<void*, __weak ICELocalObject*> cachedObjects; +} + +@implementation ICELocalObject + +-(instancetype) initWithCppObject:(std::shared_ptr<void>)cppObject +{ + assert(cppObject); + self = [super init]; + if(!self) + { + return nil; + } + + _cppObject = std::move(cppObject); + + @synchronized([ICELocalObject class]) + { + assert(cachedObjects.find(_cppObject.get()) == cachedObjects.end()); + cachedObjects.insert(std::make_pair(_cppObject.get(), self)); + } + return self; +} + ++(nullable instancetype) getHandle:(std::shared_ptr<void>)cppObject +{ + if(cppObject == nullptr) + { + return nil; + } + @synchronized([ICELocalObject class]) + { + std::unordered_map<void*, __weak ICELocalObject*>::const_iterator p = cachedObjects.find(cppObject.get()); + if(p != cachedObjects.end()) + { + return p->second; + } + else + { + return [[[self class] alloc] initWithCppObject:std::move(cppObject)]; + } + } +} + +-(void) dealloc { + assert(_cppObject != nullptr); + @synchronized([ICELocalObject class]) + { + cachedObjects.erase(_cppObject.get()); + _cppObject = nullptr; + } +} + +@end diff --git a/swift/src/IceObjc/Logger.h b/swift/src/IceObjc/Logger.h new file mode 100644 index 00000000000..234e05f911f --- /dev/null +++ b/swift/src/IceObjc/Logger.h @@ -0,0 +1,35 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#import "LocalObject.h" + +NS_ASSUME_NONNULL_BEGIN + +@protocol ICELoggerProtocol +-(void) print:(NSString*)message NS_SWIFT_NAME(print(_:)); +-(void) trace:(NSString*)category message:(NSString*)message NS_SWIFT_NAME(trace(category:message:)); +-(void) warning:(NSString*)message NS_SWIFT_NAME(warning(_:)); +-(void) error:(NSString*)message NS_SWIFT_NAME(error(_:)); +-(NSString*) getPrefix; +-(id) cloneWithPrefix:(NSString*)prefix NS_SWIFT_NAME(cloneWithPrefix(_:)); +@end + +@interface ICELogger: ICELocalObject<ICELoggerProtocol> +-(void) print:(NSString*)message; +-(void) trace:(NSString*)category message:(NSString*)message; +-(void) warning:(NSString*)message; +-(void) error:(NSString*)message; +-(NSString*) getPrefix; +-(id) cloneWithPrefix:(NSString*)prefix; +@end + +#ifdef __cplusplus + +@interface ICELogger() +@property (nonatomic, readonly) std::shared_ptr<Ice::Logger> logger; +@end + +#endif + +NS_ASSUME_NONNULL_END diff --git a/swift/src/IceObjc/Logger.mm b/swift/src/IceObjc/Logger.mm new file mode 100644 index 00000000000..ed10e277afb --- /dev/null +++ b/swift/src/IceObjc/Logger.mm @@ -0,0 +1,43 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#import "Logger.h" +#import "Convert.h" + +@implementation ICELogger +-(std::shared_ptr<Ice::Logger>) logger +{ + return std::static_pointer_cast<Ice::Logger>(self.cppObject); +} + +-(void) print:(NSString*)message +{ + self.logger->print(fromNSString(message)); +} + +-(void) trace:(NSString*)category message:(NSString*)message +{ + self.logger->trace(fromNSString(category), fromNSString(message)); +} + +-(void) warning:(NSString*)message +{ + self.logger->warning(fromNSString(message)); +} + +-(void) error:(NSString*)message +{ + self.logger->error(fromNSString(message)); +} + +-(NSString*) getPrefix +{ + return toNSString(self.logger->getPrefix()); +} + +-(id) cloneWithPrefix:(NSString*)prefix +{ + return [ICELogger getHandle:self.logger->cloneWithPrefix(fromNSString(prefix))]; +} +@end diff --git a/swift/src/IceObjc/LoggerWrapperI.h b/swift/src/IceObjc/LoggerWrapperI.h new file mode 100644 index 00000000000..95dd0b40fcb --- /dev/null +++ b/swift/src/IceObjc/LoggerWrapperI.h @@ -0,0 +1,64 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#import "Convert.h" + +class LoggerWrapperI : public Ice::Logger +{ +public: + + LoggerWrapperI(id<ICELoggerProtocol> logger) : _logger(logger) + { + } + + virtual ~LoggerWrapperI() + { + } + + virtual void + print(const std::string& msg) + { + [_logger print:toNSString(msg)]; + } + + virtual void + trace(const std::string& category, const std::string& msg) + { + [_logger trace:toNSString(category) message:toNSString(msg)]; + } + + virtual void + warning(const std::string& msg) + { + [_logger warning:toNSString(msg)]; + } + + virtual void + error(const std::string& msg) + { + [_logger error:toNSString(msg)]; + } + + virtual std::shared_ptr<Ice::Logger> + cloneWithPrefix(const std::string& prefix) + { + return std::make_shared<LoggerWrapperI>([_logger cloneWithPrefix:toNSString(prefix)]); + } + + virtual std::string + getPrefix() + { + return fromNSString([_logger getPrefix]); + } + + id<ICELoggerProtocol> + getLogger() + { + return _logger; + } + +private: + + id<ICELoggerProtocol> _logger; +}; diff --git a/swift/src/IceObjc/ObjectAdapter.h b/swift/src/IceObjc/ObjectAdapter.h new file mode 100644 index 00000000000..d763bc61c3b --- /dev/null +++ b/swift/src/IceObjc/ObjectAdapter.h @@ -0,0 +1,48 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#import "LocalObject.h" + +@class ICECommunicator; +@class ICEObjectPrx; +@class ICEEndpoint; +@class ICEConnection; +@class ICERuntimeException; +@protocol ICEBlobjectFacade; + +NS_ASSUME_NONNULL_BEGIN + +@interface ICEObjectAdapter: ICELocalObject +-(NSString*) getName; +-(ICECommunicator*) getCommunicator; +-(BOOL) activate:(NSError* _Nullable * _Nullable)error; +-(void) hold; +-(void) waitForHold; +-(void) deactivate; +-(void) waitForDeactivate; +-(BOOL) isDeactivated; +-(void) destroy; +-(nullable ICEObjectPrx*) createProxy:(NSString*)name category:(NSString*)category error:(NSError* _Nullable * _Nullable)error NS_SWIFT_NAME(createProxy(name:category:)); +-(nullable ICEObjectPrx*) createDirectProxy:(NSString*)name category:(NSString*)category error:(NSError* _Nullable * _Nullable)error NS_SWIFT_NAME(createDirectProxy(name:category:)); +-(nullable ICEObjectPrx*) createIndirectProxy:(NSString*)name category:(NSString*)category error:(NSError* _Nullable * _Nullable)error NS_SWIFT_NAME(createIndirectProxy(name:category:)); +-(void) setLocator:(ICEObjectPrx* _Nullable)locator; +-(nullable ICEObjectPrx*) getLocator; +-(NSArray<ICEEndpoint*>*) getEndpoints; +-(BOOL) refreshPublishedEndpoints:(NSError* _Nullable * _Nullable)error; +-(NSArray<ICEEndpoint*>*) getPublishedEndpoints; +-(BOOL) setPublishedEndpoints:(NSArray<ICEEndpoint*>*)newEndpoints error:(NSError* _Nullable * _Nullable)error; +-(nullable dispatch_queue_t) getDispatchQueue:(NSError* _Nullable * _Nullable)error; + +-(void) registerDefaultServant:(id<ICEBlobjectFacade>)facade NS_SWIFT_NAME(registerDefaultServant(_:)); +@end + +#ifdef __cplusplus + +@interface ICEObjectAdapter() +@property (nonatomic, readonly) std::shared_ptr<Ice::ObjectAdapter> objectAdapter; +@end + +#endif + +NS_ASSUME_NONNULL_END diff --git a/swift/src/IceObjc/ObjectAdapter.mm b/swift/src/IceObjc/ObjectAdapter.mm new file mode 100644 index 00000000000..d2a5dfec592 --- /dev/null +++ b/swift/src/IceObjc/ObjectAdapter.mm @@ -0,0 +1,226 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#import "Config.h" +#import "ObjectAdapter.h" +#import "Convert.h" +#import "ObjectPrx.h" +#import "Connection.h" +#import "Communicator.h" +#import "BlobjectFacade.h" + +@implementation ICEObjectAdapter + +-(std::shared_ptr<Ice::ObjectAdapter>) objectAdapter +{ + return std::static_pointer_cast<Ice::ObjectAdapter>(self.cppObject); +} + +-(NSString*) getName +{ + return toNSString(self.objectAdapter->getName()); +} + +-(ICECommunicator*) getCommunicator +{ + auto comm = self.objectAdapter->getCommunicator(); + return [ICECommunicator getHandle:comm]; +} + +-(BOOL) activate:(NSError* _Nullable * _Nullable)error +{ + try + { + self.objectAdapter->activate(); + return YES; + } + catch(const std::exception& ex) + { + *error = convertException(ex); + return NO; + } +} + +-(void) hold +{ + try + { + self.objectAdapter->hold(); + } + catch(const Ice::ObjectAdapterDeactivatedException&) + { + // ignored + } + catch(const std::exception&) + { + // unexpected but ignored nevertheless + } +} + +-(void) waitForHold +{ + try + { + self.objectAdapter->waitForHold(); + } + catch(const Ice::ObjectAdapterDeactivatedException&) + { + // ignored, returns immediately + } + catch(const std::exception&) + { + // unexpected but ignored nevertheless + } +} + +-(void) deactivate +{ + self.objectAdapter->deactivate(); +} + +-(void) waitForDeactivate +{ + self.objectAdapter->waitForDeactivate(); +} + +-(BOOL) isDeactivated +{ + return self.objectAdapter->isDeactivated(); +} + +-(void) destroy +{ + self.objectAdapter->destroy(); +} + +-(nullable ICEObjectPrx*) createProxy:(NSString*)name category:(NSString*)category error:(NSError* _Nullable * _Nullable)error +{ + try + { + auto prx = self.objectAdapter->createProxy(Ice::Identity{fromNSString(name), fromNSString(category)}); + return [[ICEObjectPrx alloc] initWithCppObjectPrx:prx]; + } + catch(const std::exception& ex) + { + *error = convertException(ex); + return nil; + } +} + +-(nullable ICEObjectPrx*) createDirectProxy:(NSString*)name category:(NSString*)category error:(NSError* _Nullable * _Nullable)error +{ + try + { + auto prx = self.objectAdapter->createDirectProxy(Ice::Identity{fromNSString(name), fromNSString(category)}); + return [[ICEObjectPrx alloc] initWithCppObjectPrx:prx]; + } + catch(const std::exception& ex) + { + *error = convertException(ex); + return nil; + } +} + +-(nullable ICEObjectPrx*) createIndirectProxy:(NSString*)name category:(NSString*)category error:(NSError* _Nullable * _Nullable)error +{ + try + { + auto prx = self.objectAdapter->createIndirectProxy(Ice::Identity{fromNSString(name), fromNSString(category)}); + return [[ICEObjectPrx alloc] initWithCppObjectPrx:prx]; + } + catch(const std::exception& ex) + { + *error = convertException(ex); + return nil; + } +} + +-(void) setLocator:(nullable ICEObjectPrx*) locator +{ + try + { + auto l = locator ? [locator prx] : nullptr; + self.objectAdapter->setLocator(Ice::uncheckedCast<Ice::LocatorPrx>(l)); + } + catch(const Ice::ObjectAdapterDeactivatedException&) + { + // ignored + } + catch(const Ice::CommunicatorDestroyedException&) + { + // ignored + } + catch(const std::exception&) + { + // unexpected but ignored nevertheless + } +} + +-(nullable ICEObjectPrx*) getLocator +{ + auto prx = self.objectAdapter->getLocator(); + return [[ICEObjectPrx alloc] initWithCppObjectPrx:prx]; +} + +-(NSArray<ICEEndpoint*>*) getEndpoints +{ + return toNSArray(self.objectAdapter->getEndpoints()); +} + +-(BOOL) refreshPublishedEndpoints:(NSError* _Nullable * _Nullable)error +{ + try + { + self.objectAdapter->refreshPublishedEndpoints(); + return YES; + } + catch(const std::exception& ex) + { + *error = convertException(ex); + return NO; + } +} + +-(NSArray<ICEEndpoint*>*) getPublishedEndpoints +{ + return toNSArray(self.objectAdapter->getPublishedEndpoints()); +} + +-(BOOL) setPublishedEndpoints:(NSArray<ICEEndpoint*>*)newEndpoints error:(NSError* _Nullable * _Nullable)error +{ + try + { + Ice::EndpointSeq endpts; + fromNSArray(newEndpoints, endpts); + + self.objectAdapter->setPublishedEndpoints(endpts); + return YES; + } + catch(const std::exception& ex) + { + *error = convertException(ex); + return NO; + } +} + +-(dispatch_queue_t) getDispatchQueue:(NSError* _Nullable * _Nullable)error +{ + try + { + return self.objectAdapter->getDispatchQueue(); + } + catch(const std::exception& ex) + { + *error = convertException(ex); + return nil; + } +} + +-(void) registerDefaultServant:(id<ICEBlobjectFacade>)facade +{ + auto servant = std::make_shared<BlobjectFacade>(facade); + self.objectAdapter->addDefaultServant(servant, ""); +} + +@end diff --git a/swift/src/IceObjc/ObjectPrx.h b/swift/src/IceObjc/ObjectPrx.h new file mode 100644 index 00000000000..71dddd1597f --- /dev/null +++ b/swift/src/IceObjc/ObjectPrx.h @@ -0,0 +1,138 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#import "Config.h" + +@class ICEObjectPrx; +@class ICEImplicitContext; +@class ICEProperties; +@class ICEEndpoint; +@class ICEConnection; +@class ICEInputStream; +@class ICECommunicator; +@protocol ICELoggerProtocol; +@protocol ICEOutputStreamHelper; + +NS_ASSUME_NONNULL_BEGIN + +@interface ICEObjectPrx : NSObject +-(nonnull ICEObjectPrx*) initWithObjectPrx:(ICEObjectPrx*)prx; +-(nonnull NSString*) ice_toString; +-(nonnull ICECommunicator*) ice_getCommunicator; +-(void) ice_getIdentity:(NSString* __strong _Nonnull * _Nonnull)name + category:(NSString* __strong _Nonnull * _Nonnull)category; +-(nullable instancetype) ice_identity:(NSString*)name + category:(NSString*)category + error:(NSError* _Nullable * _Nullable)error; +-(nonnull NSDictionary<NSString*, NSString*>*) ice_getContext; +-(nonnull instancetype) ice_context:(NSDictionary<NSString*, NSString*>*)context; +-(nonnull NSString*) ice_getFacet; +-(nonnull instancetype) ice_facet:(NSString*)facet; +-(nonnull NSString*) ice_getAdapterId; +-(nullable instancetype) ice_adapterId:(NSString*)id error:(NSError* _Nullable * _Nullable)error; +-(nonnull NSArray<ICEEndpoint*>*) ice_getEndpoints; +-(nullable instancetype) ice_endpoints:(NSArray<ICEEndpoint*>*)endpoints error:(NSError* _Nullable * _Nullable)error; +-(int32_t) ice_getLocatorCacheTimeout; +-(nullable instancetype) ice_locatorCacheTimeout:(int32_t)timeout error:(NSError* _Nullable * _Nullable)error; +-(int32_t) ice_getInvocationTimeout; +-(nullable instancetype) ice_invocationTimeout:(int32_t)timeout error:(NSError* _Nullable * _Nullable)error; +-(nonnull NSString*) ice_getConnectionId; +-(nullable instancetype) ice_connectionId:(NSString*)connectionId error:(NSError* _Nullable * _Nullable)error; +-(bool) ice_isConnectionCached; +-(nullable instancetype) ice_connectionCached:(bool)cached error:(NSError* _Nullable * _Nullable)error; +-(uint8_t) ice_getEndpointSelection; +-(nullable instancetype) ice_endpointSelection:(uint8_t)type error:(NSError* _Nullable * _Nullable)error; +-(nonnull instancetype) ice_encodingVersion:(uint8_t)major minor:(uint8_t)minor; +-(void) ice_getEncodingVersion:(uint8_t*)major minor:(uint8_t*)minor; +-(nullable ICEObjectPrx*) ice_getRouter; +-(nullable instancetype) ice_router:(ICEObjectPrx* _Nullable)router error:(NSError* _Nullable * _Nullable)error; +-(nullable ICEObjectPrx*) ice_getLocator; +-(nullable instancetype) ice_locator:(ICEObjectPrx* _Nullable)locator error:(NSError* _Nullable * _Nullable)error; +-(bool) ice_isSecure; +-(nonnull instancetype) ice_secure:(bool)b; +-(bool) ice_isPreferSecure; +-(nullable instancetype) ice_preferSecure:(bool)b error:(NSError* _Nullable * _Nullable)error; +-(bool) ice_isTwoway; +-(nonnull instancetype) ice_twoway; +-(bool) ice_isOneway; +-(nonnull instancetype) ice_oneway; +-(bool) ice_isBatchOneway; +-(nonnull instancetype) ice_batchOneway; +-(bool) ice_isDatagram; +-(nonnull instancetype) ice_datagram; +-(bool) ice_isBatchDatagram; +-(nonnull instancetype) ice_batchDatagram; +// id represents Any in Swift which we use as an Optional int32_t +-(nullable id) ice_getCompress; +-(nonnull instancetype) ice_compress:(bool)compress; +// id represents Any in Swift which we use as an Optional int32_t +-(nullable id) ice_getTimeout; +-(nullable instancetype) ice_timeout:(int32_t)timeout error:(NSError* _Nullable * _Nullable)error; +-(nullable instancetype) ice_fixed:(ICEConnection*)connection error:(NSError* _Nullable * _Nullable)error; +-(bool) ice_isFixed; +-(nullable id) ice_getConnection:(NSError* _Nullable * _Nullable)error; //Either NSNull or ICEConnection +-(void) ice_getConnectionAsync:(void (^)(ICEConnection* _Nullable)) response + exception:(void (^)(NSError*))exception; +-(nullable ICEConnection*) ice_getCachedConnection; +-(BOOL) ice_flushBatchRequests:(NSError* _Nullable * _Nullable)error; +-(void) ice_flushBatchRequestsAsync:(void (^)(NSError*))exception + sent:(void (^_Nullable)(bool))sent + NS_SWIFT_NAME(ice_flushBatchRequestsAsync(exception:sent:)); +-(bool) ice_isCollocationOptimized; +-(nullable instancetype) ice_collocationOptimized:(bool)collocated + error:(NSError* _Nullable * _Nullable)error; + +// Either ICEObjectPrx or NSNull ++(nullable id) ice_read:(NSData*)data + communicator:(ICECommunicator*)communicator + encodingMajor:(uint8_t)major + encodingMinor:(uint8_t)minor + bytesRead:(NSInteger*)bytesRead + error:(NSError* _Nullable * _Nullable)error; + +-(void) ice_write:(id<ICEOutputStreamHelper>)os + encodingMajor:(uint8_t)encodingMajor + encodingMinor:(uint8_t)encodingMinor; + +-(BOOL) invoke:(NSString* _Nonnull)op + mode:(uint8_t)mode + inParams:(NSData*)inParams + context:(NSDictionary* _Nullable)context + response:(void (^_Nullable)(bool, NSData*))response + error:(NSError* _Nullable * _Nullable)error; + +// Sync invocation on oneway proxy +-(BOOL) onewayInvoke:(NSString* _Nonnull)op + mode:(uint8_t)mode + inParams:(NSData*)inParams + context:(NSDictionary* _Nullable)context + error:(NSError* _Nullable * _Nullable)error; + +-(void) invokeAsync:(NSString* _Nonnull)op + mode:(uint8_t)mode + inParams:(NSData*)inParams + context:(NSDictionary* _Nullable)context + response:(void (^)(bool, NSData*))response + exception:(void (^)(NSError*))exception + sent:(void (^_Nullable)(bool))sent; + +-(bool) isEqual:(ICEObjectPrx* _Nullable)prx; + +-(bool) proxyIdentityLess:(ICEObjectPrx* _Nullable)prx; +-(bool) proxyIdentityEqual:(ICEObjectPrx* _Nullable)prx; + +-(bool) proxyIdentityAndFacetLess:(ICEObjectPrx* _Nullable)prx; +-(bool) proxyIdentityAndFacetEqual:(ICEObjectPrx* _Nullable)prx; +@end + +#ifdef __cplusplus + +@interface ICEObjectPrx() +@property (nonatomic, readonly) std::shared_ptr<Ice::ObjectPrx> prx; +-(nullable instancetype) initWithCppObjectPrx:(std::shared_ptr<Ice::ObjectPrx>)prx; +@end + +#endif + +NS_ASSUME_NONNULL_END diff --git a/swift/src/IceObjc/ObjectPrx.mm b/swift/src/IceObjc/ObjectPrx.mm new file mode 100644 index 00000000000..ca4b86d8a60 --- /dev/null +++ b/swift/src/IceObjc/ObjectPrx.mm @@ -0,0 +1,757 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#import "ObjectPrx.h" + +#import "Communicator.h" +#import "Connection.h" +#import "OutputStream.h" +#import "Convert.h" + +@implementation ICEObjectPrx + +-(ICEObjectPrx*) initWithObjectPrx:(ICEObjectPrx*)prx +{ + assert(prx); + self = [super init]; + _prx = std::shared_ptr<Ice::ObjectPrx>([prx prx]); + return self; +} + +-(ICEObjectPrx*) initWithCppObjectPrx:(std::shared_ptr<Ice::ObjectPrx>)prx +{ + if(!prx) + { + return nil; + } + + self = [super init]; + if(!self) + { + return nil; + } + + self->_prx = prx; + + return self; +} + +-(nonnull NSString*) ice_toString +{ + return toNSString(_prx->ice_toString()); +} + +-(ICECommunicator*) ice_getCommunicator +{ + auto comm = _prx->ice_getCommunicator(); + return [ICECommunicator getHandle:comm]; +} + +-(void) ice_getIdentity:(NSString* __strong _Nonnull * _Nonnull)name + category:(NSString* __strong _Nonnull * _Nonnull)category +{ + auto identity = _prx->ice_getIdentity(); + *name = toNSString(identity.name); + *category = toNSString(identity.category); +} + +-(instancetype) ice_identity:(NSString*)name + category:(NSString*)category + error:(NSError**)error +{ + try + { + auto prx = _prx->ice_identity(Ice::Identity{fromNSString(name), fromNSString(category)}); + return _prx == prx ? self : [[ICEObjectPrx alloc] initWithCppObjectPrx:prx]; + } + catch(const std::exception& ex) + { + *error = convertException(ex); + return nil; + } +} + +-(NSDictionary<NSString*, NSString*>*) ice_getContext +{ + return toNSDictionary(_prx->ice_getContext()); +} + +-(instancetype) ice_context:(NSDictionary<NSString*, NSString*>*)context +{ + Ice::Context ctx; + fromNSDictionary(context, ctx); + + auto prx = _prx->ice_context(ctx); + return _prx == prx ? self : [[ICEObjectPrx alloc] initWithCppObjectPrx:prx]; +} + +-(NSString*) ice_getFacet +{ + return toNSString(_prx->ice_getFacet()); +} + +-(instancetype) ice_facet:(NSString*)facet +{ + auto prx = _prx->ice_facet(fromNSString(facet)); + return _prx == prx ? self : [[ICEObjectPrx alloc] initWithCppObjectPrx:prx]; +} + +-(NSString*) ice_getAdapterId +{ + return toNSString(_prx->ice_getAdapterId()); +} + +-(instancetype) ice_adapterId:(NSString*)id error:(NSError**)error +{ + try + { + auto prx = _prx->ice_adapterId(fromNSString(id)); + return _prx == prx ? self : [[ICEObjectPrx alloc] initWithCppObjectPrx:prx]; + } + catch(const std::exception& ex) + { + *error = convertException(ex); + return nil; + } +} + +-(NSArray<ICEEndpoint*>*) ice_getEndpoints +{ + return toNSArray(_prx->ice_getEndpoints()); +} + +-(instancetype) ice_endpoints:(NSArray<ICEEndpoint*>*)endpoints error:(NSError**)error +{ + try + { + Ice::EndpointSeq endpts; + fromNSArray(endpoints, endpts); + + auto prx = _prx->ice_endpoints(endpts); + return _prx == prx ? self : [[ICEObjectPrx alloc] initWithCppObjectPrx:prx]; + } + catch(const std::exception& ex) + { + *error = convertException(ex); + return nil; + } +} + +-(int32_t) ice_getLocatorCacheTimeout +{ + return _prx->ice_getLocatorCacheTimeout(); +} + +-(instancetype) ice_locatorCacheTimeout:(int32_t)timeout error:(NSError**)error +{ + try + { + auto prx = _prx->ice_locatorCacheTimeout(timeout); + return _prx == prx ? self : [[ICEObjectPrx alloc] initWithCppObjectPrx:prx]; + } + catch(const std::exception& ex) + { + *error = convertException(ex); + return nil; + } +} + +-(int32_t) ice_getInvocationTimeout +{ + return _prx->ice_getInvocationTimeout(); +} + +-(instancetype) ice_invocationTimeout:(int32_t)timeout error:(NSError**)error +{ + try + { + auto prx = _prx->ice_invocationTimeout(timeout); + return _prx == prx ? self : [[ICEObjectPrx alloc] initWithCppObjectPrx:prx]; + } + catch(const std::exception& ex) + { + *error = convertException(ex); + return nil; + } +} + +-(NSString*) ice_getConnectionId +{ + return toNSString(_prx->ice_getConnectionId()); +} + +-(instancetype) ice_connectionId:(NSString*)connectionId error:(NSError**)error +{ + try + { + auto prx = _prx->ice_connectionId(fromNSString(connectionId)); + return _prx == prx ? self : [[ICEObjectPrx alloc] initWithCppObjectPrx:prx]; + } + catch(const std::exception& ex) + { + *error = convertException(ex); + return nil; + } +} + +-(bool) ice_isConnectionCached +{ + return _prx->ice_isConnectionCached(); +} + +-(instancetype) ice_connectionCached:(bool)cached error:(NSError**)error +{ + try + { + auto prx = _prx->ice_connectionCached(cached); + return _prx == prx ? self : [[ICEObjectPrx alloc] initWithCppObjectPrx:prx]; + } + catch(const std::exception& ex) + { + *error = convertException(ex); + return nil; + } +} + +-(uint8_t) ice_getEndpointSelection +{ + return static_cast<uint8_t>(_prx->ice_getEndpointSelection()); +} + +-(instancetype) ice_endpointSelection:(uint8_t)type error:(NSError**)error +{ + try + { + auto prx = _prx->ice_endpointSelection(Ice::EndpointSelectionType(type)); + return _prx == prx ? self : [[ICEObjectPrx alloc] initWithCppObjectPrx:prx]; + } + catch(const std::exception& ex) + { + *error = convertException(ex); + return nil; + } +} + +-(instancetype) ice_encodingVersion:(uint8_t)major minor:(uint8_t)minor +{ + Ice::EncodingVersion encoding{major, minor}; + + auto prx = _prx->ice_encodingVersion(encoding); + return _prx == prx ? self : [[ICEObjectPrx alloc] initWithCppObjectPrx:prx]; +} + +-(void) ice_getEncodingVersion:(uint8_t*)major minor:(uint8_t*)minor +{ + Ice::EncodingVersion v = _prx->ice_getEncodingVersion(); + *major = v.major; + *minor = v.minor; +} + +-(ICEObjectPrx*) ice_getRouter +{ + return [[ICEObjectPrx alloc] initWithCppObjectPrx:_prx->ice_getRouter()]; +} + +-(instancetype) ice_router:(ICEObjectPrx*)router error:(NSError**)error +{ + try + { + auto r = router ? [router prx] : nullptr; + auto prx = _prx->ice_router(Ice::uncheckedCast<Ice::RouterPrx>(r)); + return _prx == prx ? self : [[ICEObjectPrx alloc] initWithCppObjectPrx:prx]; + } + catch(const std::exception& ex) + { + *error = convertException(ex); + return nil; + } +} + +-(ICEObjectPrx*) ice_getLocator +{ + return [[ICEObjectPrx alloc] initWithCppObjectPrx:_prx->ice_getLocator()]; +} + +-(instancetype) ice_locator:(ICEObjectPrx*)locator error:(NSError**)error +{ + try + { + auto l = locator ? [locator prx] : nullptr; + auto prx = _prx->ice_locator(Ice::uncheckedCast<Ice::LocatorPrx>(l)); + return _prx == prx ? self : [[ICEObjectPrx alloc] initWithCppObjectPrx:prx]; + } + catch(const std::exception& ex) + { + *error = convertException(ex); + return nil; + } +} + +-(bool) ice_isSecure +{ + return _prx->ice_isSecure(); +} + +-(instancetype) ice_secure:(bool)b +{ + auto prx = _prx->ice_secure(b); + return _prx == prx ? self : [[ICEObjectPrx alloc] initWithCppObjectPrx:prx]; +} + +-(bool) ice_isPreferSecure +{ + return _prx->ice_isPreferSecure(); +} + +-(instancetype) ice_preferSecure:(bool)b error:(NSError**)error +{ + try + { + auto prx = _prx->ice_preferSecure(b); + return _prx == prx ? self : [[ICEObjectPrx alloc] initWithCppObjectPrx:prx]; + } + catch(const std::exception& ex) + { + *error = convertException(ex); + return nil; + } +} + +-(bool) ice_isTwoway +{ + return _prx->ice_isTwoway(); +} + +-(nonnull instancetype) ice_twoway +{ + auto prx = _prx->ice_twoway(); + return _prx == prx ? self : [[ICEObjectPrx alloc] initWithCppObjectPrx:prx]; +} + +-(bool) ice_isOneway +{ + return _prx->ice_isOneway(); +} + +-(nonnull instancetype) ice_oneway +{ + auto prx = _prx->ice_oneway(); + return _prx == prx ? self : [[ICEObjectPrx alloc] initWithCppObjectPrx:prx]; +} + +-(bool) ice_isBatchOneway +{ + return _prx->ice_isBatchOneway(); +} + +-(instancetype) ice_batchOneway +{ + auto prx = _prx->ice_batchOneway(); + return _prx == prx ? self : [[ICEObjectPrx alloc] initWithCppObjectPrx:prx]; +} + +-(bool) ice_isDatagram +{ + return _prx->ice_isDatagram(); +} + +-(instancetype) ice_datagram +{ + auto prx = _prx->ice_datagram(); + return _prx == prx ? self : [[ICEObjectPrx alloc] initWithCppObjectPrx:prx]; +} + +-(bool) ice_isBatchDatagram +{ + return _prx->ice_isBatchDatagram(); +} + +-(instancetype) ice_batchDatagram +{ + auto prx = _prx->ice_batchDatagram(); + return _prx == prx ? self : [[ICEObjectPrx alloc] initWithCppObjectPrx:prx]; +} + +-(nullable id) ice_getCompress +{ + auto compress = _prx->ice_getCompress(); + if(!compress.has_value()) + { + return nil; + } + return [NSNumber numberWithBool: compress.value() ? YES : NO]; +} + +-(instancetype) ice_compress:(bool)compress +{ + auto prx = _prx->ice_compress(compress); + return _prx == prx ? self : [[ICEObjectPrx alloc] initWithCppObjectPrx:prx]; +} + +-(id) ice_getTimeout +{ + auto timeout = _prx->ice_getTimeout(); + if(!timeout.has_value()) + { + return nil; + } + return [NSNumber numberWithInt:timeout.value()]; +} + +-(instancetype) ice_timeout:(int32_t)timeout error:(NSError**)error +{ + try + { + auto prx = _prx->ice_timeout(timeout); + return _prx == prx ? self : [[ICEObjectPrx alloc] initWithCppObjectPrx:prx]; + } + catch(const std::exception& ex) + { + *error = convertException(ex); + return nil; + } +} + +-(instancetype) ice_fixed:(ICEConnection*)connection error:(NSError**)error +{ + try + { + auto prx = _prx->ice_fixed([connection connection]); + return _prx == prx ? self : [[ICEObjectPrx alloc] initWithCppObjectPrx:prx]; + } + catch(const std::exception& ex) + { + *error = convertException(ex); + return nil; + } +} + +-(bool) ice_isFixed +{ + return _prx->ice_isFixed(); +} + +-(id)ice_getConnection:(NSError**)error +{ + try + { + auto cppConnection = _prx->ice_getConnection(); + ICEConnection* connection = [ICEConnection getHandle:cppConnection]; + + return connection ? connection : [NSNull null]; + } + catch(const std::exception& ex) + { + *error = convertException(ex); + return nil; + } +} + +-(void) ice_getConnectionAsync:(void (^)(ICEConnection* _Nullable)) response + exception:(void (^)(NSError*))exception +{ + try + { + _prx->ice_getConnectionAsync( + [response] + (std::shared_ptr<Ice::Connection> cppConnection) + { + response([ICEConnection getHandle:cppConnection]); + }, + [exception](std::exception_ptr e) + { + exception(convertException(e)); + }); + } + catch(const std::exception& ex) + { + // Typically CommunicatorDestroyedException. Note that the callback is called on the + // thread making the invocation, which is fine since we only use it to fulfill the + // PromiseKit promise. + exception(convertException(ex)); + } +} + +-(ICEConnection*) ice_getCachedConnection +{ + auto cppConnection = _prx->ice_getCachedConnection(); + return [ICEConnection getHandle:cppConnection]; +} + +-(BOOL) ice_flushBatchRequests:(NSError**)error +{ + try + { + _prx->ice_flushBatchRequests(); + return YES; + } + catch(const std::exception& ex) + { + *error = convertException(ex); + return NO; + } +} + +-(void) ice_flushBatchRequestsAsync:(void (^)(NSError*))exception + sent:(void (^_Nullable)(bool))sent +{ + try + { + _prx->ice_flushBatchRequestsAsync([exception](std::exception_ptr e) + { + exception(convertException(e)); + }, + [sent](bool sentSynchronously) + { + if(sent) + { + sent(sentSynchronously); + } + }); + } + catch(const std::exception& ex) + { + // Typically CommunicatorDestroyedException. Note that the callback is called on the + // thread making the invocation, which is fine since we only use it to fulfill the + // PromiseKit promise. + exception(convertException(ex)); + } +} + +-(bool) ice_isCollocationOptimized +{ + return _prx->ice_isCollocationOptimized(); +} + +-(instancetype) ice_collocationOptimized:(bool)collocated + error:(NSError* _Nullable * _Nullable)error +{ + try + { + auto prx = _prx->ice_collocationOptimized(collocated); + return _prx == prx ? self : [[ICEObjectPrx alloc] initWithCppObjectPrx:prx]; + } + catch(const std::exception& ex) + { + *error = convertException(ex); + return nil; + } +} + ++(id) ice_read:(NSData*)data + communicator:(ICECommunicator*)communicator + encodingMajor:(uint8_t)major + encodingMinor:(uint8_t)minor + bytesRead:(NSInteger*)bytesRead + error:(NSError**)error +{ + + std::pair<const Ice::Byte*, const Ice::Byte*> p; + p.first = static_cast<const Ice::Byte*>(data.bytes); + p.second = p.first + data.length; + + auto comm = [communicator communicator]; + + try + { + Ice::InputStream ins(comm, Ice::EncodingVersion{major, minor}, p); + + std::shared_ptr<Ice::ObjectPrx> proxy; + ins.read(proxy); + + *bytesRead = ins.pos(); + if(proxy) + { + return [[ICEObjectPrx alloc] initWithCppObjectPrx:proxy]; + } + else + { + return [NSNull null]; + } + } + catch(const std::exception& ex) + { + *error = convertException(ex); + return nil; + } +} + +-(void) ice_write:(id<ICEOutputStreamHelper>)os + encodingMajor:(uint8_t)encodingMajor + encodingMinor:(uint8_t)encodingMinor +{ + // + // Marshal a proxy into a stream and return the encoded bytes. + // + auto communicator = _prx->ice_getCommunicator(); + Ice::EncodingVersion encoding { encodingMajor, encodingMinor }; + Ice::OutputStream out(communicator, encoding); + out.write(_prx); + std::pair<const Ice::Byte*, const Ice::Byte*> p = out.finished(); + NSData* bytes = [[NSData alloc] initWithBytesNoCopy:const_cast<Ice::Byte*>(p.first) + length:p.second - p.first + freeWhenDone:NO]; + + [os copy:bytes]; +} + +-(BOOL) invoke:(NSString* _Nonnull)op + mode:(uint8_t)mode + inParams:(NSData*)inParams + context:(NSDictionary* _Nullable)context + response:(void (^_Nullable)(bool, NSData*))response + error:(NSError**)error +{ + std::pair<const Ice::Byte*, const Ice::Byte*> params(0, 0); + params.first = static_cast<const Ice::Byte*>(inParams.bytes); + params.second = params.first + inParams.length; + + try + { + Ice::Context ctx; + if(context) + { + fromNSDictionary(context, ctx); + } + std::vector<Ice::Byte> outParams; + + // We use a std::promise and invokeAsync to avoid making an extra copy of the outParam buffer + // and to avoid calling PromiseKit wait. PromiseKit issues a warning if wait() is called on the main thread. + // This is particularly an issue in command line applications which may make sync calls on the main thread. + std::promise<void> p; + + _prx->ice_invokeAsync(fromNSString(op), static_cast<Ice::OperationMode>(mode), params, + [response, &p](bool ok, std::pair<const Ice::Byte*, const Ice::Byte*> outParams) + { + if(response) + { + NSData* encaps = [[NSData alloc] initWithBytesNoCopy:const_cast<Ice::Byte*>(outParams.first) + length:outParams.second - outParams.first + freeWhenDone:NO]; + response(ok, encaps); + } + p.set_value(); + }, + [&p](std::exception_ptr e) + { + p.set_exception(e); + }, + nullptr, + context ? ctx : Ice::noExplicitContext); + + p.get_future().get(); + return YES; + } + catch(const std::exception& ex) + { + *error = convertException(ex); + return NO; + } +} + +-(BOOL) onewayInvoke:(NSString*)op + mode:(uint8_t)mode + inParams:(NSData*)inParams + context:(NSDictionary*)context + error:(NSError**)error +{ + std::pair<const Ice::Byte*, const Ice::Byte*> params(0, 0); + params.first = static_cast<const Ice::Byte*>(inParams.bytes); + params.second = params.first + inParams.length; + + try + { + Ice::Context ctx; + if(context) + { + fromNSDictionary(context, ctx); + } + + std::vector<Ice::Byte> ignored; + _prx->ice_invoke(fromNSString(op), static_cast<Ice::OperationMode>(mode), params, ignored, + context ? ctx : Ice::noExplicitContext); + return YES; + } + catch(const std::exception& ex) + { + *error = convertException(ex); + return NO; + } +} + +-(void) invokeAsync:(NSString* _Nonnull)op + mode:(uint8_t)mode + inParams:(NSData*)inParams + context:(NSDictionary* _Nullable)context + response:(void (^)(bool, NSData*))response + exception:(void (^)(NSError*))exception + sent:(void (^_Nullable)(bool))sent +{ + std::pair<const Ice::Byte*, const Ice::Byte*> params(0, 0); + params.first = static_cast<const Ice::Byte*>(inParams.bytes); + params.second = params.first + inParams.length; + + try + { + Ice::Context ctx; + if(context) + { + fromNSDictionary(context, ctx); + } + + _prx->ice_invokeAsync(fromNSString(op), static_cast<Ice::OperationMode>(mode), params, + [response](bool ok, std::pair<const Ice::Byte*, const Ice::Byte*> outParams) + { + NSData* encaps = [[NSData alloc] initWithBytesNoCopy:const_cast<Ice::Byte*>(outParams.first) + length:outParams.second - outParams.first + freeWhenDone:NO]; + response(ok, encaps); + }, + [exception](std::exception_ptr e) + { + exception(convertException(e)); + }, + [sent](bool sentSynchronously) + { + if(sent) + { + sent(sentSynchronously); + } + }, + context ? ctx : Ice::noExplicitContext); + } + catch(const std::exception& ex) + { + // Typically CommunicatorDestroyedException. Note that the callback is called on the + // thread making the invocation, which is fine since we only use it to fulfill the + // PromiseKit promise. + exception(convertException(ex)); + } +} + +-(bool) isEqual:(ICEObjectPrx*)other +{ + return Ice::targetEqualTo(_prx, other.prx); +} + +-(bool) proxyIdentityLess:(ICEObjectPrx*)other +{ + return Ice::proxyIdentityLess(_prx, other.prx); +} + +-(bool) proxyIdentityEqual:(ICEObjectPrx*)other +{ + return Ice::proxyIdentityEqual(_prx, other.prx); +} + +-(bool) proxyIdentityAndFacetLess:(ICEObjectPrx*)other +{ + return Ice::proxyIdentityAndFacetLess(_prx, other.prx); +} + +-(bool) proxyIdentityAndFacetEqual:(ICEObjectPrx*)other +{ + return Ice::proxyIdentityAndFacetEqual(_prx, other.prx); +} +@end diff --git a/swift/src/IceObjc/OutputStream.h b/swift/src/IceObjc/OutputStream.h new file mode 100644 index 00000000000..40bc76355b7 --- /dev/null +++ b/swift/src/IceObjc/OutputStream.h @@ -0,0 +1,13 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#import <Foundation/Foundation.h> + +NS_ASSUME_NONNULL_BEGIN + +@protocol ICEOutputStreamHelper +-(void) copy:(NSData*)bytes; +@end + +NS_ASSUME_NONNULL_END diff --git a/swift/src/IceObjc/Process.h b/swift/src/IceObjc/Process.h new file mode 100644 index 00000000000..cb31c4dc02c --- /dev/null +++ b/swift/src/IceObjc/Process.h @@ -0,0 +1,22 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#import "LocalObject.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface ICEProcess : ICELocalObject +-(void) shutdown; +-(void) writeMessage:(NSString*)message fd:(int32_t)fd; +@end + +#ifdef __cplusplus + +@interface ICEProcess() +@property (nonatomic, readonly) std::shared_ptr<Ice::Process> process; +@end + +#endif + +NS_ASSUME_NONNULL_END diff --git a/swift/src/IceObjc/Process.mm b/swift/src/IceObjc/Process.mm new file mode 100644 index 00000000000..f96d4830a3c --- /dev/null +++ b/swift/src/IceObjc/Process.mm @@ -0,0 +1,27 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#import "Process.h" +#import "Convert.h" + +@implementation ICEProcess + +-(std::shared_ptr<Ice::Process>) process +{ + return std::static_pointer_cast<Ice::Process>(self.cppObject); +} + +-(void) shutdown +{ + // This fuction does not use current so we do not pass it from Swift + self.process->shutdown(Ice::Current{}); +} + +-(void) writeMessage:(NSString*)message fd:(int32_t)fd +{ + // This function does not use current so we do not pass it from Swift + self.process->writeMessage(fromNSString(message), fd, Ice::Current{}); +} + +@end diff --git a/swift/src/IceObjc/Properties.h b/swift/src/IceObjc/Properties.h new file mode 100644 index 00000000000..f335823bbea --- /dev/null +++ b/swift/src/IceObjc/Properties.h @@ -0,0 +1,33 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#import "LocalObject.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface ICEProperties : ICELocalObject +-(nonnull NSString*) getProperty:(NSString*)key; +-(nonnull NSString*) getPropertyWithDefault:(NSString*)key value:(NSString*)value; +-(int32_t) getPropertyAsInt:(NSString*)key; +-(int32_t) getPropertyAsIntWithDefault:(NSString*)key value:(int32_t)value NS_SWIFT_NAME(getPropertyAsIntWithDefault(key:value:)); +-(nonnull NSArray<NSString*>*) getPropertyAsList:(NSString* _Nonnull)key; +-(nonnull NSArray<NSString*>*) getPropertyAsListWithDefault:(NSString* _Nonnull)key value:(NSArray<NSString*>* _Nonnull)value NS_SWIFT_NAME(getPropertyAsListWithDefault(key:value:)); +-(nonnull NSDictionary<NSString*, NSString*>*) getPropertiesForPrefix:(NSString* _Nonnull)prefix NS_SWIFT_NAME(getPropertiesForPrefix(_:)); +-(BOOL) setProperty:(NSString*)key value:(NSString*)value error:(NSError**)error; +-(nonnull NSArray<NSString*>*) getCommandLineOptions; +-(nullable NSArray<NSString*>*) parseCommandLineOptions:(NSString*)prefix options:(NSArray<NSString*>*)options error:(NSError* _Nullable * _Nullable)error; +-(nullable NSArray<NSString*>*) parseIceCommandLineOptions:(NSArray<NSString*>*)options error:(NSError**)error; +-(BOOL) load:(NSString*)file error:(NSError* _Nullable * _Nullable)error; +-(nonnull ICEProperties*) clone; +@end + +#ifdef __cplusplus + +@interface ICEProperties() +@property (nonatomic, readonly) std::shared_ptr<Ice::Properties> properties; +@end + +#endif + +NS_ASSUME_NONNULL_END diff --git a/swift/src/IceObjc/Properties.mm b/swift/src/IceObjc/Properties.mm new file mode 100644 index 00000000000..9071b4c6f7c --- /dev/null +++ b/swift/src/IceObjc/Properties.mm @@ -0,0 +1,122 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#import "Properties.h" + +#import "Convert.h" + +@implementation ICEProperties + +-(std::shared_ptr<Ice::Properties>) properties +{ + return std::static_pointer_cast<Ice::Properties>(self.cppObject); +} + +-(NSString*) getProperty:(NSString*)key +{ + return toNSString(self.properties->getProperty(fromNSString(key))); +} + +-(NSString*) getPropertyWithDefault:(NSString*)key value:(NSString*)value +{ + return toNSString(self.properties->getPropertyWithDefault(fromNSString(key), fromNSString(value))); +} + +-(int32_t) getPropertyAsInt:(NSString*)key +{ + return self.properties->getPropertyAsInt(fromNSString(key)); +} + +-(int32_t) getPropertyAsIntWithDefault:(NSString*)key value:(int32_t)value +{ + return self.properties->getPropertyAsIntWithDefault(fromNSString(key), value); +} + +-(NSArray<NSString*>*) getPropertyAsList:(NSString*)key +{ + return toNSArray(self.properties->getPropertyAsList(fromNSString(key))); +} + +-(NSArray<NSString*>*) getPropertyAsListWithDefault:(NSString*)key value:(NSArray<NSString*>*)value +{ + std::vector<std::string> s; + fromNSArray(value, s); + return toNSArray(self.properties->getPropertyAsListWithDefault(fromNSString(key), s)); +} + +-(NSDictionary<NSString*, NSString*>*) getPropertiesForPrefix:(NSString*)prefix +{ + return toNSDictionary(self.properties->getPropertiesForPrefix(fromNSString(prefix))); +} + +-(BOOL) setProperty:(NSString*)key value:(NSString*)value error:(NSError**)error; +{ + try + { + self.properties->setProperty(fromNSString(key), fromNSString(value)); + return YES; + } + catch(const std::exception& ex) + { + *error = convertException(ex); + return NO; + } +} + +-(NSArray<NSString*>*) getCommandLineOptions +{ + return toNSArray(self.properties->getCommandLineOptions()); +} + +-(NSArray<NSString*>*) parseCommandLineOptions:(NSString*)prefix options:(NSArray<NSString*>*)options error:(NSError**)error; +{ + try + { + std::vector<std::string> s; + fromNSArray(options, s); + return toNSArray(self.properties->parseCommandLineOptions(fromNSString(prefix), s)); + } + catch(const std::exception& ex) + { + *error = convertException(ex); + return nil; + } +} + +-(NSArray<NSString*>*) parseIceCommandLineOptions:(NSArray<NSString*>*)options error:(NSError**)error; +{ + try + { + std::vector<std::string> s; + fromNSArray(options, s); + return toNSArray(self.properties->parseIceCommandLineOptions(s)); + } + catch(const std::exception& ex) + { + *error = convertException(ex); + return nil; + } +} + +-(BOOL) load:(NSString*)file error:(NSError**)error +{ + try + { + self.properties->load(fromNSString(file)); + return YES; + } + catch(const std::exception& ex) + { + *error = convertException(ex); + return NO; + } +} + +-(ICEProperties*) clone +{ + auto props = self.properties->clone(); + return [ICEProperties getHandle:props]; +} + +@end diff --git a/swift/src/IceObjc/PropertiesAdmin.h b/swift/src/IceObjc/PropertiesAdmin.h new file mode 100644 index 00000000000..ebe3bed002f --- /dev/null +++ b/swift/src/IceObjc/PropertiesAdmin.h @@ -0,0 +1,24 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#import "LocalObject.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface ICEPropertiesAdmin: ICELocalObject +-(nullable NSString*) getProperty:(NSString*)key error:(NSError**)error; +-(nullable NSDictionary<NSString*, NSString*>*) getPropertiesForPrefix:(NSString*)prefix error:(NSError**)error; +-(BOOL) setProperties:(NSDictionary<NSString*, NSString*>*)newProperties error:(NSError**)error; +-(void (^)(void)) addUpdateCallback:(void (^)(NSDictionary<NSString*, NSString*>*))cb; +@end + +#ifdef __cplusplus + +@interface ICEPropertiesAdmin() +@property (nonatomic, readonly) std::shared_ptr<Ice::PropertiesAdmin> propertiesAdmin; +@end + +#endif + +NS_ASSUME_NONNULL_END diff --git a/swift/src/IceObjc/PropertiesAdmin.mm b/swift/src/IceObjc/PropertiesAdmin.mm new file mode 100644 index 00000000000..f6c73ce1420 --- /dev/null +++ b/swift/src/IceObjc/PropertiesAdmin.mm @@ -0,0 +1,77 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#import "PropertiesAdmin.h" +#import "Convert.h" + +@implementation ICEPropertiesAdmin + +-(std::shared_ptr<Ice::PropertiesAdmin>) propertiesAdmin +{ + return std::static_pointer_cast<Ice::PropertiesAdmin>(self.cppObject); +} + +-(nullable NSString*) getProperty:(NSString*)key error:(NSError**)error +{ + try + { + // This function does not use current so we do not pass it from Swift + return toNSString(self.propertiesAdmin->getProperty(fromNSString(key), Ice::Current{})); + } + catch(const std::exception& ex) + { + *error = convertException(ex); + return nil; + } +} + +-(nullable NSDictionary<NSString*, NSString*>*) getPropertiesForPrefix:(NSString*)prefix error:(NSError**)error +{ + try + { + // This function does not use current so we do not pass it from Swift + return toNSDictionary(self.propertiesAdmin->getPropertiesForPrefix(fromNSString(prefix), Ice::Current{})); + } + catch(const std::exception& ex) + { + *error = convertException(ex); + return nil; + } +} + +-(BOOL) setProperties:(NSDictionary<NSString*, NSString*>*)newProperties error:(NSError**)error +{ + try + { + // This function does not use current so we do not pass it from Swift + Ice::PropertyDict props; + fromNSDictionary(newProperties, props); + self.propertiesAdmin->setProperties(props, Ice::Current{}); + return YES; + } + catch(const std::exception& ex) + { + *error = convertException(ex); + return NO; + } +} + +-(void (^)(void)) addUpdateCallback:(void (^)(NSDictionary<NSString*, NSString*>*))cb +{ + auto facet = std::dynamic_pointer_cast<Ice::NativePropertiesAdmin>(self.propertiesAdmin); + assert(facet); + + auto removeCb = facet->addUpdateCallback([cb] (const Ice::PropertyDict& props) + { + cb(toNSDictionary(props)); + }); + + return ^ + { + removeCb(); + }; + +} + +@end diff --git a/swift/src/IceObjc/TraceUtil.h b/swift/src/IceObjc/TraceUtil.h new file mode 100644 index 00000000000..8fc1fa9b7f7 --- /dev/null +++ b/swift/src/IceObjc/TraceUtil.h @@ -0,0 +1,16 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +NS_ASSUME_NONNULL_BEGIN + +@interface ICETraceUtil : NSObject + ++(void) traceSlicing:(NSString*)kind + typeId:(NSString*)typeId + slicingCat:(NSString*)slicingCat + logger:(id<ICELoggerProtocol>)logger NS_SWIFT_NAME(traceSlicing(kind:typeId:slicingCat:logger:)); + +@end + +NS_ASSUME_NONNULL_END diff --git a/swift/src/IceObjc/TraceUtil.mm b/swift/src/IceObjc/TraceUtil.mm new file mode 100644 index 00000000000..cd37ee28bba --- /dev/null +++ b/swift/src/IceObjc/TraceUtil.mm @@ -0,0 +1,22 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#import "Logger.h" +#import "TraceUtil.h" + +#import <Ice/TraceUtil.h> +#import "LoggerWrapperI.h" + +@implementation ICETraceUtil + ++(void) traceSlicing:(NSString*)kind + typeId:(NSString*)typeId + slicingCat:(NSString*)slicingCat + logger:(id<ICELoggerProtocol>)logger +{ + auto l = std::make_shared<LoggerWrapperI>(logger); + IceInternal::traceSlicing(fromNSString(kind).c_str(), fromNSString(typeId), fromNSString(slicingCat).c_str(), l); +} + +@end diff --git a/swift/src/IceObjc/UnsupportedAdminFacet.h b/swift/src/IceObjc/UnsupportedAdminFacet.h new file mode 100644 index 00000000000..e570519055d --- /dev/null +++ b/swift/src/IceObjc/UnsupportedAdminFacet.h @@ -0,0 +1,12 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#import "LocalObject.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface ICEUnsupportedAdminFacet: ICELocalObject +@end + +NS_ASSUME_NONNULL_END diff --git a/swift/src/IceObjc/UnsupportedAdminFacet.mm b/swift/src/IceObjc/UnsupportedAdminFacet.mm new file mode 100644 index 00000000000..d84bc10f1a1 --- /dev/null +++ b/swift/src/IceObjc/UnsupportedAdminFacet.mm @@ -0,0 +1,8 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#import "UnsupportedAdminFacet.h" + +@implementation ICEUnsupportedAdminFacet +@end diff --git a/swift/src/IceObjc/module.map b/swift/src/IceObjc/module.map new file mode 100644 index 00000000000..daee52e09e4 --- /dev/null +++ b/swift/src/IceObjc/module.map @@ -0,0 +1,22 @@ +module IceObjc { + header "AdminFacetFactory.h" + header "BlobjectFacade.h" + header "Communicator.h" + header "Config.h" + header "Connection.h" + header "Endpoint.h" + header "Exception.h" + header "IceUtil.h" + header "ImplicitContext.h" + header "LocalObject.h" + header "Logger.h" + header "ObjectAdapter.h" + header "ObjectPrx.h" + header "OutputStream.h" + header "Process.h" + header "Properties.h" + header "PropertiesAdmin.h" + header "TraceUtil.h" + header "UnsupportedAdminFacet.h" + export * +} diff --git a/swift/src/IceStorm/IceStormSwift.h b/swift/src/IceStorm/IceStormSwift.h new file mode 100644 index 00000000000..73824b48750 --- /dev/null +++ b/swift/src/IceStorm/IceStormSwift.h @@ -0,0 +1,9 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#import <Cocoa/Cocoa.h> + +FOUNDATION_EXPORT double Glacier2VersionNumber; +FOUNDATION_EXPORT const unsigned char Glacier2VersionString[]; + diff --git a/swift/src/IceStorm/Info.plist b/swift/src/IceStorm/Info.plist new file mode 100644 index 00000000000..9668b463f36 --- /dev/null +++ b/swift/src/IceStorm/Info.plist @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>CFBundleDevelopmentRegion</key> + <string>$(DEVELOPMENT_LANGUAGE)</string> + <key>CFBundleExecutable</key> + <string>$(EXECUTABLE_NAME)</string> + <key>CFBundleIdentifier</key> + <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string> + <key>CFBundleInfoDictionaryVersion</key> + <string>6.0</string> + <key>CFBundleName</key> + <string>$(PRODUCT_NAME)</string> + <key>CFBundlePackageType</key> + <string>FMWK</string> + <key>CFBundleShortVersionString</key> + <string>$(CURRENT_PROJECT_VERSION)</string> + <key>CFBundleVersion</key> + <string>$(CURRENT_PROJECT_VERSION)</string> + <key>NSHumanReadableCopyright</key> + <string>Copyright © ZeroC, Inc. All rights reserved.</string> +</dict> +</plist> diff --git a/swift/test/Ice/acm/AllTests.swift b/swift/test/Ice/acm/AllTests.swift new file mode 100644 index 00000000000..5a85a165790 --- /dev/null +++ b/swift/test/Ice/acm/AllTests.swift @@ -0,0 +1,587 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Foundation +import Ice +import PromiseKit +import TestCommon + +class LoggerI: Ice.Logger { + var _name: String + var _output: TextWriter + var _started: Bool + var _messages: [String] + var _dateFormat: DateFormatter + var _timeFormat: DateFormatter + var _lock = os_unfair_lock() + + init(name: String, output: TextWriter) { + _name = name + _output = output + _started = false + _messages = [String]() + + _dateFormat = DateFormatter() + _dateFormat.setLocalizedDateFormatFromTemplate("d") + + _timeFormat = DateFormatter() + _timeFormat.setLocalizedDateFormatFromTemplate("HH:mm:ss:fff") + } + + func start() { + withLock(&_lock) { + _started = true + dump() + } + } + + func print(_ msg: String) { + withLock(&_lock) { + _messages.append(msg) + if _started { + dump() + } + } + } + + func trace(category: String, message: String) { + withLock(&_lock) { + var s = _name + s += " " + s += _dateFormat.string(from: Date()) + s += " " + s += _timeFormat.string(from: Date()) + s += " " + s += "[" + s += category + s += "] " + s += message + _messages.append(s) + if _started { + dump() + } + } + } + + func warning(_ message: String) { + withLock(&_lock) { + var s = _name + s += " " + s += _dateFormat.string(from: Date()) + s += " " + s += _timeFormat.string(from: Date()) + s += " warning : " + s += message + _messages.append(s) + if _started { + dump() + } + } + } + + func error(_ message: String) { + withLock(&_lock) { + var s = _name + s += " " + s += _dateFormat.string(from: Date()) + s += " " + s += _timeFormat.string(from: Date()) + s += " error : " + s += message + _messages.append(s) + if _started { + dump() + } + } + } + + func getPrefix() -> String { + return "" + } + + func cloneWithPrefix(_: String) -> Ice.Logger { + return self + } + + func dump() { + for line in _messages { + _output.writeLine(line) + } + _messages = [] + } +} + +class TestCase { + var _name: String + var _com: RemoteCommunicatorPrx + var _msg: String! + var _output: TextWriter + var _logger: LoggerI + var _helper: TestHelper + + var _clientACMTimeout: Int32 + var _clientACMClose: Int32 + var _clientACMHeartbeat: Int32 + + var _serverACMTimeout: Int32 + var _serverACMClose: Int32 + var _serverACMHeartbeat: Int32 + + var _heartbeat: Int32 + var _closed: Bool + var _semaphore: DispatchSemaphore + var _lock = os_unfair_lock() + var _adapter: RemoteObjectAdapterPrx! + var _communicator: Ice.Communicator! + + var _queue: DispatchQueue + var _group: DispatchGroup + + init(name: String, com: RemoteCommunicatorPrx, helper: TestHelper) { + _name = name + _com = com + _output = helper.getWriter() + _logger = LoggerI(name: _name, output: _output) + _helper = helper + + _clientACMTimeout = -1 + _clientACMClose = -1 + _clientACMHeartbeat = -1 + + _serverACMTimeout = -1 + _serverACMClose = -1 + _serverACMHeartbeat = -1 + + _heartbeat = 0 + _closed = false + _semaphore = DispatchSemaphore(value: 0) + + _queue = DispatchQueue(label: name) + _group = DispatchGroup() + } + + func initialize() throws { + _adapter = try _com.createObjectAdapter(acmTimeout: _serverACMTimeout, + close: _serverACMClose, + heartbeat: _serverACMHeartbeat) + + let properties = _com.ice_getCommunicator().getProperties().clone() + properties.setProperty(key: "Ice.ACM.Timeout", value: "2") + if _clientACMTimeout >= 0 { + properties.setProperty(key: "Ice.ACM.Client.Timeout", value: "\(_clientACMTimeout)") + } + + if _clientACMClose >= 0 { + properties.setProperty(key: "Ice.ACM.Client.Close", value: "\(_clientACMClose)") + } + + if _clientACMHeartbeat >= 0 { + properties.setProperty(key: "Ice.ACM.Client.Heartbeat", value: "\(_clientACMHeartbeat)") + } + //try properties.setProperty(key: "Ice.Trace.Protocol", value: "2") + //try properties.setProperty(key: "Ice.Trace.Network", value: "2") + + var initData = Ice.InitializationData() + initData.properties = properties + initData.logger = _logger + _communicator = try _helper.initialize(initData) + } + + func start() { + _queue.async { + self._group.enter() + self.run() + self._group.leave() + } + } + + func destroy() throws { + try _adapter.deactivate() + _communicator.destroy() + } + + func join() throws { + _output.write("testing \(_name)... ") + _logger.start() + _group.wait() + if let msg = _msg { + _output.writeLine("failed! \(msg)") + throw Ice.RuntimeError(msg) + } else { + _output.writeLine("ok") + } + } + + func run() { + do { + let str = try _adapter.getTestIntf()!.ice_toString() + let proxy = try uncheckedCast(prx: _communicator.stringToProxy(str)!, + type: TestIntfPrx.self) + try proxy.ice_getConnection()!.setCloseCallback { _ in + withLock(&self._lock) { + self._closed = true + self._semaphore.signal() + } + } + + try proxy.ice_getConnection()!.setHeartbeatCallback { _ in + withLock(&self._lock) { + self._heartbeat += 1 + } + } + + try runTestCase(adapter: _adapter, proxy: proxy) + } catch let e { + _msg = "unexpected exception:\n\(e)" + } + } + + func waitForClosed() { + do { + os_unfair_lock_lock(&_lock) + defer { + os_unfair_lock_unlock(&_lock) + } + + if _closed { + return + } + } + + if _semaphore.wait(timeout: .now() + Double(2)) == .timedOut { + precondition(false) // Waited for more than 2s for close, something's wrong. + } + precondition(_closed) + } + + func runTestCase(adapter _: RemoteObjectAdapterPrx, proxy _: TestIntfPrx) throws { + precondition(false, "Abstract Method") + } + + func setClientACM(timeout: Int32, close: Int32, heartbeat: Int32) { + _clientACMTimeout = timeout + _clientACMClose = close + _clientACMHeartbeat = heartbeat + } + + func setServerACM(timeout: Int32, close: Int32, heartbeat: Int32) { + _serverACMTimeout = timeout + _serverACMClose = close + _serverACMHeartbeat = heartbeat + } +} + +class InvocationHeartbeatTest: TestCase { + init(com: RemoteCommunicatorPrx, helper: TestHelper) { + super.init(name: "invocation heartbeat", com: com, helper: helper) + setServerACM(timeout: 1, close: -1, heartbeat: -1) // Faster ACM to make sure we receive enough ACM hearbeats + } + + override func runTestCase(adapter _: RemoteObjectAdapterPrx, proxy: TestIntfPrx) throws { + try proxy.sleep(4) + + try withLock(&_lock) { + try _helper.test(self._heartbeat >= 4) + } + } +} + +class InvocationHeartbeatOnHoldTest: TestCase { + init(com: RemoteCommunicatorPrx, helper: TestHelper) { + super.init(name: "invocation with heartbeat on hold", com: com, helper: helper) + // Use default ACM configuration. + } + + override func runTestCase(adapter: RemoteObjectAdapterPrx, proxy: TestIntfPrx) throws { + do { + // When the OA is put on hold, connections shouldn't + // send heartbeats, the invocation should therefore + // fail. + try proxy.sleepAndHold(10) + try _helper.test(false) + } catch is Ice.ConnectionTimeoutException { + try adapter.activate() + try proxy.interruptSleep() + waitForClosed() + } + } +} + +class InvocationNoHeartbeatTest: TestCase { + init(com: RemoteCommunicatorPrx, helper: TestHelper) { + super.init(name: "invocation with no heartbeat", com: com, helper: helper) + setServerACM(timeout: 2, close: 2, heartbeat: 0) // Disable heartbeat on invocations + } + + override func runTestCase(adapter _: RemoteObjectAdapterPrx, proxy: TestIntfPrx) throws { + do { + // Heartbeats are disabled on the server, the + // invocation should fail since heartbeats are + // expected. + try proxy.sleep(10) + try _helper.test(false) + } catch is Ice.ConnectionTimeoutException { + try proxy.interruptSleep() + waitForClosed() + try withLock(&_lock) { + try _helper.test(_heartbeat == 0) + } + } + } +} + +class InvocationHeartbeatCloseOnIdleTest: TestCase { + init(com: RemoteCommunicatorPrx, helper: TestHelper) { + super.init(name: "invocation with no heartbeat and close on idle", com: com, helper: helper) + setClientACM(timeout: 1, close: 1, heartbeat: 0) // Only close on idle. + setServerACM(timeout: 1, close: 2, heartbeat: 0) // Disable heartbeat on invocations + } + + override func runTestCase(adapter _: RemoteObjectAdapterPrx, proxy: TestIntfPrx) throws { + // No close on invocation, the call should succeed this + // time. + try proxy.sleep(3) + try withLock(&_lock) { + try _helper.test(self._heartbeat == 0) + try _helper.test(!self._closed) + } + } +} + +class CloseOnIdleTest: TestCase { + init(com: RemoteCommunicatorPrx, helper: TestHelper) { + super.init(name: "close on idle", com: com, helper: helper) + setClientACM(timeout: 1, close: 1, heartbeat: 0) // Only close on idle + } + + override func runTestCase(adapter _: RemoteObjectAdapterPrx, proxy _: TestIntfPrx) throws { + Thread.sleep(forTimeInterval: 3) // Idle for 3 seconds + + waitForClosed() + try withLock(&_lock) { + try _helper.test(self._heartbeat == 0) + } + } +} + +class CloseOnInvocationTest: TestCase { + init(com: RemoteCommunicatorPrx, helper: TestHelper) { + super.init(name: "close on invocation", com: com, helper: helper) + setClientACM(timeout: 1, close: 2, heartbeat: 0) // Only close on invocation + } + + override func runTestCase(adapter _: RemoteObjectAdapterPrx, proxy _: TestIntfPrx) throws { + Thread.sleep(forTimeInterval: 3) // Idle for 3 seconds + try withLock(&_lock) { + try _helper.test(self._heartbeat == 0) + try _helper.test(!self._closed) + } + } +} + +class CloseOnIdleAndInvocationTest: TestCase { + init(com: RemoteCommunicatorPrx, helper: TestHelper) { + super.init(name: "close on idle and invocation", com: com, helper: helper) + setClientACM(timeout: 1, close: 3, heartbeat: 0) // Only close on idle and invocation + } + + override func runTestCase(adapter: RemoteObjectAdapterPrx, proxy _: TestIntfPrx) throws { + // + // Put the adapter on hold. The server will not respond to + // the graceful close. This allows to test whether or not + // the close is graceful or forceful. + // + try adapter.hold() + Thread.sleep(forTimeInterval: 3) // Idle for 3 seconds + + try withLock(&_lock) { + try _helper.test(self._heartbeat == 0) + try _helper.test(!self._closed) // Not closed yet because of graceful close. + } + + try adapter.activate() + Thread.sleep(forTimeInterval: 1) + + waitForClosed() + } +} + +class ForcefulCloseOnIdleAndInvocationTest: TestCase { + init(com: RemoteCommunicatorPrx, helper: TestHelper) { + super.init(name: "forceful close on idle and invocation", com: com, helper: helper) + setClientACM(timeout: 1, close: 4, heartbeat: 0) // Only close on idle and invocation + } + + override func runTestCase(adapter: RemoteObjectAdapterPrx, proxy _: TestIntfPrx) throws { + try adapter.hold() + Thread.sleep(forTimeInterval: 3) // Idle for 3 seconds + waitForClosed() + try withLock(&_lock) { + try _helper.test(self._heartbeat == 0) + } + } +} + +class HeartbeatOnIdleTest: TestCase { + init(com: RemoteCommunicatorPrx, helper: TestHelper) { + super.init(name: "heartbeat on idle", com: com, helper: helper) + setServerACM(timeout: 1, close: -1, heartbeat: 2) // Enable server heartbeats. + } + + override func runTestCase(adapter _: RemoteObjectAdapterPrx, proxy _: TestIntfPrx) throws { + Thread.sleep(forTimeInterval: 3) + try withLock(&_lock) { + try _helper.test(_heartbeat >= 3) + } + } +} + +class HeartbeatAlwaysTest: TestCase { + init(com: RemoteCommunicatorPrx, helper: TestHelper) { + super.init(name: "heartbeat always", com: com, helper: helper) + setServerACM(timeout: 1, close: -1, heartbeat: 3) // Enable server heartbeats. + } + + override func runTestCase(adapter _: RemoteObjectAdapterPrx, proxy: TestIntfPrx) throws { + for _ in 0 ..< 10 { + try proxy.ice_ping() + Thread.sleep(forTimeInterval: 0.3) + } + + try withLock(&_lock) { + try _helper.test(self._heartbeat >= 3) + } + } +} + +class HeartbeatManualTest: TestCase { + init(com: RemoteCommunicatorPrx, helper: TestHelper) { + super.init(name: "manual heartbeats", com: com, helper: helper) + // + // Disable heartbeats. + // + setClientACM(timeout: 10, close: -1, heartbeat: 0) + setServerACM(timeout: 10, close: -1, heartbeat: 0) + } + + override func runTestCase(adapter _: RemoteObjectAdapterPrx, proxy: TestIntfPrx) throws { + try proxy.startHeartbeatCount() + let con = try proxy.ice_getConnection()! + try con.heartbeat() + try con.heartbeat() + try con.heartbeat() + try con.heartbeat() + try con.heartbeat() + try proxy.waitForHeartbeatCount(5) + } +} + +class SetACMTest: TestCase { + init(com: RemoteCommunicatorPrx, helper: TestHelper) { + super.init(name: "setACM/getACM", com: com, helper: helper) + setClientACM(timeout: 15, close: 4, heartbeat: 0) + } + + override func runTestCase(adapter _: RemoteObjectAdapterPrx, proxy: TestIntfPrx) throws { + guard let con = proxy.ice_getCachedConnection() else { + fatalError() + } + + var acm = con.getACM() + try _helper.test(acm.timeout == 15) + try _helper.test(acm.close == .CloseOnIdleForceful) + try _helper.test(acm.heartbeat == .HeartbeatOff) + + con.setACM(timeout: nil, close: nil, heartbeat: nil) + acm = con.getACM() + try _helper.test(acm.timeout == 15) + try _helper.test(acm.close == .CloseOnIdleForceful) + try _helper.test(acm.heartbeat == .HeartbeatOff) + + con.setACM(timeout: 1, close: .CloseOnInvocationAndIdle, heartbeat: .HeartbeatAlways) + acm = con.getACM() + try _helper.test(acm.timeout == 1) + try _helper.test(acm.close == .CloseOnInvocationAndIdle) + try _helper.test(acm.heartbeat == .HeartbeatAlways) + + try proxy.startHeartbeatCount() + try proxy.waitForHeartbeatCount(2) + + let p1 = Promise<Void> { seal in + do { + try con.setCloseCallback { _ in + seal.fulfill(()) + } + } catch { + seal.reject(error) + } + } + try con.close(.Gracefully) + try p1.wait() + + do { + try con.throwException() + try _helper.test(false) + } catch is Ice.ConnectionManuallyClosedException {} + + try Promise<Void> { seal in + do { + try con.setCloseCallback { _ in + seal.fulfill(()) + } + } catch { + seal.reject(error) + } + }.wait() + + con.setHeartbeatCallback { _ in + precondition(false) + } + } +} + +func allTests(helper: TestHelper) throws { + let writer = helper.getWriter() + let communicator = helper.communicator() + + let com = try uncheckedCast(prx: communicator.stringToProxy("communicator:\(helper.getTestEndpoint(num: 0))")!, + type: RemoteCommunicatorPrx.self) + + let tests: [TestCase] = [ + InvocationHeartbeatTest(com: com, helper: helper), + InvocationHeartbeatOnHoldTest(com: com, helper: helper), + InvocationNoHeartbeatTest(com: com, helper: helper), + InvocationHeartbeatCloseOnIdleTest(com: com, helper: helper), + + CloseOnIdleTest(com: com, helper: helper), + CloseOnInvocationTest(com: com, helper: helper), + CloseOnIdleAndInvocationTest(com: com, helper: helper), + ForcefulCloseOnIdleAndInvocationTest(com: com, helper: helper), + + HeartbeatOnIdleTest(com: com, helper: helper), + HeartbeatAlwaysTest(com: com, helper: helper), + HeartbeatManualTest(com: com, helper: helper), + SetACMTest(com: com, helper: helper) + ] + + for t in tests { + try t.initialize() + } + + for t in tests { + t.start() + } + + for t in tests { + try t.join() + } + + for t in tests { + try t.destroy() + } + + writer.write("shutting down... ") + try com.shutdown() + writer.writeLine("ok") +} diff --git a/swift/test/Ice/acm/Client.swift b/swift/test/Ice/acm/Client.swift new file mode 100644 index 00000000000..344d3f36819 --- /dev/null +++ b/swift/test/Ice/acm/Client.swift @@ -0,0 +1,20 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import PromiseKit +import TestCommon + +class Client: TestHelperI { + override func run(args: [String]) throws { + let properties = try Ice.createProperties(args) + properties.setProperty(key: "Ice.Warn.Connections", value: "0") + + let communicator = try initialize(properties) + defer { + communicator.destroy() + } + try allTests(helper: self) + } +} diff --git a/swift/test/Ice/acm/Server.swift b/swift/test/Ice/acm/Server.swift new file mode 100644 index 00000000000..53271f272eb --- /dev/null +++ b/swift/test/Ice/acm/Server.swift @@ -0,0 +1,29 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import PromiseKit +import TestCommon + +class Server: TestHelperI { + public override func run(args: [String]) throws { + let properties = try Ice.createProperties(args) + properties.setProperty(key: "Ice.Warn.Connections", value: "0") + properties.setProperty(key: "Ice.ACM.Timeout", value: "1") + + let communicator = try initialize(properties) + defer { + communicator.destroy() + } + communicator.getProperties().setProperty(key: "TestAdapter.Endpoints", value: getTestEndpoint(num: 0)) + communicator.getProperties().setProperty(key: "TestAdapter.ACM.Timeout", value: "0") + let adapter = try communicator.createObjectAdapter("TestAdapter") + try adapter.add(servant: RemoteCommunicatorDisp(RemoteCommunicatorI()), + id: Ice.stringToIdentity("communicator")) + try adapter.activate() + serverReady() + communicator.getProperties().setProperty(key: "Ice.PrintAdapterReady", value: "0") + communicator.waitForShutdown() + } +} diff --git a/swift/test/Ice/acm/Test.ice b/swift/test/Ice/acm/Test.ice new file mode 100644 index 00000000000..94bafde6dbf --- /dev/null +++ b/swift/test/Ice/acm/Test.ice @@ -0,0 +1,33 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#pragma once + +module Test +{ + +interface TestIntf +{ + void sleep(int seconds); + void sleepAndHold(int seconds); + void interruptSleep(); + void startHeartbeatCount(); + void waitForHeartbeatCount(int count); +} + +interface RemoteObjectAdapter +{ + TestIntf* getTestIntf(); + void activate(); + void hold(); + void deactivate(); +} + +interface RemoteCommunicator +{ + RemoteObjectAdapter* createObjectAdapter(int acmTimeout, int close, int heartbeat); + void shutdown(); +} + +} diff --git a/swift/test/Ice/acm/TestI.swift b/swift/test/Ice/acm/TestI.swift new file mode 100644 index 00000000000..e30a60938cf --- /dev/null +++ b/swift/test/Ice/acm/TestI.swift @@ -0,0 +1,129 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Foundation +import Ice + +class RemoteCommunicatorI: RemoteCommunicator { + func createObjectAdapter(acmTimeout: Int32, + close: Int32, + heartbeat: Int32, + current: Ice.Current) throws -> RemoteObjectAdapterPrx? { + let communicator = current.adapter!.getCommunicator() + let properties = communicator.getProperties() + let defaultProtocol = properties.getPropertyWithDefault(key: "Ice.Default.Protocol", value: "tcp") + let defaultHost = properties.getPropertyWithDefault(key: "Ice.Default.Host", value: "127.0.0.1") + + let name = UUID().uuidString + if acmTimeout >= 0 { + properties.setProperty(key: "\(name).ACM.Timeout", value: "\(acmTimeout)") + } + + if close >= 0 { + properties.setProperty(key: "\(name).ACM.Close", value: "\(close)") + } + + if heartbeat >= 0 { + properties.setProperty(key: "\(name).ACM.Heartbeat", value: "\(heartbeat)") + } + properties.setProperty(key: "\(name).ThreadPool.Size", value: "2") + + let adapter = try communicator.createObjectAdapterWithEndpoints( + name: name, + endpoints: "\(defaultProtocol) -h \"\(defaultHost)\"" + ) + + return try uncheckedCast( + prx: current.adapter!.addWithUUID(RemoteObjectAdapterDisp(RemoteObjectAdapterI(adapter: adapter))), + type: RemoteObjectAdapterPrx.self + ) + } + + func shutdown(current: Ice.Current) throws { + current.adapter!.getCommunicator().shutdown() + } +} + +class RemoteObjectAdapterI: RemoteObjectAdapter { + var _adapter: Ice.ObjectAdapter + var _testIntf: TestIntfPrx + + init(adapter: Ice.ObjectAdapter) throws { + _adapter = adapter + _testIntf = try uncheckedCast(prx: adapter.add(servant: TestIntfDisp(TestI()), + id: Ice.stringToIdentity("test")), + type: TestIntfPrx.self) + try _adapter.activate() + } + + func getTestIntf(current _: Current) -> TestIntfPrx? { + return _testIntf + } + + func activate(current _: Current) throws { + try _adapter.activate() + } + + func hold(current _: Current) { + _adapter.hold() + } + + func deactivate(current _: Current) { + _adapter.destroy() + } +} + +class TestI: TestIntf { + class HearbeatCallbackI { + let _semaphore: DispatchSemaphore + var _count: Int32 + + public init() { + _count = 0 + _semaphore = DispatchSemaphore(value: 0) + } + + func hearbeat(conn _: Ice.Connection?) { + _count += 1 + _semaphore.signal() + } + + func waitForCount(count: Int32) { + while _count < count { + _semaphore.wait() + } + } + } + + let _semaphore: DispatchSemaphore + var _hearbeatCallback: HearbeatCallbackI! + + public init() { + _semaphore = DispatchSemaphore(value: 0) + } + + func sleep(seconds: Int32, current _: Current) { + _ = _semaphore.wait(timeout: .now() + Double(seconds)) + } + + func sleepAndHold(seconds: Int32, current: Current) { + current.adapter!.hold() + _ = _semaphore.wait(timeout: .now() + Double(seconds)) + } + + func interruptSleep(current _: Current) { + _semaphore.signal() + } + + func startHeartbeatCount(current: Current) { + _hearbeatCallback = HearbeatCallbackI() + current.con?.setHeartbeatCallback { conn in + self._hearbeatCallback.hearbeat(conn: conn) + } + } + + func waitForHeartbeatCount(count: Int32, current _: Current) { + _hearbeatCallback.waitForCount(count: count) + } +} diff --git a/swift/test/Ice/adapterDeactivation/AllTests.swift b/swift/test/Ice/adapterDeactivation/AllTests.swift new file mode 100644 index 00000000000..86024ac5ff3 --- /dev/null +++ b/swift/test/Ice/adapterDeactivation/AllTests.swift @@ -0,0 +1,165 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import TestCommon + +func allTests(_ helper: TestHelper) throws { + func test(_ value: Bool, file: String = #file, line: Int = #line) throws { + try helper.test(value, file: file, line: line) + } + + let communicator = helper.communicator() + let output = helper.getWriter() + output.write("testing stringToProxy... ") + let ref = "test:\(helper.getTestEndpoint(num: 0))" + let base = try communicator.stringToProxy(ref)! + output.writeLine("ok") + + output.write("testing checked cast... ") + let obj = try checkedCast(prx: base, type: TestIntfPrx.self)! + try test(obj == base) + output.writeLine("ok") + + do { + output.write("creating/destroying/recreating object adapter... ") + var adapter = try communicator.createObjectAdapterWithEndpoints(name: "TransientTestAdapter", + endpoints: "default") + do { + _ = try communicator.createObjectAdapterWithEndpoints(name: "TransientTestAdapter", endpoints: "default") + try test(false) + } catch is Ice.AlreadyRegisteredException {} + adapter.destroy() + + // + // Use a different port than the first adapter to avoid an "address already in use" error. + // + adapter = try communicator.createObjectAdapterWithEndpoints(name: "TransientTestAdapter", endpoints: "default") + adapter.destroy() + output.writeLine("ok") + } + + output.write("creating/activating/deactivating object adapter in one operation... ") + try obj.transient() + try obj.transientAsync().wait() + output.writeLine("ok") + + do { + output.write("testing connection closure... ") + for _ in 0 ..< 10 { + var initData = Ice.InitializationData() + initData.properties = communicator.getProperties().clone() + let comm = try Ice.initialize(initData) + _ = try comm.stringToProxy("test:\(helper.getTestEndpoint(num: 0))")!.ice_pingAsync() + comm.destroy() + } + output.writeLine("ok") + } + + output.write("testing object adapter published endpoints... ") + do { + communicator.getProperties().setProperty(key: "PAdapter.PublishedEndpoints", + value: "tcp -h localhost -p 12345 -t 30000") + let adapter = try communicator.createObjectAdapter("PAdapter") + try test(adapter.getPublishedEndpoints().count == 1) + let endpt = adapter.getPublishedEndpoints()[0] + try test(endpt.toString() == "tcp -h localhost -p 12345 -t 30000") + let prx = try communicator.stringToProxy("dummy:tcp -h localhost -p 12346 -t 20000:" + + "tcp -h localhost -p 12347 -t 10000")! + try adapter.setPublishedEndpoints(prx.ice_getEndpoints()) + try test(adapter.getPublishedEndpoints().count == 2) + var id = Ice.Identity() + id.name = "dummy" + + try test(adapter.createProxy(id).ice_getEndpoints().elementsEqual(prx.ice_getEndpoints()) { $0 == $1 }) + try test(adapter.getPublishedEndpoints().elementsEqual(prx.ice_getEndpoints()) { $0 == $1 }) + try adapter.refreshPublishedEndpoints() + try test(adapter.getPublishedEndpoints().count == 1) + try test(adapter.getPublishedEndpoints()[0] == endpt) + communicator.getProperties().setProperty(key: "PAdapter.PublishedEndpoints", + value: "tcp -h localhost -p 12345 -t 20000") + try adapter.refreshPublishedEndpoints() + try test(adapter.getPublishedEndpoints().count == 1) + try test(adapter.getPublishedEndpoints()[0].toString() == "tcp -h localhost -p 12345 -t 20000") + adapter.destroy() + try test(adapter.getPublishedEndpoints().count == 0) + } + output.writeLine("ok") + + if try obj.ice_getConnection() != nil { + output.write("testing object adapter with bi-dir connection... ") + let adapter = try communicator.createObjectAdapter("") + try obj.ice_getConnection()!.setAdapter(adapter) + try obj.ice_getConnection()!.setAdapter(nil) + adapter.deactivate() + do { + try obj.ice_getConnection()!.setAdapter(adapter) + try test(false) + } catch is Ice.ObjectAdapterDeactivatedException {} + output.writeLine("ok") + } + + output.write("testing object adapter with router... ") + do { + var routerId = Ice.Identity() + routerId.name = "router" + var router = uncheckedCast(prx: base.ice_identity(routerId).ice_connectionId("rc"), + type: Ice.RouterPrx.self) + let adapter = try communicator.createObjectAdapterWithRouter(name: "", rtr: router) + try test(adapter.getPublishedEndpoints().count == 1) + try test(adapter.getPublishedEndpoints()[0].toString() == "tcp -h localhost -p 23456 -t 30000") + try adapter.refreshPublishedEndpoints() + try test(adapter.getPublishedEndpoints().count == 1) + try test(adapter.getPublishedEndpoints()[0].toString() == "tcp -h localhost -p 23457 -t 30000") + do { + try adapter.setPublishedEndpoints(router.ice_getEndpoints()) + try test(false) + } catch is Ice.RuntimeError {} + adapter.destroy() + + do { + routerId.name = "test" + router = uncheckedCast(prx: base.ice_identity(routerId), type: Ice.RouterPrx.self) + _ = try communicator.createObjectAdapterWithRouter(name: "", rtr: router) + try test(false) + } catch is Ice.OperationNotExistException { + // Expected: the "test" object doesn't implement Ice::Router! + } + + do { + router = try uncheckedCast(prx: communicator.stringToProxy("test:\(helper.getTestEndpoint(num: 1))")!, + type: Ice.RouterPrx.self) + _ = try communicator.createObjectAdapterWithRouter(name: "", rtr: router) + try test(false) + } catch is Ice.ConnectFailedException {} + } + output.writeLine("ok") + + output.write("testing object adapter creation with port in use... ") + do { + let adapter1 = try communicator.createObjectAdapterWithEndpoints(name: "Adpt1", + endpoints: helper.getTestEndpoint(num: 10)) + do { + _ = try communicator.createObjectAdapterWithEndpoints(name: "Adpt2", + endpoints: helper.getTestEndpoint(num: 10)) + try test(false) + } catch is Ice.LocalException { + // Expected can't re-use the same endpoint. + } + adapter1.destroy() + } + output.writeLine("ok") + + output.write("deactivating object adapter in the server... ") + try obj.deactivate() + output.writeLine("ok") + + output.write("testing whether server is gone... ") + do { + try obj.ice_ping() + try test(false) + } catch is Ice.LocalException { + output.writeLine("ok") + } +} diff --git a/swift/test/Ice/adapterDeactivation/Client.swift b/swift/test/Ice/adapterDeactivation/Client.swift new file mode 100644 index 00000000000..cbca6f8fce7 --- /dev/null +++ b/swift/test/Ice/adapterDeactivation/Client.swift @@ -0,0 +1,16 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import TestCommon + +class Client: TestHelperI { + override func run(args: [String]) throws { + let communicator = try initialize(args) + defer { + communicator.destroy() + } + try allTests(self) + } +} diff --git a/swift/test/Ice/adapterDeactivation/Collocated.swift b/swift/test/Ice/adapterDeactivation/Collocated.swift new file mode 100644 index 00000000000..6695d431a28 --- /dev/null +++ b/swift/test/Ice/adapterDeactivation/Collocated.swift @@ -0,0 +1,26 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import PromiseKit +import TestCommon + +class Collocated: TestHelperI { + public override func run(args: [String]) throws { + let communicator = try initialize(args) + defer { + communicator.destroy() + } + communicator.getProperties().setProperty(key: "TestAdapter.Endpoints", value: getTestEndpoint(num: 0)) + // + // 2 threads are necessary to dispatch the collocated transient() call with AMI + // + communicator.getProperties().setProperty(key: "TestAdapter.ThreadPool.Size", value: "2") + let adapter = try communicator.createObjectAdapter("TestAdapter") + try adapter.addServantLocator(locator: ServantLocatorI(helper: self), category: "") + try adapter.activate() + try allTests(self) + adapter.waitForDeactivate() + } +} diff --git a/swift/test/Ice/adapterDeactivation/Server.swift b/swift/test/Ice/adapterDeactivation/Server.swift new file mode 100644 index 00000000000..08c68bf29a6 --- /dev/null +++ b/swift/test/Ice/adapterDeactivation/Server.swift @@ -0,0 +1,22 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import PromiseKit +import TestCommon + +class Server: TestHelperI { + public override func run(args: [String]) throws { + let communicator = try initialize(args) + defer { + communicator.destroy() + } + communicator.getProperties().setProperty(key: "TestAdapter.Endpoints", value: getTestEndpoint(num: 0)) + let adapter = try communicator.createObjectAdapter("TestAdapter") + try adapter.addServantLocator(locator: ServantLocatorI(helper: self), category: "") + try adapter.activate() + serverReady() + adapter.waitForDeactivate() + } +} diff --git a/swift/test/Ice/adapterDeactivation/Test.ice b/swift/test/Ice/adapterDeactivation/Test.ice new file mode 100644 index 00000000000..99ec4d750e8 --- /dev/null +++ b/swift/test/Ice/adapterDeactivation/Test.ice @@ -0,0 +1,22 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#pragma once + +module Test +{ + +interface TestIntf +{ + void transient(); + + void deactivate(); +} + +local class Cookie +{ + string message(); +} + +} diff --git a/swift/test/Ice/adapterDeactivation/TestI.swift b/swift/test/Ice/adapterDeactivation/TestI.swift new file mode 100644 index 00000000000..23373babd71 --- /dev/null +++ b/swift/test/Ice/adapterDeactivation/TestI.swift @@ -0,0 +1,104 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Foundation +import Ice +import TestCommon + +class TestI: TestIntf { + init() {} + + func transient(current: Ice.Current) throws { + let communicator = current.adapter!.getCommunicator() + + let adapter = try communicator.createObjectAdapterWithEndpoints(name: "TransientTestAdapter", + endpoints: "default") + try adapter.activate() + adapter.destroy() + } + + func deactivate(current: Ice.Current) throws { + current.adapter!.deactivate() + Thread.sleep(forTimeInterval: 0.1) + } +} + +class CookieI: Cookie { + func message() -> String { + return "blahblah" + } +} + +class RouterI: Ice.Router { + func getClientProxy(current _: Ice.Current) throws -> (returnValue: ObjectPrx?, hasRoutingTable: Bool?) { + return (nil, false) + } + + func addProxies(proxies _: [ObjectPrx?], current _: Current) throws -> [ObjectPrx?] { + return [] + } + + func getServerProxy(current: Ice.Current) throws -> Ice.ObjectPrx? { + let prx = + try current.adapter!.getCommunicator().stringToProxy("dummy:tcp -h localhost -p \(_nextPort) -t 30000") + _nextPort += 1 + return prx + } + + var _nextPort: Int32 = 23456 +} + +class ServantLocatorI: Ice.ServantLocator { + var _helper: TestHelper + var _deactivated: Bool + var _router = RouterI() + var _lock = os_unfair_lock() + + init(helper: TestHelper) { + _deactivated = false + _helper = helper + } + + deinit { + precondition(_deactivated) + } + + func locate(_ current: Ice.Current) throws -> (returnValue: Disp?, cookie: AnyObject?) { + try withLock(&_lock) { + try _helper.test(!_deactivated) + } + + if current.id.name == "router" { + return (RouterDisp(_router), CookieI()) + } + + try _helper.test(current.id.category == "") + try _helper.test(current.id.name == "test") + + return (TestIntfDisp(TestI()), CookieI()) + } + + func finished(curr current: Ice.Current, servant _: Ice.Disp, cookie: Swift.AnyObject?) throws { + try withLock(&_lock) { + try _helper.test(!_deactivated) + } + + if current.id.name == "router" { + return + } + + try _helper.test((cookie as! Cookie).message() == "blahblah") + } + + func deactivate(_: String) { + do { + try withLock(&_lock) { + try _helper.test(!_deactivated) + _deactivated = true + } + } catch { + fatalError("\(error)") + } + } +} diff --git a/swift/test/Ice/admin/AllTests.swift b/swift/test/Ice/admin/AllTests.swift new file mode 100644 index 00000000000..10f89a1a084 --- /dev/null +++ b/swift/test/Ice/admin/AllTests.swift @@ -0,0 +1,597 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Foundation +import Ice +import TestCommon + +class RemoteLoggerI: Ice.RemoteLogger { + var _helper: TestHelper + var _receivedCalls: Int32 = 0 + var _prefix: String = "" + var _initMessages: [Ice.LogMessage] = [] + var _logMessages: [Ice.LogMessage] = [] + var _lock = os_unfair_lock() + var _semaphore = DispatchSemaphore(value: 0) + + init(helper: TestHelper) { + _helper = helper + } + + func `init`(prefix: String, logMessages: [Ice.LogMessage], current _: Ice.Current) throws { + withLock(&_lock) { + _prefix = prefix + _initMessages += logMessages + _receivedCalls += 1 + _semaphore.signal() + } + } + + func log(message: Ice.LogMessage, current _: Ice.Current) throws { + withLock(&_lock) { + _logMessages.append(message) + _receivedCalls += 1 + _semaphore.signal() + } + } + + func checkNextInit(prefix: String, type: Ice.LogMessageType, message: String, category: String) throws { + try withLock(&_lock) { + try _helper.test(self._prefix == prefix) + try _helper.test(self._initMessages.count > 0) + let logMessage = _initMessages.removeFirst() + try _helper.test(logMessage.type == type) + try _helper.test(logMessage.message == message) + try _helper.test(logMessage.traceCategory == category) + } + } + + func checkNextLog(type: Ice.LogMessageType, message: String, category: String) throws { + try withLock(&_lock) { + try _helper.test(_logMessages.count > 0) + let logMessage = _logMessages.removeFirst() + try _helper.test(logMessage.type == type) + try _helper.test(logMessage.message == message) + try _helper.test(logMessage.traceCategory == category) + } + } + + func wait(calls: Int32) throws { + _receivedCalls -= calls + while _receivedCalls < 0 { + _semaphore.wait() + } + } +} + +func testFacets(com: Ice.Communicator, builtInFacets: Bool, helper: TestHelper) throws { + if builtInFacets { + try helper.test(com.findAdminFacet("Properties") != nil) + try helper.test(com.findAdminFacet("Process") != nil) + try helper.test(com.findAdminFacet("Logger") != nil) + try helper.test(com.findAdminFacet("Metrics") != nil) + } + + let f1 = TestFacetI() + let f2 = TestFacetI() + let f3 = TestFacetI() + + try com.addAdminFacet(servant: TestFacetDisp(f1), facet: "Facet1") + try com.addAdminFacet(servant: TestFacetDisp(f2), facet: "Facet2") + try com.addAdminFacet(servant: TestFacetDisp(f3), facet: "Facet3") + + try helper.test((com.findAdminFacet("Facet1") as! TestFacetDisp).servant as? TestFacetI === f1) + try helper.test((com.findAdminFacet("Facet2") as! TestFacetDisp).servant as? TestFacetI === f2) + try helper.test((com.findAdminFacet("Facet3") as! TestFacetDisp).servant as? TestFacetI === f3) + try helper.test(com.findAdminFacet("Bogus") == nil) + + var facetMap = com.findAllAdminFacets() + if builtInFacets { + try helper.test(facetMap.count == 7) + try helper.test(facetMap["Properties"] != nil) + try helper.test(facetMap["Process"] != nil) + try helper.test(facetMap["Logger"] != nil) + try helper.test(facetMap["Metrics"] != nil) + } else { + try helper.test(facetMap.count >= 3) + } + + try helper.test(facetMap["Facet1"] != nil) + try helper.test(facetMap["Facet2"] != nil) + try helper.test(facetMap["Facet3"] != nil) + + do { + try com.addAdminFacet(servant: TestFacetDisp(f1), facet: "Facet1") + try helper.test(false) + } catch is Ice.AlreadyRegisteredException {} + + do { + _ = try com.removeAdminFacet("Bogus") + try helper.test(false) + } catch is Ice.NotRegisteredException {} + + _ = try com.removeAdminFacet("Facet1") + _ = try com.removeAdminFacet("Facet2") + _ = try com.removeAdminFacet("Facet3") + + do { + _ = try com.removeAdminFacet("Facet1") + try helper.test(false) + } catch is Ice.NotRegisteredException {} +} + +func allTests(_ helper: TestHelper) throws { + func test(_ value: Bool, file: String = #file, line: Int = #line) throws { + try helper.test(value, file: file, line: line) + } + + let communicator = helper.communicator() + let output = helper.getWriter() + + output.write("testing communicator operations... ") + do { + // + // Test: Exercise addAdminFacet, findAdminFacet, removeAdminFacet with a typical configuration. + // + let properties = Ice.createProperties() + properties.setProperty(key: "Ice.Admin.Endpoints", value: "tcp -h 127.0.0.1") + properties.setProperty(key: "Ice.Admin.InstanceName", value: "Test") + + var initData = Ice.InitializationData() + initData.properties = properties + let com = try Ice.initialize(initData) + try testFacets(com: com, builtInFacets: true, helper: helper) + com.destroy() + } + + do { + // + // Test: Verify that the operations work correctly in the presence of facet filters. + // + let properties = Ice.createProperties() + properties.setProperty(key: "Ice.Admin.Endpoints", value: "tcp -h 127.0.0.1") + properties.setProperty(key: "Ice.Admin.InstanceName", value: "Test") + properties.setProperty(key: "Ice.Admin.Facets", value: "Properties") + var initData = Ice.InitializationData() + initData.properties = properties + let com = try Ice.initialize(initData) + try testFacets(com: com, builtInFacets: false, helper: helper) + com.destroy() + } + + do { + // + // Test: Verify that the operations work correctly with the Admin object disabled. + // + let com = try Ice.initialize() + try testFacets(com: com, builtInFacets: false, helper: helper) + com.destroy() + } + + do { + // + // Test: Verify that the operations work correctly with Ice.Admin.Enabled=1 + // + let properties = Ice.createProperties() + properties.setProperty(key: "Ice.Admin.Enabled", value: "1") + var initData = Ice.InitializationData() + initData.properties = properties + let com = try Ice.initialize(initData) + try test(com.getAdmin() == nil) + let id = try Ice.stringToIdentity("test-admin") + do { + _ = try com.createAdmin(adminAdapter: nil, adminId: id) + try test(false) + } catch is Ice.InitializationException {} + + let adapter = try com.createObjectAdapter("") + _ = try com.createAdmin(adminAdapter: adapter, adminId: id) + try test(com.getAdmin() != nil) + + try testFacets(com: com, builtInFacets: true, helper: helper) + com.destroy() + } + + do { + // + // Test: Verify that the operations work correctly when creation of the Admin object is delayed. + // + let properties = Ice.createProperties() + properties.setProperty(key: "Ice.Admin.Endpoints", value: "tcp -h 127.0.0.1") + properties.setProperty(key: "Ice.Admin.InstanceName", value: "Test") + properties.setProperty(key: "Ice.Admin.DelayCreation", value: "1") + var initData = Ice.InitializationData() + initData.properties = properties + let com = try Ice.initialize(initData) + try testFacets(com: com, builtInFacets: true, helper: helper) + _ = try com.getAdmin() + try testFacets(com: com, builtInFacets: true, helper: helper) + com.destroy() + } + output.writeLine("ok") + + let str = "factory:\(helper.getTestEndpoint(num: 0)) -t 10000" + let factory = try uncheckedCast(prx: communicator.stringToProxy(str)!, type: RemoteCommunicatorFactoryPrx.self) + + output.write("testing process facet... ") + do { + // + // Test: Verify that Process::shutdown() operation shuts down the communicator. + // + let props = ["Ice.Admin.Endpoints": "tcp -h 127.0.0.1", + "Ice.Admin.InstanceName": "Test"] + let com = try factory.createCommunicator(props)! + let obj = try com.getAdmin()! + let proc = try checkedCast(prx: obj, type: Ice.ProcessPrx.self, facet: "Process")! + try proc.shutdown() + try com.waitForShutdown() + try com.destroy() + } + output.writeLine("ok") + + output.write("testing properties facet... ") + do { + let props = ["Ice.Admin.Endpoints": "tcp -h 127.0.0.1", + "Ice.Admin.InstanceName": "Test", + "Prop1": "1", + "Prop2": "2", + "Prop3": "3"] + + let com = try factory.createCommunicator(props)! + let obj = try com.getAdmin()! + let pa = try checkedCast(prx: obj, type: Ice.PropertiesAdminPrx.self, facet: "Properties")! + + // + // Test: PropertiesAdmin::getProperty() + // + try test(pa.getProperty("Prop2") == "2") + try test(pa.getProperty("Bogus") == "") + + // + // Test: PropertiesAdmin::getProperties() + // + let pd = try pa.getPropertiesForPrefix("") + try test(pd.count == 5) + try test(pd["Ice.Admin.Endpoints"] == "tcp -h 127.0.0.1") + try test(pd["Ice.Admin.InstanceName"] == "Test") + try test(pd["Prop1"] == "1") + try test(pd["Prop2"] == "2") + try test(pd["Prop3"] == "3") + + // + // Test: PropertiesAdmin::setProperties() + // + let setProps = [ + "Prop1": "10", // Changed + "Prop2": "20", // Changed + "Prop3": "", // Removed + "Prop4": "4", // Added + "Prop5": "5" // Added + ] + try pa.setProperties(setProps) + try test(pa.getProperty("Prop1") == "10") + try test(pa.getProperty("Prop2") == "20") + try test(pa.getProperty("Prop3") == "") + try test(pa.getProperty("Prop4") == "4") + try test(pa.getProperty("Prop5") == "5") + var changes = try com.getChanges() + try test(changes.count == 5) + try test(changes["Prop1"] == "10") + try test(changes["Prop2"] == "20") + try test(changes["Prop3"] == "") + try test(changes["Prop4"] == "4") + try test(changes["Prop5"] == "5") + try pa.setProperties(setProps) + changes = try com.getChanges() + try test(changes.count == 0) + + try com.destroy() + } + output.writeLine("ok") + + output.write("testing logger facet... ") + do { + let props = [ + "Ice.Admin.Endpoints": "tcp -h 127.0.0.1", + "Ice.Admin.InstanceName": "Test", + "NullLogger": "1" + ] + + let com = try factory.createCommunicator(props)! + + try com.trace(category: "testCat", message: "trace") + try com.warning("warning") + try com.error("error") + try com.print("print") + + let obj = try com.getAdmin()! + let logger = try checkedCast(prx: obj, type: Ice.LoggerAdminPrx.self, facet: "Logger")! + + // + // Get all + // + var (logMessages, prefix) = try logger.getLog(messageTypes: [], traceCategories: [], messageMax: -1) + + try test(logMessages.count == 4) + try test(prefix == "NullLogger") + try test(logMessages[0].traceCategory == "testCat" && + logMessages[0].message == "trace") + try test(logMessages[1].message == "warning") + try test(logMessages[2].message == "error") + try test(logMessages[3].message == "print") + + // + // Get only errors and warnings + // + try com.error("error2") + try com.print("print2") + try com.trace(category: "testCat", message: "trace2") + try com.warning("warning2") + + (logMessages, prefix) = try logger.getLog(messageTypes: [Ice.LogMessageType.ErrorMessage, + Ice.LogMessageType.WarningMessage], + traceCategories: [], + messageMax: -1) + + try test(logMessages.count == 4) + try test(prefix == "NullLogger") + + for msg in logMessages { + try test(msg.type == Ice.LogMessageType.ErrorMessage || + msg.type == Ice.LogMessageType.WarningMessage) + } + + // + // Get only errors and traces with Cat = "testCat" + // + try com.trace(category: "testCat2", message: "A") + try com.trace(category: "testCat", message: "trace3") + try com.trace(category: "testCat2", message: "B") + + (logMessages, prefix) = try logger.getLog(messageTypes: [Ice.LogMessageType.ErrorMessage, + Ice.LogMessageType.TraceMessage], + traceCategories: ["testCat"], + messageMax: -1) + try test(logMessages.count == 5) + try test(prefix == "NullLogger") + + for msg in logMessages { + try test(msg.type == Ice.LogMessageType.ErrorMessage || + (msg.type == Ice.LogMessageType.TraceMessage && msg.traceCategory == "testCat")) + } + + // + // Same, but limited to last 2 messages(trace3 + error3) + // + try com.error("error3") + + (logMessages, prefix) = try logger.getLog(messageTypes: [Ice.LogMessageType.ErrorMessage, + Ice.LogMessageType.TraceMessage], + traceCategories: ["testCat"], + messageMax: 2) + try test(logMessages.count == 2) + try test(prefix == "NullLogger") + + try test(logMessages[0].message == "trace3") + try test(logMessages[1].message == "error3") + + // + // Now, test RemoteLogger + // + let adapter = try communicator.createObjectAdapterWithEndpoints(name: "RemoteLoggerAdapter", + endpoints: "tcp -h localhost") + + let remoteLogger = RemoteLoggerI(helper: helper) + + let myProxy = try uncheckedCast(prx: adapter.addWithUUID(Ice.RemoteLoggerDisp(remoteLogger)), + type: Ice.RemoteLoggerPrx.self) + + try adapter.activate() + + // + // No filtering + // + (logMessages, prefix) = try logger.getLog(messageTypes: [], traceCategories: [], messageMax: -1) + + try logger.attachRemoteLogger(prx: myProxy, messageTypes: [], traceCategories: [], messageMax: -1) + try remoteLogger.wait(calls: 1) + + for m in logMessages { + try remoteLogger.checkNextInit(prefix: prefix, type: m.type, message: m.message, category: m.traceCategory) + } + + try com.trace(category: "testCat", message: "rtrace") + try com.warning("rwarning") + try com.error("rerror") + try com.print("rprint") + + try remoteLogger.wait(calls: 4) + + try remoteLogger.checkNextLog(type: Ice.LogMessageType.TraceMessage, + message: "rtrace", + category: "testCat") + + try remoteLogger.checkNextLog(type: Ice.LogMessageType.WarningMessage, + message: "rwarning", + category: "") + + try remoteLogger.checkNextLog(type: Ice.LogMessageType.ErrorMessage, + message: "rerror", + category: "") + + try remoteLogger.checkNextLog(type: Ice.LogMessageType.PrintMessage, + message: "rprint", + category: "") + + try test(logger.detachRemoteLogger(myProxy)) + try test(!logger.detachRemoteLogger(myProxy)) + + // + // Use Error + Trace with "traceCat" filter with 4 limit + // + (logMessages, prefix) = try logger.getLog(messageTypes: [Ice.LogMessageType.ErrorMessage, + Ice.LogMessageType.TraceMessage], + traceCategories: ["testCat"], + messageMax: 4) + try test(logMessages.count == 4) + + try logger.attachRemoteLogger(prx: myProxy, + messageTypes: [Ice.LogMessageType.ErrorMessage, Ice.LogMessageType.TraceMessage], + traceCategories: ["testCat"], + messageMax: 4) + try remoteLogger.wait(calls: 1) + + for m in logMessages { + try remoteLogger.checkNextInit(prefix: prefix, type: m.type, message: m.message, category: m.traceCategory) + } + + try com.warning("rwarning2") + try com.trace(category: "testCat", message: "rtrace2") + try com.warning("rwarning3") + try com.error("rerror2") + try com.print("rprint2") + + try remoteLogger.wait(calls: 2) + + try remoteLogger.checkNextLog(type: Ice.LogMessageType.TraceMessage, message: "rtrace2", category: "testCat") + try remoteLogger.checkNextLog(type: Ice.LogMessageType.ErrorMessage, message: "rerror2", category: "") + + // + // Attempt reconnection with slightly different proxy + // + do { + try logger.attachRemoteLogger(prx: uncheckedCast(prx: myProxy.ice_oneway(), type: Ice.RemoteLoggerPrx.self), + messageTypes: [Ice.LogMessageType.ErrorMessage, + Ice.LogMessageType.TraceMessage], + traceCategories: ["testCat"], + messageMax: 4) + try test(false) + } catch is Ice.RemoteLoggerAlreadyAttachedException {} + + try com.destroy() + } + output.writeLine("ok") + + output.write("testing custom facet... ") + do { + // + // Test: Verify that the custom facet is present. + // + let props = ["Ice.Admin.Endpoints": "tcp -h 127.0.0.1", + "Ice.Admin.InstanceName": "Test"] + let com = try factory.createCommunicator(props)! + let obj = try com.getAdmin()! + let tf = try checkedCast(prx: obj, type: TestFacetPrx.self, facet: "TestFacet")! + try tf.op() + try com.destroy() + } + output.writeLine("ok") + + output.write("testing facet filtering... ") + do { + // + // Test: Set Ice.Admin.Facets to expose only the Properties facet, + // meaning no other facet is available. + // + let props = [ + "Ice.Admin.Endpoints": "tcp -h 127.0.0.1", + "Ice.Admin.InstanceName": "Test", + "Ice.Admin.Facets": "Properties" + ] + + let com = try factory.createCommunicator(props)! + let obj = try com.getAdmin()! + let proc = try checkedCast(prx: obj, type: Ice.ProcessPrx.self, facet: "Process") + try test(proc == nil) + let tf = try checkedCast(prx: obj, type: TestFacetPrx.self, facet: "TestFacet") + try test(tf == nil) + try com.destroy() + } + + do { + // + // Test: Set Ice.Admin.Facets to expose only the Process facet, + // meaning no other facet is available. + // + let props = [ + "Ice.Admin.Endpoints": "tcp -h 127.0.0.1", + "Ice.Admin.InstanceName": "Test", + "Ice.Admin.Facets": "Process" + ] + let com = try factory.createCommunicator(props)! + let obj = try com.getAdmin()! + let pa = try checkedCast(prx: obj, type: Ice.PropertiesAdminPrx.self, facet: "Properties") + try test(pa == nil) + let tf = try checkedCast(prx: obj, type: TestFacetPrx.self, facet: "TestFacet") + try test(tf == nil) + try com.destroy() + } + + do { + // + // Test: Set Ice.Admin.Facets to expose only the TestFacet facet, + // meaning no other facet is available. + // + let props = [ + "Ice.Admin.Endpoints": "tcp -h 127.0.0.1", + "Ice.Admin.InstanceName": "Test", + "Ice.Admin.Facets": "TestFacet" + ] + + let com = try factory.createCommunicator(props)! + let obj = try com.getAdmin()! + let pa = try checkedCast(prx: obj, type: Ice.PropertiesAdminPrx.self, facet: "Properties") + try test(pa == nil) + let proc = try checkedCast(prx: obj, type: Ice.ProcessPrx.self, facet: "Process") + try test(proc == nil) + try com.destroy() + } + + do { + // + // Test: Set Ice.Admin.Facets to expose two facets. Use whitespace to separate the + // facet names. + // + let props = [ + "Ice.Admin.Endpoints": "tcp -h 127.0.0.1", + "Ice.Admin.InstanceName": "Test", + "Ice.Admin.Facets": "Properties TestFacet" + ] + + let com = try factory.createCommunicator(props)! + let obj = try com.getAdmin()! + let pa = try checkedCast(prx: obj, type: Ice.PropertiesAdminPrx.self, facet: "Properties")! + try test(pa.getProperty("Ice.Admin.InstanceName") == "Test") + let tf = try checkedCast(prx: obj, type: TestFacetPrx.self, facet: "TestFacet")! + try tf.op() + let proc = try checkedCast(prx: obj, type: Ice.ProcessPrx.self, facet: "Process") + try test(proc == nil) + try com.destroy() + } + + do { + // + // Test: Set Ice.Admin.Facets to expose two facets. Use a comma to separate the + // facet names. + // + let props = [ + "Ice.Admin.Endpoints": "tcp -h 127.0.0.1", + "Ice.Admin.InstanceName": "Test", + "Ice.Admin.Facets": "TestFacet, Process" + ] + let com = try factory.createCommunicator(props)! + let obj = try com.getAdmin()! + let pa = try checkedCast(prx: obj, type: Ice.PropertiesAdminPrx.self, facet: "Properties") + try test(pa == nil) + let tf = try checkedCast(prx: obj, type: TestFacetPrx.self, facet: "TestFacet")! + try tf.op() + let proc = try checkedCast(prx: obj, type: Ice.ProcessPrx.self, facet: "Process")! + try proc.shutdown() + try com.waitForShutdown() + try com.destroy() + } + output.writeLine("ok") + + try factory.shutdown() +} diff --git a/swift/test/Ice/admin/Client.swift b/swift/test/Ice/admin/Client.swift new file mode 100644 index 00000000000..e28df06a089 --- /dev/null +++ b/swift/test/Ice/admin/Client.swift @@ -0,0 +1,16 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import TestCommon + +class Client: TestHelperI { + public override func run(args: [String]) throws { + let communicator = try initialize(args) + defer { + communicator.destroy() + } + try allTests(self) + } +} diff --git a/swift/test/Ice/admin/Server.swift b/swift/test/Ice/admin/Server.swift new file mode 100644 index 00000000000..454886b75b3 --- /dev/null +++ b/swift/test/Ice/admin/Server.swift @@ -0,0 +1,24 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import TestCommon + +class Server: TestHelperI { + public override func run(args: [String]) throws { + let communicator = try initialize(args) + defer { + communicator.destroy() + } + communicator.getProperties().setProperty(key: "TestAdapter.Endpoints", + value: "\(getTestEndpoint(num: 0)) -t 10000") + let adapter = try communicator.createObjectAdapter("TestAdapter") + let id = try Ice.stringToIdentity("factory") + try adapter.add(servant: RemoteCommunicatorFactoryDisp(RemoteCommunicatorFactoryI()), + id: id) + try adapter.activate() + serverReady() + communicator.waitForShutdown() + } +} diff --git a/swift/test/Ice/admin/Test.ice b/swift/test/Ice/admin/Test.ice new file mode 100644 index 00000000000..9a52d6b0a83 --- /dev/null +++ b/swift/test/Ice/admin/Test.ice @@ -0,0 +1,48 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#ifndef TEST_ICE +#define TEST_ICE + +#include <Ice/Properties.ice> + +module Test +{ + +interface RemoteCommunicator +{ + Object* getAdmin(); + + Ice::PropertyDict getChanges(); + + // + // Logger operations + // + void print(string message); + void trace(string category, string message); + void warning(string message); + void error(string message); + + void shutdown(); + + void waitForShutdown(); + + void destroy(); +} + +interface RemoteCommunicatorFactory +{ + RemoteCommunicator* createCommunicator(Ice::PropertyDict props); + + void shutdown(); +} + +interface TestFacet +{ + void op(); +} + +} + +#endif diff --git a/swift/test/Ice/admin/TestI.swift b/swift/test/Ice/admin/TestI.swift new file mode 100644 index 00000000000..545d30e5089 --- /dev/null +++ b/swift/test/Ice/admin/TestI.swift @@ -0,0 +1,134 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Foundation +import Ice +import TestCommon + +class TestFacetI: TestFacet { + func op(current _: Ice.Current) {} +} + +class RemoteCommunicatorI: RemoteCommunicator { + var _communicator: Ice.Communicator + var _changes: [String: String] = [:] + var _lock = os_unfair_lock() + + init(communicator: Ice.Communicator) { + _communicator = communicator + } + + func getAdmin(current _: Ice.Current) throws -> Ice.ObjectPrx? { + return try _communicator.getAdmin() + } + + func getChanges(current _: Ice.Current) throws -> [String: String] { + return withLock(&_lock) { + _changes + } + } + + func print(message: String, current _: Ice.Current) throws { + _communicator.getLogger().print(message) + } + + func trace(category: String, message: String, current _: Ice.Current) throws { + _communicator.getLogger().trace(category: category, message: message) + } + + func warning(message: String, current _: Ice.Current) throws { + _communicator.getLogger().warning(message) + } + + func error(message: String, current _: Ice.Current) throws { + _communicator.getLogger().error(message) + } + + func shutdown(current _: Ice.Current) throws { + _communicator.shutdown() + } + + func waitForShutdown(current _: Ice.Current) throws { + // + // Note that we are executing in a thread of the *main* communicator, + // not the one that is being shut down. + // + _communicator.waitForShutdown() + } + + func destroy(current _: Ice.Current) throws { + _communicator.destroy() + } + + func updated(changes: [String: String]) { + withLock(&_lock) { + _changes = changes + } + } +} + +class NullLogger: Ice.Logger { + func print(_: String) {} + + func trace(category _: String, message _: String) {} + + func warning(_: String) {} + + func error(_: String) {} + + func getPrefix() -> String { + return "NullLogger" + } + + func cloneWithPrefix(_: String) -> Logger { + return self + } +} + +class RemoteCommunicatorFactoryI: RemoteCommunicatorFactory { + func createCommunicator(props: [String: String], current: Ice.Current) throws -> RemoteCommunicatorPrx? { + // + // Prepare the property set using the given properties. + // + let properties = Ice.createProperties() + for (key, value) in props { + properties.setProperty(key: key, value: value) + } + + var initData = Ice.InitializationData() + initData.properties = properties + if properties.getPropertyAsInt("NullLogger") > 0 { + initData.logger = NullLogger() + } + + // + // Initialize a new communicator. + // + let communicator = try Ice.initialize(initData) + + // + // Install a custom admin facet. + // + try communicator.addAdminFacet(servant: TestFacetDisp(TestFacetI()), facet: "TestFacet") + + // + // The RemoteCommunicator servant also implements PropertiesAdminUpdateCallback. + // Set the callback on the admin facet. + // + let servant = RemoteCommunicatorI(communicator: communicator) + + if let propDisp = communicator.findAdminFacet("Properties") as? PropertiesAdminDisp, + let propFacet = propDisp.servant as? NativePropertiesAdmin { + _ = propFacet.addUpdateCallback { changes in + servant.updated(changes: changes) + } + } + return try uncheckedCast(prx: current.adapter!.addWithUUID(RemoteCommunicatorDisp(servant)), + type: RemoteCommunicatorPrx.self) + } + + func shutdown(current: Ice.Current) throws { + current.adapter!.getCommunicator().shutdown() + } +} diff --git a/swift/test/Ice/ami/AllTests.swift b/swift/test/Ice/ami/AllTests.swift new file mode 100644 index 00000000000..dadc3d84043 --- /dev/null +++ b/swift/test/Ice/ami/AllTests.swift @@ -0,0 +1,525 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import PromiseKit +import TestCommon + +func allTests(_ helper: TestHelper, collocated: Bool = false) throws { + func test(_ value: Bool, file: String = #file, line: Int = #line) throws { + try helper.test(value, file: file, line: line) + } + + let communicator = helper.communicator() + let output = helper.getWriter() + + var sref = "test:\(helper.getTestEndpoint(num: 0))" + var obj = try communicator.stringToProxy(sref)! + + var p = uncheckedCast(prx: obj, type: TestIntfPrx.self) + sref = "testController:\(helper.getTestEndpoint(num: 1))" + obj = try communicator.stringToProxy(sref)! + + let testController = uncheckedCast(prx: obj, type: TestIntfControllerPrx.self) + + output.write("testing async invocation...") + do { + let ctx: [String: String] = [:] + + try test(p.ice_isAAsync(id: "::Test::TestIntf").wait()) + try test(p.ice_isAAsync(id: "::Test::TestIntf", context: ctx).wait()) + + try p.ice_pingAsync().wait() + try p.ice_pingAsync(context: ctx).wait() + + try test(p.ice_idAsync().wait() == "::Test::TestIntf") + try test(p.ice_idAsync(context: ctx).wait() == "::Test::TestIntf") + + try test(p.ice_idsAsync().wait().count == 2) + try test(p.ice_idsAsync(context: ctx).wait().count == 2) + + if !collocated { + try test(p.ice_getConnectionAsync().wait() != nil) + } + + try p.opAsync().wait() + try p.opAsync(context: ctx).wait() + + try test(p.opWithResultAsync().wait() == 15) + try test(p.opWithResultAsync(context: ctx).wait() == 15) + + do { + try p.opWithUEAsync().wait() + try test(false) + } catch is TestIntfException {} + + do { + try p.opWithUEAsync(context: ctx).wait() + try test(false) + } catch is TestIntfException {} + } + output.writeLine("ok") + + output.write("testing local exceptions... ") + do { + let indirect = uncheckedCast(prx: p.ice_adapterId("dummy"), type: TestIntfPrx.self) + try indirect.opAsync().wait() + } catch is Ice.NoEndpointException {} + + do { + _ = try p.ice_oneway().opWithResultAsync().wait() + try test(false) + } catch is Ice.LocalException {} + + // + // Check that CommunicatorDestroyedException is raised directly. + // + if try p.ice_getConnection() != nil { + var initData = Ice.InitializationData() + initData.properties = communicator.getProperties().clone() + let ic = try helper.initialize(initData) + let o = try ic.stringToProxy(p.ice_toString())! + let p2 = try checkedCast(prx: o, type: TestIntfPrx.self)! + ic.destroy() + do { + try p2.opAsync().wait() + try test(false) + } catch is Ice.CommunicatorDestroyedException {} + } + output.writeLine("ok") + + output.write("testing exception callback... ") + do { + let i = uncheckedCast(prx: p.ice_adapterId("dummy"), type: TestIntfPrx.self) + + do { + _ = try i.ice_isAAsync(id: "::Test::TestIntf").wait() + try test(false) + } catch is Ice.NoEndpointException {} + + do { + try i.opAsync().wait() + try test(false) + } catch is Ice.NoEndpointException {} + + do { + _ = try i.opWithResultAsync().wait() + try test(false) + } catch is Ice.NoEndpointException {} + + do { + try i.opWithUEAsync().wait() + try test(false) + } catch is Ice.NoEndpointException {} + + // Ensures no exception is called when response is received + _ = try p.ice_isAAsync(id: "::Test::TestIntf").wait() + try p.opAsync().wait() + _ = try p.opWithResultAsync().wait() + + do { + // If response is a user exception, it should be received. + try p.opWithUEAsync().wait() + try test(false) + } catch is TestIntfException {} + } + output.writeLine("ok") + + output.write("testing sent callback... ") + _ = try Promise<Bool> { seal in + _ = p.ice_isAAsync(id: "") { sentSynchronously in + seal.fulfill(sentSynchronously) + } + }.wait() + + _ = try Promise<Bool> { seal in + _ = p.ice_pingAsync { sentSynchronously in + seal.fulfill(sentSynchronously) + } + }.wait() + + _ = try Promise<Bool> { seal in + _ = p.ice_idAsync { sentSynchronously in + seal.fulfill(sentSynchronously) + } + }.wait() + + _ = try Promise<Bool> { seal in + _ = p.ice_idsAsync { sentSynchronously in + seal.fulfill(sentSynchronously) + } + }.wait() + + _ = try Promise<Bool> { seal in + _ = p.opAsync { sentSynchronously in + seal.fulfill(sentSynchronously) + } + }.wait() + + let seq = ByteSeq(repeating: 0, count: 1024) + var cbs = [Promise<Bool>]() + try testController.holdAdapter() + var cb: Promise<Bool>! + do { + defer { + do { + try testController.resumeAdapter() + } catch {} + } + + while true { + cb = Promise<Bool> { seal in + _ = p.opWithPayloadAsync(seq) { sentSynchronously in + seal.fulfill(sentSynchronously) + } + } + Thread.sleep(forTimeInterval: 0.01) + cbs.append(cb) + if try !cb.isFulfilled || !cb.wait() { + break + } + } + } + try test(cb.wait() == false) + + for cb in cbs { + _ = try cb.wait() + } + output.writeLine("ok") + + output.write("testing batch requests with proxy... ") + do { + try test(Promise<Bool> { seal in + _ = p.ice_batchOneway().ice_flushBatchRequestsAsync { sentSynchronously in + seal.fulfill(sentSynchronously) + } + }.wait()) + + do { + try test(p.opBatchCount() == 0) + let b1 = p.ice_batchOneway() + try b1.opBatch() + let b1r = b1.opBatchAsync() + try test(b1r.isFulfilled) + var r: Promise<Void>! + try Promise<Void> { seal in + r = b1.ice_flushBatchRequestsAsync { _ in + seal.fulfill(()) + } + }.wait() + try test(r.isResolved) + try test(p.waitForBatch(2)) + } + + if try p.ice_getConnection() != nil { + try test(p.opBatchCount() == 0) + let b1 = p.ice_batchOneway() + try b1.opBatch() + try b1.ice_getConnection()!.close(.GracefullyWithWait) + + var r: Promise<Void>! + try Promise<Void> { seal in + r = b1.ice_flushBatchRequestsAsync { _ in + seal.fulfill(()) + } + }.wait() + try test(r.isResolved) + + try test(p.waitForBatch(1)) + } + } + output.writeLine("ok") + + if try p.ice_getConnection() != nil { + output.write("testing batch requests with connection... ") + do { + do { + try test(p.opBatchCount() == 0) + let b1 = try p.ice_fixed(p.ice_getConnection()!).ice_batchOneway() + try b1.opBatch() + try b1.opBatch() + var r: Promise<Void>! + try Promise<Void> { seal in + r = try b1.ice_getConnection()!.flushBatchRequestsAsync(.BasedOnProxy) { _ in + seal.fulfill(()) + } + }.wait() + try r.wait() + try test(r.isResolved) + try test(p.waitForBatch(2)) + } + + try test(p.opBatchCount() == 0) + let b1 = try p.ice_fixed(p.ice_getConnection()!).ice_batchOneway() + try b1.opBatch() + try b1.ice_getConnection()!.close(.GracefullyWithWait) + + let r = try b1.ice_getConnection()!.flushBatchRequestsAsync(.BasedOnProxy) + try test(!r.isResolved) + + try test(p.waitForBatch(0)) + } + output.writeLine("ok") + + output.write("testing batch requests with communicator... ") + do { + // + // Async task - 1 connection. + // + try test(p.opBatchCount() == 0) + let b1 = try p.ice_fixed(p.ice_getConnection()!).ice_batchOneway() + try b1.opBatch() + try b1.opBatch() + var r: Promise<Void>! + try Promise<Void> { seal in + r = communicator.flushBatchRequestsAsync(.BasedOnProxy) { _ in seal.fulfill(()) } + }.wait() + try r.wait() + try test(r.isResolved) + try test(p.waitForBatch(2)) + } + + // + // Async task exception - 1 connection. + // + do { + try test(p.opBatchCount() == 0) + let b1 = try p.ice_fixed(p.ice_getConnection()!).ice_batchOneway() + try b1.opBatch() + try b1.ice_getConnection()!.close(.GracefullyWithWait) + var r: Promise<Void>! + try Promise<Void> { seal in + r = communicator.flushBatchRequestsAsync(.BasedOnProxy) { _ in + seal.fulfill(()) + } + }.wait() + try test(r.isResolved) + try test(p.opBatchCount() == 0) + } + + // + // Async task - 2 connections. + // + do { + try test(p.opBatchCount() == 0) + let b1 = try p.ice_fixed(p.ice_getConnection()!).ice_batchOneway() + let con = try p.ice_connectionId("2").ice_getConnection()! + let b2 = p.ice_fixed(con).ice_batchOneway() + try b1.opBatch() + try b1.opBatch() + try b2.opBatch() + try b2.opBatch() + + var r: Promise<Void>! + try Promise<Void> { seal in + r = communicator.flushBatchRequestsAsync(.BasedOnProxy) { _ in + seal.fulfill(()) + } + }.wait() + try test(r.isResolved) + try test(p.waitForBatch(4)) + } + + do { + // + // AsyncResult exception - 2 connections - 1 failure. + // + // All connections should be flushed even if there are failures on some connections. + // Exceptions should not be reported. + // + try test(p.opBatchCount() == 0) + let b1 = try p.ice_fixed(p.ice_getConnection()!).ice_batchOneway() + + let con = try p.ice_connectionId("2").ice_getConnection()! + let b2 = p.ice_fixed(con).ice_batchOneway() + try b1.opBatch() + try b2.opBatch() + try b1.ice_getConnection()!.close(.GracefullyWithWait) + var r: Promise<Void>! + try Promise<Void> { seal in + r = communicator.flushBatchRequestsAsync(.BasedOnProxy) { _ in + seal.fulfill(()) + } + }.wait() + try test(r.isResolved) + try test(p.waitForBatch(1)) + } + + do { + // + // Async task exception - 2 connections - 2 failures. + // + // The sent callback should be invoked even if all connections fail. + // + try test(p.opBatchCount() == 0) + let b1 = try p.ice_fixed(p.ice_getConnection()!).ice_batchOneway() + + let con = try p.ice_connectionId("2").ice_getConnection()! + let b2 = p.ice_fixed(con).ice_batchOneway() + try b1.opBatch() + try b2.opBatch() + try b1.ice_getConnection()!.close(.GracefullyWithWait) + try b2.ice_getConnection()!.close(.GracefullyWithWait) + var r: Promise<Void>! + try Promise<Void> { seal in + r = communicator.flushBatchRequestsAsync(.BasedOnProxy) { _ in + seal.fulfill(()) + } + }.wait() + try test(r.isResolved) + try test(p.opBatchCount() == 0) + } + output.writeLine("ok") + } + + if try p.ice_getConnection() != nil && p.supportsAMD() { + output.write("testing graceful close connection with wait... ") + do { + // + // Local case: begin a request, close the connection gracefully, and make sure it waits + // for the request to complete. + // + let con = try p.ice_getConnection()! + let cb = Promise<Void> { seal in + do { + try con.setCloseCallback { _ in seal.fulfill(()) } + } catch { + precondition(false) + } + } + let r = p.sleepAsync(100) + try con.close(.GracefullyWithWait) + try r.wait() // Should complete successfully. + try cb.wait() + } + + do { + // + // Remote case. + // + let seq = ByteSeq(repeating: 0, count: 1024 * 10) + + // + // Send multiple opWithPayload, followed by a close and followed by multiple opWithPaylod. + // The goal is to make sure that none of the opWithPayload fail even if the server closes + // the connection gracefully in between. + // + var maxQueue = 2 + var done = false + while !done, maxQueue < 50 { + done = true + try p.ice_ping() + var results: [Promise<Void>] = [] + for _ in 0 ..< maxQueue { + results.append(p.opWithPayloadAsync(seq)) + } + + var cb = Promise<Bool> { seal in + _ = p.closeAsync(.GracefullyWithWait) { + seal.fulfill($0) + } + } + + if try !cb.isResolved || cb.wait() { + for _ in 0 ..< maxQueue { + cb = Promise<Bool> { seal in + results.append(p.opWithPayloadAsync(seq) { seal.fulfill($0) }) + } + + if try cb.isResolved && cb.wait() { + done = false + maxQueue *= 2 + break + } + } + } else { + maxQueue *= 2 + done = false + } + + for p in results { + try p.wait() + } + } + } + output.writeLine("ok") + + output.write("testing graceful close connection without wait... ") + do { + // + // Local case: start an operation and then close the connection gracefully on the client side + // without waiting for the pending invocation to complete. There will be no retry and we expect the + // invocation to fail with ConnectionManuallyClosedException. + // + p = p.ice_connectionId("CloseGracefully") // Start with a new connection. + var con = try p.ice_getConnection()! + + var t: Promise<Void>! + + _ = try Promise<Bool> { seal in + t = p.startDispatchAsync { seal.fulfill($0) } + }.wait() // Ensure the request was sent before we close the connection. + try con.close(.Gracefully) + + do { + try t.wait() + try test(false) + } catch let ex as Ice.ConnectionManuallyClosedException { + try test(ex.graceful) + } + try p.finishDispatch() + + // + // Remote case: the server closes the connection gracefully, which means the connection + // will not be closed until all pending dispatched requests have completed. + // + con = try p.ice_getConnection()! + + let cb = Promise<Void> { seal in + try con.setCloseCallback { _ in + seal.fulfill(()) + } + } + t = p.sleepAsync(100) + try p.close(.Gracefully) // Close is delayed until sleep completes. + try cb.wait() + try t.wait() + } + output.writeLine("ok") + + output.write("testing forceful close connection... ") + do { + // + // Local case: start an operation and then close the connection forcefully on the client side. + // There will be no retry and we expect the invocation to fail with ConnectionManuallyClosedException. + // + try p.ice_ping() + let con = try p.ice_getConnection()! + var t: Promise<Void>! + _ = try Promise<Bool> { seal in + t = p.startDispatchAsync { seal.fulfill($0) } + }.wait() // Ensure the request was sent before we close the connection. + try con.close(.Forcefully) + do { + try t.wait() + try test(false) + } catch let ex as Ice.ConnectionManuallyClosedException { + try test(!ex.graceful) + } + try p.finishDispatch() + + // + // Remote case: the server closes the connection forcefully. This causes the request to fail + // with a ConnectionLostException. Since the close() operation is not idempotent, the client + // will not retry. + // + do { + try p.close(.Forcefully) + try test(false) + } catch is Ice.ConnectionLostException {} // Expected. + } + output.writeLine("ok") + } + try p.shutdown() +} diff --git a/swift/test/Ice/ami/Client.swift b/swift/test/Ice/ami/Client.swift new file mode 100644 index 00000000000..e28df06a089 --- /dev/null +++ b/swift/test/Ice/ami/Client.swift @@ -0,0 +1,16 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import TestCommon + +class Client: TestHelperI { + public override func run(args: [String]) throws { + let communicator = try initialize(args) + defer { + communicator.destroy() + } + try allTests(self) + } +} diff --git a/swift/test/Ice/ami/Collocated.swift b/swift/test/Ice/ami/Collocated.swift new file mode 100644 index 00000000000..16c17fb8918 --- /dev/null +++ b/swift/test/Ice/ami/Collocated.swift @@ -0,0 +1,54 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Dispatch +import Ice +import TestCommon + +class Collocated: TestHelperI { + public override func run(args: [String]) throws { + let properties = try createTestProperties(args) + + // + // Disable collocation optimization to test async/await dispatch. + // + properties.setProperty(key: "Ice.Default.CollocationOptimized", value: "0") + + // + // This test kills connections, so we don't want warnings. + // + properties.setProperty(key: "Ice.Warn.Connections", value: "0") + + // + // Limit the recv buffer size, this test relies on the socket + // send() blocking after sending a given amount of data. + // + properties.setProperty(key: "Ice.TCP.RcvSize", value: "50000") + + let communicator = try initialize(args) + defer { + communicator.destroy() + } + + communicator.getProperties().setProperty(key: "TestAdapter.Endpoints", + value: getTestEndpoint(num: 0)) + communicator.getProperties().setProperty(key: "ControllerAdapter.Endpoints", + value: getTestEndpoint(num: 1)) + communicator.getProperties().setProperty(key: "ControllerAdapter.ThreadPool.Size", + value: "1") + + let adapter = try communicator.createObjectAdapter("TestAdapter") + let adapter2 = try communicator.createObjectAdapter("ControllerAdapter") + + try adapter.add(servant: TestIntfDisp(TestI(helper: self)), + id: Ice.stringToIdentity("test")) + try adapter.add(servant: OuterInnerTestIntfDisp(TestII()), + id: Ice.stringToIdentity("test2")) + try adapter.activate() + try adapter2.add(servant: TestIntfControllerDisp(TestControllerI(adapter: adapter)), + id: Ice.stringToIdentity("testController")) + try adapter2.activate() + try allTests(self, collocated: true) + } +} diff --git a/swift/test/Ice/ami/Server.swift b/swift/test/Ice/ami/Server.swift new file mode 100644 index 00000000000..460ea5f4e0f --- /dev/null +++ b/swift/test/Ice/ami/Server.swift @@ -0,0 +1,55 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Dispatch +import Ice +import TestCommon + +class Server: TestHelperI { + public override func run(args: [String]) throws { + let properties = try createTestProperties(args) + + // + // Disable collocation optimization to test async/await dispatch. + // + properties.setProperty(key: "Ice.Default.CollocationOptimized", value: "0") + + // + // This test kills connections, so we don't want warnings. + // + properties.setProperty(key: "Ice.Warn.Connections", value: "0") + + // + // Limit the recv buffer size, this test relies on the socket + // send() blocking after sending a given amount of data. + // + properties.setProperty(key: "Ice.TCP.RcvSize", value: "50000") + + var initData = Ice.InitializationData() + initData.properties = properties + let communicator = try initialize(initData) + defer { + communicator.destroy() + } + + communicator.getProperties().setProperty(key: "TestAdapter.Endpoints", + value: getTestEndpoint(num: 0)) + communicator.getProperties().setProperty(key: "ControllerAdapter.Endpoints", + value: getTestEndpoint(num: 1)) + communicator.getProperties().setProperty(key: "ControllerAdapter.ThreadPool.Size", + value: "1") + + let adapter = try communicator.createObjectAdapter("TestAdapter") + let adapter2 = try communicator.createObjectAdapter("ControllerAdapter") + + try adapter.add(servant: TestIntfDisp(TestI(helper: self)), id: Ice.stringToIdentity("test")) + try adapter.add(servant: OuterInnerTestIntfDisp(TestII()), id: Ice.stringToIdentity("test2")) + try adapter.activate() + try adapter2.add(servant: TestIntfControllerDisp(TestControllerI(adapter: adapter)), + id: Ice.stringToIdentity("testController")) + try adapter2.activate() + serverReady() + communicator.waitForShutdown() + } +} diff --git a/swift/test/Ice/ami/Test.ice b/swift/test/Ice/ami/Test.ice new file mode 100644 index 00000000000..0d3c21ce789 --- /dev/null +++ b/swift/test/Ice/ami/Test.ice @@ -0,0 +1,77 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#pragma once + +#include <Ice/BuiltinSequences.ice> +#include <Ice/Identity.ice> + +module Test +{ + +exception TestIntfException +{ +} + +enum CloseMode +{ + Forcefully, + Gracefully, + GracefullyWithWait +} + +interface PingReply +{ + void reply(); +} + +interface TestIntf +{ + void op(); + void opWithPayload(Ice::ByteSeq seq); + int opWithResult(); + void opWithUE() + throws TestIntfException; + int opWithResultAndUE() + throws TestIntfException; + void opBatch(); + + void opWithArgs(out int one, out int two, out int three, out int four, out int five, out int six, out int seven, + out int eight, out int nine, out int ten, out int eleven); + int opBatchCount(); + bool waitForBatch(int count); + void close(CloseMode mode); + void sleep(int ms); + ["amd"] void startDispatch(); + void finishDispatch(); + void shutdown(); + + bool supportsAMD(); + bool supportsFunctionalTests(); + + void pingBiDir(PingReply* reply); +} + +interface TestIntfController +{ + void holdAdapter(); + void resumeAdapter(); +} + +module Outer +{ + +module Inner +{ + +interface TestIntf +{ + int op(int i, out int j); +} + +} + +} + +} diff --git a/swift/test/Ice/ami/TestI.swift b/swift/test/Ice/ami/TestI.swift new file mode 100644 index 00000000000..b857c98170b --- /dev/null +++ b/swift/test/Ice/ami/TestI.swift @@ -0,0 +1,163 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Foundation +import Ice +import PromiseKit +import TestCommon + +class TestI: TestIntf { + var _batchCount: Int32 + var _shutdown: Bool + var _lock = os_unfair_lock() + var _semaphore = DispatchSemaphore(value: 0) + var _pending: Resolver<Void>? + var _helper: TestHelper + + init(helper: TestHelper) { + _batchCount = 0 + _shutdown = false + _helper = helper + } + + func op(current _: Current) throws {} + + func opWithPayload(seq _: ByteSeq, current _: Current) throws {} + + func opWithResult(current _: Current) throws -> Int32 { + return 15 + } + + func opWithUE(current _: Current) throws { + throw TestIntfException() + } + + func opWithResultAndUE(current _: Current) throws -> Int32 { + throw TestIntfException() + } + + func opWithArgs(current _: Current) throws -> (one: Int32, + two: Int32, + three: Int32, + four: Int32, + five: Int32, + six: Int32, + seven: Int32, + eight: Int32, + nine: Int32, + ten: Int32, + eleven: Int32) { + return (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11) + } + + func startDispatchAsync(current _: Current) -> Promise<Void> { + return withLock(&_lock) { + if _shutdown { + return Promise.value(()) + } else if let pending = _pending { + pending.fulfill(()) + } + return Promise<Void> { seal in + _pending = seal + } + } + } + + func pingBiDir(reply: PingReplyPrx?, current: Current) throws { + if let reply = reply { + try reply.ice_fixed(current.con!).replyAsync().wait() + } + } + + func opBatch(current _: Current) throws { + withLock(&_lock) { + _batchCount += 1 + _semaphore.signal() + } + } + + func opBatchCount(current _: Current) throws -> Int32 { + return withLock(&_lock) { + _batchCount + } + } + + func waitForBatch(count: Int32, current _: Current) throws -> Bool { + while _batchCount < count { + if _semaphore.wait(timeout: .now() + .seconds(5)) == .timedOut { + try _helper.test(false) + } + } + let result = count == _batchCount + _batchCount = 0 + return result + } + + func close(mode: CloseMode, current: Current) throws { + if let con = current.con, + let closeMode = ConnectionClose(rawValue: mode.rawValue) { + try con.close(closeMode) + } + } + + func sleep(ms: Int32, current _: Current) throws { + withLock(&_lock) { + Thread.sleep(forTimeInterval: TimeInterval(ms) / 1000) + } + } + + func finishDispatch(current _: Current) throws { + withLock(&_lock) { + if _shutdown { + return + } else if let pending = _pending { + // Pending might not be set yet if startDispatch is dispatch out-of-order + pending.fulfill(()) + _pending = nil + } + } + } + + func shutdown(current: Current) throws { + withLock(&_lock) { + _shutdown = true + if let pending = _pending { + // Pending might not be set yet if startDispatch is dispatch out-of-order + pending.fulfill(()) + _pending = nil + } + } + current.adapter!.getCommunicator().shutdown() + } + + func supportsAMD(current _: Current) throws -> Bool { + return true + } + + func supportsFunctionalTests(current _: Current) throws -> Bool { + return false + } +} + +class TestII: OuterInnerTestIntf { + func op(i: Int32, current _: Ice.Current) throws -> (returnValue: Int32, j: Int32) { + return (i, i) + } +} + +class TestControllerI: TestIntfController { + var _adapter: Ice.ObjectAdapter + + init(adapter: Ice.ObjectAdapter) { + _adapter = adapter + } + + func holdAdapter(current _: Ice.Current) { + _adapter.hold() + } + + func resumeAdapter(current _: Ice.Current) throws { + try _adapter.activate() + } +} diff --git a/swift/test/Ice/binding/AllTests.swift b/swift/test/Ice/binding/AllTests.swift new file mode 100644 index 00000000000..56310188772 --- /dev/null +++ b/swift/test/Ice/binding/AllTests.swift @@ -0,0 +1,844 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// +import Ice +import TestCommon + +func createTestIntfPrx(_ adapters: [RemoteObjectAdapterPrx]) throws -> TestIntfPrx { + var endpoints: [Ice.Endpoint] = [] + var obj: TestIntfPrx! + for adapter in adapters { + obj = try adapter.getTestIntf()! + for e in obj.ice_getEndpoints() { + endpoints.append(e) + } + } + return obj.ice_endpoints(endpoints) +} + +func deactivate(communicator: RemoteCommunicatorPrx, adapters: [RemoteObjectAdapterPrx]) throws { + for adapter in adapters { + try communicator.deactivateObjectAdapter(adapter) + } +} + +func allTests(_ helper: TestHelper) throws { + func test(_ value: Bool, file: String = #file, line: Int = #line) throws { + try helper.test(value, file: file, line: line) + } + + let communicator = helper.communicator() + let output = helper.getWriter() + + let com = uncheckedCast(prx: try communicator.stringToProxy("communicator:\(helper.getTestEndpoint(num: 0))")!, + type: RemoteCommunicatorPrx.self) + + output.write("testing binding with single endpoint... ") + + do { + let adapter = try com.createObjectAdapter(name: "Adapter", endpoints: "default")! + + let test1 = try adapter.getTestIntf()! + let test2 = try adapter.getTestIntf()! + + try test(test1.ice_getConnection() === test2.ice_getConnection()) + + try test1.ice_ping() + try test2.ice_ping() + + try com.deactivateObjectAdapter(adapter) + + let test3 = uncheckedCast(prx: test1, type: TestIntfPrx.self) + try test(test3.ice_getConnection() === test1.ice_getConnection()) + try test(test3.ice_getConnection() === test2.ice_getConnection()) + + do { + try test3.ice_ping() + try test(false) + } catch is Ice.ConnectFailedException { + // expected + } catch is Ice.ConnectTimeoutException { + // expected + } + } + output.writeLine("ok") + + output.write("testing binding with multiple endpoints... ") + do { + var adapters = [try com.createObjectAdapter(name: "Adapter11", endpoints: "default")!, + try com.createObjectAdapter(name: "Adapter12", endpoints: "default")!, + try com.createObjectAdapter(name: "Adapter13", endpoints: "default")!] + + // + // Ensure that when a connection is opened it's reused for new + // proxies and that all endpoints are eventually tried. + // + var names = ["Adapter11", "Adapter12", "Adapter13"] + while names.count > 0 { + var adpts = adapters + + let test1 = try createTestIntfPrx(adpts) + adpts.shuffle() + let test2 = try createTestIntfPrx(adpts) + adpts.shuffle() + let test3 = try createTestIntfPrx(adpts) + try test1.ice_ping() + try test(test1.ice_getConnection() === test2.ice_getConnection()) + try test(test2.ice_getConnection() === test3.ice_getConnection()) + + let adapterName = try test1.getAdapterName() + names.removeAll(where: { $0 == adapterName }) + try test1.ice_getConnection()!.close(.GracefullyWithWait) + } + + // + // Ensure that the proxy correctly caches the connection(we + // always send the request over the same connection.) + // + do { + for adpt in adapters { + try adpt.getTestIntf()!.ice_ping() + } + + let t = try createTestIntfPrx(adapters) + let name = try t.getAdapterName() + let nRetry = 10 + var i = 0 + + while try i < nRetry && t.getAdapterName() == name { + i += 1 + } + try test(i == nRetry) + + for adpt in adapters { + try adpt.getTestIntf()!.ice_getConnection()!.close(.GracefullyWithWait) + } + } + + // + // Deactivate an adapter and ensure that we can still + // establish the connection to the remaining adapters. + // + try com.deactivateObjectAdapter(adapters[0]) + names.append("Adapter12") + names.append("Adapter13") + + while names.count > 0 { + var adpts = adapters + + let test1 = try createTestIntfPrx(adpts) + adpts.shuffle() + let test2 = try createTestIntfPrx(adpts) + adpts.shuffle() + let test3 = try createTestIntfPrx(adpts) + + try test(test1.ice_getConnection() === test2.ice_getConnection()) + try test(test2.ice_getConnection() === test3.ice_getConnection()) + + let adapterName = try test1.getAdapterName() + names.removeAll(where: { $0 == adapterName }) + + try test1.ice_getConnection()!.close(.GracefullyWithWait) + } + + // + // Deactivate an adapter and ensure that we can still + // establish the connection to the remaining adapter. + // + try com.deactivateObjectAdapter(adapters[2]) + let obj = try createTestIntfPrx(adapters) + try test(obj.getAdapterName() == "Adapter12") + + try deactivate(communicator: com, adapters: adapters) + } + output.writeLine("ok") + + output.write("testing binding with multiple random endpoints... ") + do { + var adapters = [try com.createObjectAdapter(name: "AdapterRandom11", endpoints: "default")!, + try com.createObjectAdapter(name: "AdapterRandom12", endpoints: "default")!, + try com.createObjectAdapter(name: "AdapterRandom13", endpoints: "default")!, + try com.createObjectAdapter(name: "AdapterRandom14", endpoints: "default")!, + try com.createObjectAdapter(name: "AdapterRandom15", endpoints: "default")!] + + var count: Int32 = 20 + var adapterCount = adapters.count + while count > 0 { + count -= 1 + var proxies: [TestIntfPrx] = [] + if count == 1 { + try com.deactivateObjectAdapter(adapters[4]) + adapterCount -= 1 + } + + for _ in 0 ..< 10 { + var adpts: [RemoteObjectAdapterPrx] = [] + for _ in 0 ..< Int.random(in: 1 ... adapters.count) { + adpts.append(adapters.randomElement()!) + } + proxies.append(try createTestIntfPrx(adpts)) + } + + for prx in proxies { + _ = prx.getAdapterNameAsync() + } + + for prx in proxies { + do { + try prx.ice_ping() + } catch is Ice.LocalException {} + } + + var connections: [Ice.Connection] = [] + for prx in proxies { + if let conn = prx.ice_getCachedConnection() { + if !connections.contains(where: { $0 === conn }) { + connections.append(conn) + } + } + } + try test(connections.count <= adapterCount) + + for a in adapters { + do { + try a.getTestIntf()!.ice_getConnection()!.close(.GracefullyWithWait) + } catch is Ice.LocalException {} // Expected if adapter is down. + } + } + } + output.writeLine("ok") + + output.write("testing binding with multiple endpoints and AMI... ") + do { + var adapters = [try com.createObjectAdapter(name: "AdapterAMI11", endpoints: "default")!, + try com.createObjectAdapter(name: "AdapterAMI12", endpoints: "default")!, + try com.createObjectAdapter(name: "AdapterAMI13", endpoints: "default")!] + + // + // Ensure that when a connection is opened it's reused for new + // proxies and that all endpoints are eventually tried. + // + var names = ["AdapterAMI11", "AdapterAMI12", "AdapterAMI13"] + while names.count > 0 { + var adpts = adapters + + let test1 = try createTestIntfPrx(adpts) + adpts.shuffle() + let test2 = try createTestIntfPrx(adpts) + adpts.shuffle() + let test3 = try createTestIntfPrx(adpts) + try test1.ice_ping() + try test(test1.ice_getConnection() === test2.ice_getConnection()) + try test(test2.ice_getConnection() === test3.ice_getConnection()) + + let adapterName = try test1.getAdapterName() + names.removeAll(where: { $0 == adapterName }) + try test1.ice_getConnection()!.close(.GracefullyWithWait) + } + + // + // Ensure that the proxy correctly caches the connection(we + // always send the request over the same connection.) + // + do { + for adpt in adapters { + try adpt.getTestIntf()!.ice_ping() + } + + let t = try createTestIntfPrx(adapters) + let name = try t.getAdapterNameAsync().wait() + let nRetry = 10 + var i = 0 + while try i < nRetry && t.getAdapterNameAsync().wait() == name { + i += 1 + } + try test(i == nRetry) + + for adpt in adapters { + try adpt.getTestIntf()!.ice_getConnection()!.close(.GracefullyWithWait) + } + } + + // + // Deactivate an adapter and ensure that we can still + // establish the connection to the remaining adapters. + // + try com.deactivateObjectAdapter(adapters[0]) + names.append("AdapterAMI12") + names.append("AdapterAMI13") + while names.count > 0 { + var adpts = adapters + let test1 = try createTestIntfPrx(adpts) + adpts.shuffle() + let test2 = try createTestIntfPrx(adpts) + adpts.shuffle() + let test3 = try createTestIntfPrx(adpts) + + try test(test1.ice_getConnection() === test2.ice_getConnection()) + try test(test2.ice_getConnection() === test3.ice_getConnection()) + + let adapterName = try test1.getAdapterName() + names.removeAll(where: { $0 == adapterName }) + try test1.ice_getConnection()!.close(.GracefullyWithWait) + } + + // + // Deactivate an adapter and ensure that we can still + // establish the connection to the remaining adapter. + // + try com.deactivateObjectAdapter(adapters[2]) + let obj = try createTestIntfPrx(adapters) + try test(obj.getAdapterNameAsync().wait() == "AdapterAMI12") + + try deactivate(communicator: com, adapters: adapters) + } + output.writeLine("ok") + + output.write("testing random endpoint selection... ") + do { + let adapters = [try com.createObjectAdapter(name: "Adapter21", endpoints: "default")!, + try com.createObjectAdapter(name: "Adapter22", endpoints: "default")!, + try com.createObjectAdapter(name: "Adapter23", endpoints: "default")!] + + var obj = try createTestIntfPrx(adapters) + try test(obj.ice_getEndpointSelection() == .Random) + + var names = ["Adapter21", "Adapter22", "Adapter23"] + while names.count > 0 { + let adapterName = try obj.getAdapterName() + names.removeAll(where: { $0 == adapterName }) + try obj.ice_getConnection()!.close(.GracefullyWithWait) + } + + obj = uncheckedCast(prx: obj.ice_endpointSelection(.Random), type: TestIntfPrx.self) + try test(obj.ice_getEndpointSelection() == .Random) + + names.append("Adapter21") + names.append("Adapter22") + names.append("Adapter23") + + while names.count > 0 { + let adapterName = try obj.getAdapterName() + names.removeAll(where: { $0 == adapterName }) + try obj.ice_getConnection()!.close(.GracefullyWithWait) + } + + try deactivate(communicator: com, adapters: adapters) + } + output.writeLine("ok") + + output.write("testing ordered endpoint selection... ") + do { + var adapters = [try com.createObjectAdapter(name: "Adapter31", endpoints: "default")!, + try com.createObjectAdapter(name: "Adapter32", endpoints: "default")!, + try com.createObjectAdapter(name: "Adapter33", endpoints: "default")!] + + var obj = try createTestIntfPrx(adapters) + obj = uncheckedCast(prx: obj.ice_endpointSelection(.Ordered), type: TestIntfPrx.self) + try test(obj.ice_getEndpointSelection() == .Ordered) + let nRetry = 3 + + // + // Ensure that endpoints are tried in order by deactiving the adapters + // one after the other. + // + var i = 0 + while try i < nRetry && obj.getAdapterName() == "Adapter31" { + i += 1 + } + try test(i == nRetry) + try com.deactivateObjectAdapter(adapters[0]) + + i = 0 + while try i < nRetry && obj.getAdapterName() == "Adapter32" { + i += 1 + } + try test(i == nRetry) + try com.deactivateObjectAdapter(adapters[1]) + + i = 0 + while try i < nRetry && obj.getAdapterName() == "Adapter33" { + i += 1 + } + try test(i == nRetry) + try com.deactivateObjectAdapter(adapters[2]) + + do { + _ = try obj.getAdapterName() + } catch is Ice.ConnectFailedException { + // expected + } catch is Ice.ConnectTimeoutException { + // expected + } + + var endpoints = obj.ice_getEndpoints() + + adapters.removeAll() + + // + // Now, re-activate the adapters with the same endpoints in the opposite + // order. + // + try adapters.append(com.createObjectAdapter(name: "Adapter36", endpoints: endpoints[2].toString())!) + i = 0 + while try i < nRetry && obj.getAdapterName() == "Adapter36" { + i += 1 + } + try test(i == nRetry) + try obj.ice_getConnection()!.close(.GracefullyWithWait) + + try adapters.append(com.createObjectAdapter(name: "Adapter35", endpoints: endpoints[1].toString())!) + i = 0 + while try i < nRetry && obj.getAdapterName() == "Adapter35" { + i += 1 + } + try test(i == nRetry) + try obj.ice_getConnection()!.close(.GracefullyWithWait) + + try adapters.append(com.createObjectAdapter(name: "Adapter34", endpoints: endpoints[0].toString())!) + i = 0 + while try i < nRetry && obj.getAdapterName() == "Adapter34" { + i += 1 + } + try test(i == nRetry) + + try deactivate(communicator: com, adapters: adapters) + } + output.writeLine("ok") + + output.write("testing per request binding with single endpoint... ") + do { + let adapter = try com.createObjectAdapter(name: "Adapter41", endpoints: "default")! + + let test1 = try uncheckedCast(prx: adapter.getTestIntf()!.ice_connectionCached(false), + type: TestIntfPrx.self) + let test2 = try uncheckedCast(prx: adapter.getTestIntf()!.ice_connectionCached(false), + type: TestIntfPrx.self) + try test(!test1.ice_isConnectionCached()) + try test(!test2.ice_isConnectionCached()) + try test(test1.ice_getConnection() != nil && + test2.ice_getConnection() != nil) + try test(test1.ice_getConnection() === test2.ice_getConnection()) + + try test1.ice_ping() + + try com.deactivateObjectAdapter(adapter) + + let test3 = uncheckedCast(prx: test1, type: TestIntfPrx.self) + do { + try test(test3.ice_getConnection() === test1.ice_getConnection()) + try test(false) + } catch is Ice.ConnectFailedException { + // expected + } catch is Ice.ConnectTimeoutException { + // expected + } + } + output.writeLine("ok") + + output.write("testing per request binding with multiple endpoints... ") + do { + var adapters = [try com.createObjectAdapter(name: "Adapter51", endpoints: "default")!, + try com.createObjectAdapter(name: "Adapter52", endpoints: "default")!, + try com.createObjectAdapter(name: "Adapter53", endpoints: "default")!] + + let obj = try uncheckedCast(prx: createTestIntfPrx(adapters).ice_connectionCached(false), + type: TestIntfPrx.self) + try test(!obj.ice_isConnectionCached()) + + var names = ["Adapter51", "Adapter52", "Adapter53"] + while names.count > 0 { + let name = try obj.getAdapterName() + names.removeAll(where: { $0 == name }) + } + + try com.deactivateObjectAdapter(adapters[0]) + + names.append("Adapter52") + names.append("Adapter53") + while names.count > 0 { + let name = try obj.getAdapterName() + names.removeAll(where: { $0 == name }) + } + + try com.deactivateObjectAdapter(adapters[2]) + + try test(obj.getAdapterName() == "Adapter52") + + try deactivate(communicator: com, adapters: adapters) + } + output.writeLine("ok") + + output.write("testing per request binding with multiple endpoints and AMI... ") + do { + var adapters = [try com.createObjectAdapter(name: "AdapterAMI51", endpoints: "default")!, + try com.createObjectAdapter(name: "AdapterAMI52", endpoints: "default")!, + try com.createObjectAdapter(name: "AdapterAMI53", endpoints: "default")!] + + let obj = try uncheckedCast(prx: createTestIntfPrx(adapters).ice_connectionCached(false), + type: TestIntfPrx.self) + try test(!obj.ice_isConnectionCached()) + + var names = ["AdapterAMI51", "AdapterAMI52", "AdapterAMI53"] + while names.count > 0 { + let adapterName = try obj.getAdapterNameAsync().wait() + names.removeAll(where: { adapterName == $0 }) + } + + try com.deactivateObjectAdapter(adapters[0]) + + names.append("AdapterAMI52") + names.append("AdapterAMI53") + while names.count > 0 { + let adapterName = try obj.getAdapterNameAsync().wait() + names.removeAll(where: { adapterName == $0 }) + } + + try com.deactivateObjectAdapter(adapters[2]) + + try test(obj.getAdapterNameAsync().wait() == "AdapterAMI52") + + try deactivate(communicator: com, adapters: adapters) + } + output.writeLine("ok") + + output.write("testing per request binding and ordered endpoint selection... ") + do { + var adapters = [try com.createObjectAdapter(name: "Adapter61", endpoints: "default")!, + try com.createObjectAdapter(name: "Adapter62", endpoints: "default")!, + try com.createObjectAdapter(name: "Adapter63", endpoints: "default")!] + + var obj = try createTestIntfPrx(adapters) + obj = uncheckedCast(prx: obj.ice_endpointSelection(.Ordered), + type: TestIntfPrx.self) + try test(obj.ice_getEndpointSelection() == .Ordered) + obj = uncheckedCast(prx: obj.ice_connectionCached(false), type: TestIntfPrx.self) + try test(!obj.ice_isConnectionCached()) + let nRetry = 3 + var i = 0 + // + // Ensure that endpoints are tried in order by deactiving the adapters + // one after the other. + // + while try i < nRetry && obj.getAdapterName() == "Adapter61" { + i += 1 + } + try test(i == nRetry) + try com.deactivateObjectAdapter(adapters[0]) + + i = 0 + while try i < nRetry && obj.getAdapterName() == "Adapter62" { + i += 1 + } + try test(i == nRetry) + try com.deactivateObjectAdapter(adapters[1]) + + i = 0 + while try i < nRetry && obj.getAdapterName() == "Adapter63" { + i += 1 + } + try test(i == nRetry) + try com.deactivateObjectAdapter(adapters[2]) + + do { + _ = try obj.getAdapterName() + } catch is Ice.ConnectFailedException { + // expected + } catch is Ice.ConnectTimeoutException { + // expected + } + + let endpoints = obj.ice_getEndpoints() + + adapters.removeAll() + + // + // Now, re-activate the adapters with the same endpoints in the opposite + // order. + // + try adapters.append(com.createObjectAdapter(name: "Adapter66", endpoints: endpoints[2].toString())!) + i = 0 + while try i < nRetry && obj.getAdapterName() == "Adapter66" { + i += 1 + } + try test(i == nRetry) + + try adapters.append(com.createObjectAdapter(name: "Adapter65", endpoints: endpoints[1].toString())!) + i = 0 + while try i < nRetry && obj.getAdapterName() == "Adapter65" { + i += 1 + } + try test(i == nRetry) + + try adapters.append(com.createObjectAdapter(name: "Adapter64", endpoints: endpoints[0].toString())!) + i = 0 + while try i < nRetry && obj.getAdapterName() == "Adapter64" { + i += 1 + } + try test(i == nRetry) + + try deactivate(communicator: com, adapters: adapters) + } + output.writeLine("ok") + + output.write("testing per request binding and ordered endpoint selection and AMI... ") + do { + var adapters = [try com.createObjectAdapter(name: "AdapterAMI61", endpoints: "default")!, + try com.createObjectAdapter(name: "AdapterAMI62", endpoints: "default")!, + try com.createObjectAdapter(name: "AdapterAMI63", endpoints: "default")!] + + var obj = try createTestIntfPrx(adapters) + obj = uncheckedCast(prx: obj.ice_endpointSelection(.Ordered), type: TestIntfPrx.self) + try test(obj.ice_getEndpointSelection() == .Ordered) + obj = uncheckedCast(prx: obj.ice_connectionCached(false), type: TestIntfPrx.self) + try test(!obj.ice_isConnectionCached()) + + let nRetry = 3 + var i = 0 + + // + // Ensure that endpoints are tried in order by deactiving the adapters + // one after the other. + // + while try i < nRetry && obj.getAdapterNameAsync().wait() == "AdapterAMI61" { + i += 1 + } + try test(i == nRetry) + try com.deactivateObjectAdapter(adapters[0]) + + while try i < nRetry && obj.getAdapterNameAsync().wait() == "AdapterAMI62" { + i += 1 + } + try test(i == nRetry) + try com.deactivateObjectAdapter(adapters[1]) + + i = 0 + while try i < nRetry && obj.getAdapterNameAsync().wait() == "AdapterAMI63" { + i += 1 + } + try test(i == nRetry) + try com.deactivateObjectAdapter(adapters[2]) + + do { + _ = try obj.getAdapterName() + } catch is Ice.ConnectFailedException { + // expected + } catch is Ice.ConnectTimeoutException { + // expected + } + + let endpoints = obj.ice_getEndpoints() + + adapters.removeAll() + + // + // Now, re-activate the adapters with the same endpoints in the opposite + // order. + // + try adapters.append(com.createObjectAdapter(name: "AdapterAMI66", endpoints: endpoints[2].toString())!) + i = 0 + while try i < nRetry && obj.getAdapterNameAsync().wait() == "AdapterAMI66" { + i += 1 + } + try test(i == nRetry) + + try adapters.append(com.createObjectAdapter(name: "AdapterAMI65", endpoints: endpoints[1].toString())!) + i = 0 + while try i < nRetry && obj.getAdapterNameAsync().wait() == "AdapterAMI65" { + i += 1 + } + try test(i == nRetry) + + try adapters.append(com.createObjectAdapter(name: "AdapterAMI64", endpoints: endpoints[0].toString())!) + i = 0 + while try i < nRetry && obj.getAdapterNameAsync().wait() == "AdapterAMI64" { + i += 1 + } + try test(i == nRetry) + + try deactivate(communicator: com, adapters: adapters) + } + output.writeLine("ok") + + output.write("testing endpoint mode filtering... ") + do { + let adapters = [try com.createObjectAdapter(name: "Adapter71", endpoints: "default")!, + try com.createObjectAdapter(name: "Adapter72", endpoints: "udp")!] + + let obj = try createTestIntfPrx(adapters) + try test(obj.getAdapterName() == "Adapter71") + + let testUDP = uncheckedCast(prx: obj.ice_datagram(), type: TestIntfPrx.self) + try test(obj.ice_getConnection() !== testUDP.ice_getConnection()) + do { + _ = try testUDP.getAdapterName() + } catch is Ice.TwowayOnlyException {} + } + output.writeLine("ok") + + if communicator.getProperties().getProperty("Ice.Plugin.IceSSL") != "" { + output.write("testing unsecure vs. secure endpoints... ") + do { + var adapters = [try com.createObjectAdapter(name: "Adapter81", endpoints: "ssl")!, + try com.createObjectAdapter(name: "Adapter82", endpoints: "tcp")!] + + let obj = try createTestIntfPrx(adapters) + for _ in 0 ..< 5 { + try test(obj.getAdapterName() == "Adapter82") + try obj.ice_getConnection()!.close(.GracefullyWithWait) + } + + var testSecure = uncheckedCast(prx: obj.ice_secure(true), type: TestIntfPrx.self) + try test(testSecure.ice_isSecure()) + testSecure = uncheckedCast(prx: obj.ice_secure(false), type: TestIntfPrx.self) + try test(!testSecure.ice_isSecure()) + testSecure = uncheckedCast(prx: obj.ice_secure(true), type: TestIntfPrx.self) + try test(testSecure.ice_isSecure()) + try test(obj.ice_getConnection() !== testSecure.ice_getConnection()) + + try com.deactivateObjectAdapter(adapters[1]) + + for _ in 0 ..< 5 { + try test(obj.getAdapterName() == "Adapter81") + try obj.ice_getConnection()!.close(.GracefullyWithWait) + } + + // Reactive tcp OA. + _ = try com.createObjectAdapter(name: "Adapter83", endpoints: obj.ice_getEndpoints()[1].toString()) + + for _ in 0 ..< 5 { + try test(obj.getAdapterName() == "Adapter83") + try obj.ice_getConnection()!.close(.GracefullyWithWait) + } + + try com.deactivateObjectAdapter(adapters[0]) + do { + try testSecure.ice_ping() + try test(false) + } catch is Ice.ConnectFailedException { + // expected + } catch is Ice.ConnectTimeoutException { + // expected + } + + try deactivate(communicator: com, adapters: adapters) + } + output.writeLine("ok") + } + + do { + output.write("testing ipv4 & ipv6 connections... ") + + let ipv4 = Ice.createProperties() + ipv4.setProperty(key: "Ice.IPv4", value: "1") + ipv4.setProperty(key: "Ice.IPv6", value: "0") + ipv4.setProperty(key: "Adapter.Endpoints", value: "tcp -h localhost") + + let ipv6 = Ice.createProperties() + ipv6.setProperty(key: "Ice.IPv4", value: "0") + ipv6.setProperty(key: "Ice.IPv6", value: "1") + ipv6.setProperty(key: "Adapter.Endpoints", value: "tcp -h localhost") + + let bothPreferIPv4 = Ice.createProperties() + bothPreferIPv4.setProperty(key: "Ice.IPv4", value: "1") + bothPreferIPv4.setProperty(key: "Ice.IPv6", value: "1") + bothPreferIPv4.setProperty(key: "Ice.PreferIPv6Address", value: "0") + bothPreferIPv4.setProperty(key: "Adapter.Endpoints", value: "tcp -h localhost") + + let bothPreferIPv6 = Ice.createProperties() + bothPreferIPv6.setProperty(key: "Ice.IPv4", value: "1") + bothPreferIPv6.setProperty(key: "Ice.IPv6", value: "1") + bothPreferIPv6.setProperty(key: "Ice.PreferIPv6Address", value: "1") + bothPreferIPv6.setProperty(key: "Adapter.Endpoints", value: "tcp -h localhost") + + let clientProps = [ipv4, ipv6, bothPreferIPv4, bothPreferIPv6] + + let endpoint = "tcp -p \(helper.getTestPort(num: 2))" + + let anyipv4 = ipv4.clone() + anyipv4.setProperty(key: "Adapter.Endpoints", value: endpoint) + anyipv4.setProperty(key: "Adapter.PublishedEndpoints", value: "\(endpoint) -h 127.0.0.1") + + let anyipv6 = ipv6.clone() + anyipv6.setProperty(key: "Adapter.Endpoints", value: endpoint) + anyipv6.setProperty(key: "Adapter.PublishedEndpoints", value: "\(endpoint) -h \".1\"") + + let anyboth = Ice.createProperties() + anyboth.setProperty(key: "Ice.IPv4", value: "1") + anyboth.setProperty(key: "Ice.IPv6", value: "1") + anyboth.setProperty(key: "Adapter.Endpoints", value: endpoint) + anyboth.setProperty(key: "Adapter.PublishedEndpoints", + value: "\(endpoint) -h \"::1\":\(endpoint) -h 127.0.0.1") + + let localipv4 = ipv4.clone() + localipv4.setProperty(key: "Adapter.Endpoints", value: "tcp -h 127.0.0.1") + + let localipv6 = ipv6.clone() + localipv6.setProperty(key: "Adapter.Endpoints", value: "tcp -h \"::1\"") + + let serverProps = [anyipv4, anyipv6, anyboth, localipv4, localipv6] + + var ipv6NotSupported = false + for p in serverProps { + var serverInitData = Ice.InitializationData() + serverInitData.properties = p + let serverCommunicator = try Ice.initialize(serverInitData) + let oa: Ice.ObjectAdapter + do { + oa = try serverCommunicator.createObjectAdapter("Adapter") + try oa.activate() + } catch is Ice.DNSException { + serverCommunicator.destroy() + continue // IP version not supported. + } catch is Ice.SocketException { + if p === ipv6 { + ipv6NotSupported = true + } + serverCommunicator.destroy() + continue // IP version not supported. + } + + var prx = try oa.createProxy(Ice.stringToIdentity("dummy")) + do { + try prx.ice_collocationOptimized(false).ice_ping() + } catch is Ice.LocalException { + serverCommunicator.destroy() + continue // IP version not supported. + } + + let strPrx = prx.ice_toString() + for q in clientProps { + var clientInitData = Ice.InitializationData() + clientInitData.properties = q + let clientCommunicator = try Ice.initialize(clientInitData) + prx = try clientCommunicator.stringToProxy(strPrx)! + do { + try prx.ice_ping() + try test(false) + } catch is Ice.ObjectNotExistException { + // Expected, no object registered. + } catch is Ice.DNSException { + // Expected if no IPv4 or IPv6 address is + // associated to localhost or if trying to connect + // to an any endpoint with the wrong IP version, + // e.g.: resolving an IPv4 address when only IPv6 + // is enabled fails with a DNS exception. + } catch is Ice.SocketException { + try test( + (p === ipv4 && q === ipv6) || (p === ipv6 && q === ipv4) || + (p === bothPreferIPv4 && q === ipv6) || (p === bothPreferIPv6 && q === ipv4) || + (p === bothPreferIPv6 && q === ipv6 && ipv6NotSupported) || + (p === anyipv4 && q === ipv6) || (p === anyipv6 && q === ipv4) || + (p === localipv4 && q === ipv6) || (p === localipv6 && q === ipv4) || + (p === ipv6 && q === bothPreferIPv4) || (p === ipv6 && q === bothPreferIPv6) || + (p === bothPreferIPv6 && q === ipv6)) + } + clientCommunicator.destroy() + } + serverCommunicator.destroy() + } + + output.writeLine("ok") + try com.shutdown() + } +} diff --git a/swift/test/Ice/binding/Client.swift b/swift/test/Ice/binding/Client.swift new file mode 100644 index 00000000000..e28df06a089 --- /dev/null +++ b/swift/test/Ice/binding/Client.swift @@ -0,0 +1,16 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import TestCommon + +class Client: TestHelperI { + public override func run(args: [String]) throws { + let communicator = try initialize(args) + defer { + communicator.destroy() + } + try allTests(self) + } +} diff --git a/swift/test/Ice/binding/Server.swift b/swift/test/Ice/binding/Server.swift new file mode 100644 index 00000000000..54ceb26808b --- /dev/null +++ b/swift/test/Ice/binding/Server.swift @@ -0,0 +1,28 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Dispatch +import Ice +import TestCommon + +class Server: TestHelperI { + public override func run(args: [String]) throws { + let properties = try createTestProperties(args) + properties.setProperty(key: "Ice.ServerIdleTime", value: "30") + + let communicator = try initialize(args) + defer { + communicator.destroy() + } + + communicator.getProperties().setProperty(key: "TestAdapter.Endpoints", + value: getTestEndpoint(num: 0)) + let adapter = try communicator.createObjectAdapter("TestAdapter") + try adapter.add(servant: RemoteCommunicatorDisp(RemoteCommunicatorI(helper: self)), + id: Ice.stringToIdentity("communicator")) + try adapter.activate() + serverReady() + communicator.waitForShutdown() + } +} diff --git a/swift/test/Ice/binding/Test.ice b/swift/test/Ice/binding/Test.ice new file mode 100644 index 00000000000..a93e5cc08d9 --- /dev/null +++ b/swift/test/Ice/binding/Test.ice @@ -0,0 +1,31 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#pragma once + +module Test +{ + +interface TestIntf +{ + string getAdapterName(); +} + +interface RemoteObjectAdapter +{ + TestIntf* getTestIntf(); + + void deactivate(); +} + +interface RemoteCommunicator +{ + RemoteObjectAdapter* createObjectAdapter(string name, string endpoints); + + void deactivateObjectAdapter(RemoteObjectAdapter* adapter); + + void shutdown(); +} + +} diff --git a/swift/test/Ice/binding/TestI.swift b/swift/test/Ice/binding/TestI.swift new file mode 100644 index 00000000000..c05c7f632e8 --- /dev/null +++ b/swift/test/Ice/binding/TestI.swift @@ -0,0 +1,78 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import TestCommon + +class TestI: TestIntf { + func getAdapterName(current: Ice.Current) throws -> String { + return current.adapter!.getName() + } +} + +class RemoteCommunicatorI: RemoteCommunicator { + var _nextPort: Int32 = 10 + var _helper: TestHelper + + init(helper: TestHelper) { + _helper = helper + } + + func createObjectAdapter(name: String, + endpoints endpts: String, + current: Ice.Current) throws -> RemoteObjectAdapterPrx? { + var retry = 5 + while true { + do { + let communicator = current.adapter!.getCommunicator() + var endpoints = endpts + if !endpoints.contains("-p") { + _nextPort += 1 + endpoints = _helper.getTestEndpoint(properties: communicator.getProperties(), num: _nextPort, + prot: endpoints) + } + communicator.getProperties().setProperty(key: "\(name).ThreadPool.Size", value: "1") + let adapter = try communicator.createObjectAdapterWithEndpoints(name: name, endpoints: endpoints) + return try uncheckedCast( + prx: current.adapter!.addWithUUID(RemoteObjectAdapterDisp(RemoteObjectAdapterI(adapter))), + type: RemoteObjectAdapterPrx.self + ) + } catch let ex as Ice.SocketException { + retry -= 1 + if retry == 0 { + throw ex + } + } + } + } + + func deactivateObjectAdapter(adapter: RemoteObjectAdapterPrx?, current _: Ice.Current) throws { + try adapter!.deactivate() // Collocated call. + } + + func shutdown(current: Ice.Current) throws { + current.adapter!.getCommunicator().shutdown() + } +} + +class RemoteObjectAdapterI: RemoteObjectAdapter { + init(_ adapter: Ice.ObjectAdapter) throws { + _adapter = adapter + _testIntf = try uncheckedCast(prx: _adapter.add(servant: TestIntfDisp(TestI()), + id: Ice.stringToIdentity("test")), + type: TestIntfPrx.self) + try _adapter.activate() + } + + func getTestIntf(current _: Ice.Current) throws -> TestIntfPrx? { + return _testIntf + } + + func deactivate(current _: Ice.Current) throws { + _adapter.destroy() + } + + var _adapter: Ice.ObjectAdapter + var _testIntf: TestIntfPrx +} diff --git a/swift/test/Ice/defaultServant/AllTests.swift b/swift/test/Ice/defaultServant/AllTests.swift new file mode 100644 index 00000000000..7ef588056c1 --- /dev/null +++ b/swift/test/Ice/defaultServant/AllTests.swift @@ -0,0 +1,136 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import TestCommon + +final class MyObjectI: ObjectI<MyObjectTraits>, MyObject { + override func ice_ping(current: Ice.Current) throws { + if current.id.name == "ObjectNotExist" { + throw Ice.ObjectNotExistException(id: current.id, facet: "", operation: "ice_ping") + } else if current.id.name == "FacetNotExist" { + throw Ice.FacetNotExistException(id: current.id, facet: "", operation: "ice_ping") + } + } + + func getName(current: Ice.Current) throws -> String { + if current.id.name == "ObjectNotExist" { + throw Ice.ObjectNotExistException(id: current.id, facet: "", operation: "ice_ping") + } else if current.id.name == "FacetNotExist" { + throw Ice.FacetNotExistException(id: current.id, facet: "", operation: "ice_ping") + } + return current.id.name + } +} + +func allTests(_ helper: TestHelper) throws { + func test(_ value: Bool, file: String = #file, line: Int = #line) throws { + try helper.test(value, file: file, line: line) + } + + let communicator = helper.communicator() + let output = helper.getWriter() + + let oa = try communicator.createObjectAdapterWithEndpoints(name: "MyOA", endpoints: "tcp -h localhost") + try oa.activate() + + let servant = MyObjectI() + + // + // Register default servant with category "foo" + // + try oa.addDefaultServant(servant: MyObjectDisp(servant), category: "foo") + + // + // Start test + // + output.write("testing single category... ") + + var r = oa.findDefaultServant("foo") + try test((r as! MyObjectDisp).servant as? MyObjectI === servant) + + r = oa.findDefaultServant("bar") + try test(r == nil) + + var identity = Ice.Identity() + identity.category = "foo" + + let names = ["foo", "bar", "x", "y", "abcdefg"] + + var prx: MyObjectPrx! + for name in names { + identity.name = name + prx = try uncheckedCast(prx: oa.createProxy(identity), type: MyObjectPrx.self) + try prx.ice_ping() + try test(prx.getName() == name) + } + + identity.name = "ObjectNotExist" + prx = try uncheckedCast(prx: oa.createProxy(identity), type: MyObjectPrx.self) + do { + try prx.ice_ping() + try test(false) + } catch is Ice.ObjectNotExistException {} // Expected + + do { + _ = try prx.getName() + try test(false) + } catch is Ice.ObjectNotExistException {} // Expected + + identity.name = "FacetNotExist" + prx = try uncheckedCast(prx: oa.createProxy(identity), type: MyObjectPrx.self) + do { + try prx.ice_ping() + try test(false) + } catch is Ice.FacetNotExistException {} // Expected + + do { + _ = try prx.getName() + try test(false) + } catch is Ice.FacetNotExistException {} // Expected + + identity.category = "bar" + for name in names { + identity.name = name + prx = try uncheckedCast(prx: oa.createProxy(identity), type: MyObjectPrx.self) + + do { + try prx.ice_ping() + try test(false) + } catch is Ice.ObjectNotExistException {} // Expected + + do { + _ = try prx.getName() + try test(false) + } catch is Ice.ObjectNotExistException {} // Expected + } + + _ = try oa.removeDefaultServant("foo") + identity.category = "foo" + prx = try uncheckedCast(prx: oa.createProxy(identity), type: MyObjectPrx.self) + do { + try prx.ice_ping() + try test(false) + } catch is Ice.ObjectNotExistException {} // Expected + + output.writeLine("ok") + + output.write("testing default category... ") + + try oa.addDefaultServant(servant: MyObjectDisp(servant), category: "") + + r = oa.findDefaultServant("bar") + try test(r == nil) + + r = oa.findDefaultServant("") + try test((r as! MyObjectDisp).servant as? MyObjectI === servant) + + for name in names { + identity.name = name + prx = try uncheckedCast(prx: oa.createProxy(identity), type: MyObjectPrx.self) + try prx.ice_ping() + try test(prx.getName() == name) + } + output.writeLine("ok") +} diff --git a/swift/test/Ice/defaultServant/Client.swift b/swift/test/Ice/defaultServant/Client.swift new file mode 100644 index 00000000000..e28df06a089 --- /dev/null +++ b/swift/test/Ice/defaultServant/Client.swift @@ -0,0 +1,16 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import TestCommon + +class Client: TestHelperI { + public override func run(args: [String]) throws { + let communicator = try initialize(args) + defer { + communicator.destroy() + } + try allTests(self) + } +} diff --git a/swift/test/Ice/defaultServant/Test.ice b/swift/test/Ice/defaultServant/Test.ice new file mode 100644 index 00000000000..db13e864bd8 --- /dev/null +++ b/swift/test/Ice/defaultServant/Test.ice @@ -0,0 +1,15 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#pragma once + +module Test +{ + +interface MyObject +{ + string getName(); +} + +} diff --git a/swift/test/Ice/defaultValue/AllTests.swift b/swift/test/Ice/defaultValue/AllTests.swift new file mode 100644 index 00000000000..680106568ce --- /dev/null +++ b/swift/test/Ice/defaultValue/AllTests.swift @@ -0,0 +1,183 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import TestCommon + +func allTests(_ helper: TestHelper) throws { + func test(_ value: Bool, file: String = #file, line: Int = #line) throws { + try helper.test(value, file: file, line: line) + } + let output = helper.getWriter() + + output.write("testing default values... ") + do { + let v = Struct1() + try test(!v.boolFalse) + try test(v.boolTrue) + try test(v.b == 254) + try test(v.s == 16000) + try test(v.i == 3) + try test(v.l == 4) + try test(v.f == Float32(5.1)) + try test(v.d == Double(6.2)) + try test(v.str == "foo \\ \"bar\n \r\n\t\u{000b}\u{000C}\u{0007}\u{0008}? \u{0007} \u{0007}") + try test(v.c1 == Color.red) + try test(v.c2 == Color.green) + try test(v.c3 == Color.blue) + try test(v.nc1 == NestedColor.red) + try test(v.nc2 == NestedColor.green) + try test(v.nc3 == NestedColor.blue) + try test(v.noDefault == "") + try test(v.zeroI == 0) + try test(v.zeroL == 0) + try test(v.zeroF == 0) + try test(v.zeroDotF == 0) + try test(v.zeroD == 0) + try test(v.zeroDotD == 0) + } + + do { + let v = Struct2() + try test(v.boolTrue == ConstBool) + try test(v.b == ConstByte) + try test(v.s == ConstShort) + try test(v.i == ConstInt) + try test(v.l == ConstLong) + try test(v.f == ConstFloat) + try test(v.d == ConstDouble) + try test(v.str == ConstString) + try test(v.c1 == ConstColor1) + try test(v.c2 == ConstColor2) + try test(v.c3 == ConstColor3) + try test(v.nc1 == ConstNestedColor1) + try test(v.nc2 == ConstNestedColor2) + try test(v.nc3 == ConstNestedColor3) + try test(v.zeroI == ConstZeroI) + try test(v.zeroL == ConstZeroL) + try test(v.zeroF == ConstZeroF) + try test(v.zeroDotF == ConstZeroDotF) + try test(v.zeroD == ConstZeroD) + try test(v.zeroDotD == ConstZeroDotD) + } + + do { + let v = Struct3() + try test(!v.boolFalse) + try test(v.boolTrue) + try test(v.b == 1) + try test(v.s == 2) + try test(v.i == 3) + try test(v.l == 4) + try test(v.f == 5.1) + try test(v.d == 6.2) + try test(v.str == "foo \\ \"bar\n \r\n\t\u{000b}\u{000C}\u{0007}\u{0008}? \u{0007} \u{0007}") + try test(v.c1 == Color.red) + try test(v.c2 == Color.green) + try test(v.c3 == Color.blue) + try test(v.nc1 == NestedColor.red) + try test(v.nc2 == NestedColor.green) + try test(v.nc3 == NestedColor.blue) + try test(v.noDefault == "") + try test(v.zeroI == 0) + try test(v.zeroL == 0) + try test(v.zeroF == 0) + try test(v.zeroDotF == 0) + try test(v.zeroD == 0) + try test(v.zeroDotD == 0) + } + + do { + let v = Base() + try test(!v.boolFalse) + try test(v.boolTrue) + try test(v.b == 1) + try test(v.s == 2) + try test(v.i == 3) + try test(v.l == 4) + try test(v.f == 5.1) + try test(v.d == 6.2) + try test(v.str == "foo \\ \"bar\n \r\n\t\u{000b}\u{000C}\u{0007}\u{0008}? \u{0007} \u{0007}") + try test(v.noDefault == "") + try test(v.zeroI == 0) + try test(v.zeroL == 0) + try test(v.zeroF == 0) + try test(v.zeroDotF == 0) + try test(v.zeroD == 0) + try test(v.zeroDotD == 0) + } + + do { + let v = Derived() + try test(!v.boolFalse) + try test(v.boolTrue) + try test(v.b == 1) + try test(v.s == 2) + try test(v.i == 3) + try test(v.l == 4) + try test(v.f == 5.1) + try test(v.d == 6.2) + try test(v.str == "foo \\ \"bar\n \r\n\t\u{000b}\u{000c}\u{0007}\u{0008}? \u{0007} \u{0007}") + try test(v.c1 == Color.red) + try test(v.c2 == Color.green) + try test(v.c3 == Color.blue) + try test(v.nc1 == NestedColor.red) + try test(v.nc2 == NestedColor.green) + try test(v.nc3 == NestedColor.blue) + try test(v.noDefault == "") + try test(v.zeroI == 0) + try test(v.zeroL == 0) + try test(v.zeroF == 0) + try test(v.zeroDotF == 0) + try test(v.zeroD == 0) + try test(v.zeroDotD == 0) + } + + do { + let v = BaseEx() + try test(!v.boolFalse) + try test(v.boolTrue) + try test(v.b == 1) + try test(v.s == 2) + try test(v.i == 3) + try test(v.l == 4) + try test(v.f == 5.1) + try test(v.d == 6.2) + try test(v.str == "foo \\ \"bar\n \r\n\t\u{000b}\u{000c}\u{0007}\u{0008}? \u{0007} \u{0007}") + try test(v.noDefault == "") + try test(v.zeroI == 0) + try test(v.zeroL == 0) + try test(v.zeroF == 0) + try test(v.zeroDotF == 0) + try test(v.zeroD == 0) + try test(v.zeroDotD == 0) + } + + do { + let v = DerivedEx() + try test(!v.boolFalse) + try test(v.boolTrue) + try test(v.b == 1) + try test(v.s == 2) + try test(v.i == 3) + try test(v.l == 4) + try test(v.f == 5.1) + try test(v.d == 6.2) + try test(v.str == "foo \\ \"bar\n \r\n\t\u{000b}\u{000c}\u{0007}\u{0008}? \u{0007} \u{0007}") + try test(v.noDefault == "") + try test(v.c1 == Color.red) + try test(v.c2 == Color.green) + try test(v.c3 == Color.blue) + try test(v.nc1 == NestedColor.red) + try test(v.nc2 == NestedColor.green) + try test(v.nc3 == NestedColor.blue) + try test(v.zeroI == 0) + try test(v.zeroL == 0) + try test(v.zeroF == 0) + try test(v.zeroDotF == 0) + try test(v.zeroD == 0) + try test(v.zeroDotD == 0) + } + output.writeLine("ok") +} diff --git a/swift/test/Ice/defaultValue/Client.swift b/swift/test/Ice/defaultValue/Client.swift new file mode 100644 index 00000000000..85e3f3a5c54 --- /dev/null +++ b/swift/test/Ice/defaultValue/Client.swift @@ -0,0 +1,12 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import TestCommon + +public class Client: TestHelperI { + public override func run(args _: [String]) throws { + try allTests(self) + } +} diff --git a/swift/test/Ice/defaultValue/Test.ice b/swift/test/Ice/defaultValue/Test.ice new file mode 100644 index 00000000000..5b416705d60 --- /dev/null +++ b/swift/test/Ice/defaultValue/Test.ice @@ -0,0 +1,180 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#pragma once + +[["swift:class-resolver-prefix:IceDefaultValue", + "suppress-warning:deprecated"]] // For enumerator references + +module Test +{ + +enum Color { red, green, blue } + +module Nested +{ + +enum Color { red, green, blue } + +} + +struct Struct1 +{ + bool boolFalse = false; + bool boolTrue = true; + byte b = 254; + short s = 16000; + int i = 3; + long l = 4; + float f = 5.1; + double d = 6.2; + string str = "foo \\ \"bar\n \r\n\t\v\f\a\b\? \007 \x07"; + Color c1 = ::Test::Color::red; + Color c2 = Test::green; + Color c3 = blue; + Nested::Color nc1 = Test::Nested::Color::red; + Nested::Color nc2 = Nested::green; + Nested::Color nc3 = blue; + string noDefault; + int zeroI = 0; + long zeroL = 0; + float zeroF = 0; + float zeroDotF = 0.0; + double zeroD = 0; + double zeroDotD = 0; +} + +const bool ConstBool = true; +const byte ConstByte = 254; +const short ConstShort = 16000; +const int ConstInt = 3; +const long ConstLong = 4; +const float ConstFloat = 5.1; +const double ConstDouble = 6.2; +const string ConstString = "foo \\ \"bar\n \r\n\t\v\f\a\b\? \007 \x07"; +const Color ConstColor1 = ::Test::Color::red; +const Color ConstColor2 = Test::green; +const Color ConstColor3 = blue; +const Nested::Color ConstNestedColor1 = Test::Nested::Color::red; +const Nested::Color ConstNestedColor2 = Test::Nested::green; +const Nested::Color ConstNestedColor3 = blue; +const int ConstZeroI = 0; +const long ConstZeroL = 0; +const float ConstZeroF = 0; +const float ConstZeroDotF = 0.0; +const double ConstZeroD = 0; +const double ConstZeroDotD = 0; + +struct Struct2 +{ + bool boolTrue = ConstBool; + byte b = ConstByte; + short s = ConstShort; + int i = ConstInt; + long l = ConstLong; + float f = ConstFloat; + double d = ConstDouble; + string str = ConstString; + Color c1 = ConstColor1; + Color c2 = ConstColor2; + Color c3 = ConstColor3; + Nested::Color nc1 = ConstNestedColor1; + Nested::Color nc2 = ConstNestedColor2; + Nested::Color nc3 = ConstNestedColor3; + int zeroI = ConstZeroI; + long zeroL = ConstZeroL; + float zeroF = ConstZeroF; + float zeroDotF = ConstZeroDotF; + double zeroD = ConstZeroD; + double zeroDotD = ConstZeroDotD; +} + +["cpp:class"] +struct Struct3 +{ + bool boolFalse = false; + bool boolTrue = true; + byte b = 1; + short s = 2; + int i = 3; + long l = 4; + float f = 5.1; + double d = 6.2; + string str = "foo \\ \"bar\n \r\n\t\v\f\a\b\? \007 \x07"; + Color c1 = ::Test::Color::red; + Color c2 = Test::green; + Color c3 = blue; + Nested::Color nc1 = ::Test::Nested::Color::red; + Nested::Color nc2 = Nested::green; + Nested::Color nc3 = blue; + string noDefault; + int zeroI = 0; + long zeroL = 0; + float zeroF = 0; + float zeroDotF = 0.0; + double zeroD = 0; + double zeroDotD = 0; +} + +class Base +{ + bool boolFalse = false; + bool boolTrue = true; + byte b = 1; + short s = 2; + int i = 3; + long l = 4; + float f = 5.1; + double d = 6.2; + string str = "foo \\ \"bar\n \r\n\t\v\f\a\b\? \007 \x07"; + string noDefault; + int zeroI = 0; + long zeroL = 0; + float zeroF = 0; + float zeroDotF = 0.0; + double zeroD = 0; + double zeroDotD = 0; +} + +class Derived extends Base +{ + Color c1 = ::Test::Color::red; + Color c2 = Test::green; + Color c3 = blue; + Nested::Color nc1 = ::Test::Nested::Color::red; + Nested::Color nc2 = Nested::green; + Nested::Color nc3 = blue; +} + +exception BaseEx +{ + bool boolFalse = false; + bool boolTrue = true; + byte b = 1; + short s = 2; + int i = 3; + long l = 4; + float f = 5.1; + double d = 6.2; + string str = "foo \\ \"bar\n \r\n\t\v\f\a\b\? \007 \x07"; + string noDefault; + int zeroI = 0; + long zeroL = 0; + float zeroF = 0; + float zeroDotF = 0.0; + double zeroD = 0; + double zeroDotD = 0; +} + +exception DerivedEx extends BaseEx +{ + Color c1 = ConstColor1; + Color c2 = ConstColor2; + Color c3 = ConstColor3; + Nested::Color nc1 = ConstNestedColor1; + Nested::Color nc2 = ConstNestedColor2; + Nested::Color nc3 = ConstNestedColor3; +} + +} diff --git a/swift/test/Ice/enums/AllTests.swift b/swift/test/Ice/enums/AllTests.swift new file mode 100644 index 00000000000..45575e07ac1 --- /dev/null +++ b/swift/test/Ice/enums/AllTests.swift @@ -0,0 +1,164 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import TestCommon + +func allTests(_ helper: TestHelper) throws -> TestIntfPrx { + func test(_ value: Bool, file: String = #file, line: Int = #line) throws { + try helper.test(value, file: file, line: line) + } + let output = helper.getWriter() + + let communicator = helper.communicator() + let obj = try communicator.stringToProxy("test:\(helper.getTestEndpoint(num: 0))")! + let proxy = uncheckedCast(prx: obj, type: TestIntfPrx.self) + + output.write("testing enum values... ") + + try test(ByteEnum.benum1.rawValue == 0) + try test(ByteEnum.benum2.rawValue == 1) + try test(ByteEnum.benum3.rawValue == ByteConst1) + try test(ByteEnum.benum4.rawValue == ByteConst1 + 1) + try test(ByteEnum.benum5.rawValue == ShortConst1) + try test(ByteEnum.benum6.rawValue == ShortConst1 + 1) + try test(ByteEnum.benum7.rawValue == IntConst1) + try test(ByteEnum.benum8.rawValue == IntConst1 + 1) + try test(ByteEnum.benum9.rawValue == LongConst1) + try test(ByteEnum.benum10.rawValue == LongConst1 + 1) + try test(ByteEnum.benum11.rawValue == ByteConst2) + + try test(ShortEnum.senum1.rawValue == 3) + try test(ShortEnum.senum2.rawValue == 4) + try test(ShortEnum.senum3.rawValue == ByteConst1) + try test(ShortEnum.senum4.rawValue == ByteConst1 + 1) + try test(ShortEnum.senum5.rawValue == ShortConst1) + try test(ShortEnum.senum6.rawValue == ShortConst1 + 1) + try test(ShortEnum.senum7.rawValue == IntConst1) + try test(ShortEnum.senum8.rawValue == IntConst1 + 1) + try test(ShortEnum.senum9.rawValue == LongConst1) + try test(ShortEnum.senum10.rawValue == LongConst1 + 1) + try test(ShortEnum.senum11.rawValue == ShortConst2) + + try test(IntEnum.ienum1.rawValue == 0) + try test(IntEnum.ienum2.rawValue == 1) + try test(IntEnum.ienum3.rawValue == ByteConst1) + try test(IntEnum.ienum4.rawValue == ByteConst1 + 1) + try test(IntEnum.ienum5.rawValue == ShortConst1) + try test(IntEnum.ienum6.rawValue == ShortConst1 + 1) + try test(IntEnum.ienum7.rawValue == IntConst1) + try test(IntEnum.ienum8.rawValue == IntConst1 + 1) + try test(IntEnum.ienum9.rawValue == LongConst1) + try test(IntEnum.ienum10.rawValue == LongConst1 + 1) + try test(IntEnum.ienum11.rawValue == IntConst2) + try test(IntEnum.ienum12.rawValue == LongConst2) + + try test(SimpleEnum.red.rawValue == 0) + try test(SimpleEnum.green.rawValue == 1) + try test(SimpleEnum.blue.rawValue == 2) + + output.writeLine("ok") + + output.write("testing enum streaming... ") + + let encoding_1_0 = communicator.getProperties().getProperty("Ice.Default.EncodingVersion") == "1.0" + + var ostr = Ice.OutputStream(communicator: communicator) + ostr.write(ByteEnum.benum11) + var bytes = ostr.finished() + try test(bytes.count == 1) // ByteEnum should require one byte + + ostr = Ice.OutputStream(communicator: communicator) + ostr.write(ShortEnum.senum11) + bytes = ostr.finished() + try test(bytes.count == (encoding_1_0 ? 2 : 5)) + + ostr = Ice.OutputStream(communicator: communicator) + ostr.write(IntEnum.ienum11) + bytes = ostr.finished() + try test(bytes.count == (encoding_1_0 ? 4 : 5)) + + ostr = Ice.OutputStream(communicator: communicator) + ostr.write(SimpleEnum.blue) + bytes = ostr.finished() + try test(bytes.count == 1) // SimpleEnum should require one byte + + output.writeLine("ok") + + output.write("testing enum operations... ") + + try test(proxy.opByte(ByteEnum.benum1) == (ByteEnum.benum1, ByteEnum.benum1)) + + try test(proxy.opByte(ByteEnum.benum11) == (ByteEnum.benum11, ByteEnum.benum11)) + + try test(proxy.opShort(ShortEnum.senum1) == (ShortEnum.senum1, ShortEnum.senum1)) + try test(proxy.opShort(ShortEnum.senum11) == (ShortEnum.senum11, ShortEnum.senum11)) + + try test(proxy.opInt(IntEnum.ienum1) == (IntEnum.ienum1, IntEnum.ienum1)) + try test(proxy.opInt(IntEnum.ienum11) == (IntEnum.ienum11, IntEnum.ienum11)) + try test(proxy.opInt(IntEnum.ienum12) == (IntEnum.ienum12, IntEnum.ienum12)) + + try test(proxy.opSimple(SimpleEnum.green) == (SimpleEnum.green, SimpleEnum.green)) + + output.writeLine("ok") + + output.write("testing enum sequences operations... ") + + do { + let b1 = [ByteEnum.benum1, + ByteEnum.benum2, + ByteEnum.benum3, + ByteEnum.benum4, + ByteEnum.benum5, + ByteEnum.benum6, + ByteEnum.benum7, + ByteEnum.benum8, + ByteEnum.benum9, + ByteEnum.benum10, + ByteEnum.benum11] + try test(proxy.opByteSeq(b1) == (b1, b1)) + } + + do { + let s1 = [ShortEnum.senum1, + ShortEnum.senum2, + ShortEnum.senum3, + ShortEnum.senum4, + ShortEnum.senum5, + ShortEnum.senum6, + ShortEnum.senum7, + ShortEnum.senum8, + ShortEnum.senum9, + ShortEnum.senum10, + ShortEnum.senum11] + + try test(proxy.opShortSeq(s1) == (s1, s1)) + } + + do { + let i1 = [IntEnum.ienum1, + IntEnum.ienum2, + IntEnum.ienum3, + IntEnum.ienum4, + IntEnum.ienum5, + IntEnum.ienum6, + IntEnum.ienum7, + IntEnum.ienum8, + IntEnum.ienum9, + IntEnum.ienum10, + IntEnum.ienum11] + + try test(proxy.opIntSeq(i1) == (i1, i1)) + } + + do { + let s1 = [SimpleEnum.red, + SimpleEnum.green, + SimpleEnum.blue] + try test(proxy.opSimpleSeq(s1) == (s1, s1)) + } + + output.writeLine("ok") + return proxy +} diff --git a/swift/test/Ice/enums/Client.swift b/swift/test/Ice/enums/Client.swift new file mode 100644 index 00000000000..0ed3358d87a --- /dev/null +++ b/swift/test/Ice/enums/Client.swift @@ -0,0 +1,17 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import TestCommon + +public class Client: TestHelperI { + public override func run(args: [String]) throws { + let communicator = try initialize(args) + defer { + communicator.destroy() + } + let p = try allTests(self) + try p.shutdown() + } +} diff --git a/swift/test/Ice/enums/Server.swift b/swift/test/Ice/enums/Server.swift new file mode 100644 index 00000000000..d442c5739d1 --- /dev/null +++ b/swift/test/Ice/enums/Server.swift @@ -0,0 +1,23 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Dispatch +import Ice +import TestCommon + +class Server: TestHelperI { + public override func run(args: [String]) throws { + let communicator = try initialize(args) + defer { + communicator.destroy() + } + + communicator.getProperties().setProperty(key: "TestAdapter.Endpoints", value: getTestEndpoint(num: 0)) + let adapter = try communicator.createObjectAdapter("TestAdapter") + try adapter.add(servant: TestIntfDisp(TestI()), id: Ice.stringToIdentity("test")) + try adapter.activate() + serverReady() + communicator.waitForShutdown() + } +} diff --git a/swift/test/Ice/enums/Test.ice b/swift/test/Ice/enums/Test.ice new file mode 100644 index 00000000000..6ef00930842 --- /dev/null +++ b/swift/test/Ice/enums/Test.ice @@ -0,0 +1,92 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#pragma once + +module Test +{ + +const byte ByteConst1 = 10; +const short ShortConst1 = 20; +const int IntConst1 = 30; +const long LongConst1 = 40; + +const byte ByteConst2 = 126; +const short ShortConst2 = 32766; +const int IntConst2 = 2147483647; +const long LongConst2 = 2147483646; + +enum ByteEnum +{ + benum1, + benum2, + benum3 = ByteConst1, + benum4, + benum5 = ShortConst1, + benum6, + benum7 = IntConst1, + benum8, + benum9 = LongConst1, + benum10, + benum11 = ByteConst2 +} +sequence<ByteEnum> ByteEnumSeq; + +enum ShortEnum +{ + senum1 = 3, + senum2, + senum3 = ByteConst1, + senum4, + senum5 = ShortConst1, + senum6, + senum7 = IntConst1, + senum8, + senum9 = LongConst1, + senum10, + senum11 = ShortConst2 +} +sequence<ShortEnum> ShortEnumSeq; + +enum IntEnum +{ + ienum1, + ienum2, + ienum3 = ByteConst1, + ienum4, + ienum5 = ShortConst1, + ienum6, + ienum7 = IntConst1, + ienum8, + ienum9 = LongConst1, + ienum10, + ienum11 = IntConst2, + ienum12 = LongConst2 +} +sequence<IntEnum> IntEnumSeq; + +enum SimpleEnum +{ + red, + green, + blue +} +sequence<SimpleEnum> SimpleEnumSeq; + +interface TestIntf +{ + ByteEnum opByte(ByteEnum b1, out ByteEnum b2); + ShortEnum opShort(ShortEnum s1, out ShortEnum s2); + IntEnum opInt(IntEnum i1, out IntEnum i2); + SimpleEnum opSimple(SimpleEnum s1, out SimpleEnum s2); + + ByteEnumSeq opByteSeq(ByteEnumSeq b1, out ByteEnumSeq b2); + ShortEnumSeq opShortSeq(ShortEnumSeq s1, out ShortEnumSeq s2); + IntEnumSeq opIntSeq(IntEnumSeq i1, out IntEnumSeq i2); + SimpleEnumSeq opSimpleSeq(SimpleEnumSeq s1, out SimpleEnumSeq s2); + + void shutdown(); +} + +} diff --git a/swift/test/Ice/enums/TestI.swift b/swift/test/Ice/enums/TestI.swift new file mode 100644 index 00000000000..148c229f4bf --- /dev/null +++ b/swift/test/Ice/enums/TestI.swift @@ -0,0 +1,43 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice + +class TestI: TestIntf { + func opByte(b1: ByteEnum, current _: Ice.Current) throws -> (returnValue: ByteEnum, b2: ByteEnum) { + return (b1, b1) + } + + func opShort(s1: ShortEnum, current _: Ice.Current) throws -> (returnValue: ShortEnum, s2: ShortEnum) { + return (s1, s1) + } + + func opInt(i1: IntEnum, current _: Ice.Current) throws -> (returnValue: IntEnum, i2: IntEnum) { + return (i1, i1) + } + + func opSimple(s1: SimpleEnum, current _: Ice.Current) throws -> (returnValue: SimpleEnum, s2: SimpleEnum) { + return (s1, s1) + } + + func opByteSeq(b1: [ByteEnum], current _: Ice.Current) throws -> (returnValue: [ByteEnum], b2: [ByteEnum]) { + return (b1, b1) + } + + func opShortSeq(s1: [ShortEnum], current _: Ice.Current) throws -> (returnValue: [ShortEnum], s2: [ShortEnum]) { + return (s1, s1) + } + + func opIntSeq(i1: [IntEnum], current _: Ice.Current) throws -> (returnValue: [IntEnum], i2: [IntEnum]) { + return (i1, i1) + } + + func opSimpleSeq(s1: [SimpleEnum], current _: Ice.Current) throws -> (returnValue: [SimpleEnum], s2: [SimpleEnum]) { + return (s1, s1) + } + + func shutdown(current: Ice.Current) throws { + current.adapter!.getCommunicator().shutdown() + } +} diff --git a/swift/test/Ice/exceptions/AllTests.swift b/swift/test/Ice/exceptions/AllTests.swift new file mode 100644 index 00000000000..43541c6957d --- /dev/null +++ b/swift/test/Ice/exceptions/AllTests.swift @@ -0,0 +1,825 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import PromiseKit +import TestCommon + +class ServantLocatorI: Ice.ServantLocator { + func locate(_: Current) throws -> (returnValue: Disp?, cookie: AnyObject?) { + return (nil, nil) + } + + func finished(curr _: Current, servant _: Disp, cookie _: AnyObject?) throws {} + + func deactivate(_: String) {} +} + +func allTests(_ helper: TestHelper) throws -> ThrowerPrx { + func test(_ value: Bool, file: String = #file, line: Int = #line) throws { + try helper.test(value, file: file, line: line) + } + let output = helper.getWriter() + + let communicator = helper.communicator() + + output.write("testing object adapter registration exceptions... ") + do { + _ = try communicator.createObjectAdapter("TestAdapter0") + } catch is Ice.InitializationException {} + + communicator.getProperties().setProperty(key: "TestAdapter0.Endpoints", value: "tcp -h *") + let first = try communicator.createObjectAdapter("TestAdapter0") + do { + _ = try communicator.createObjectAdapter("TestAdapter0") + try test(false) + } catch is Ice.AlreadyRegisteredException {} + + do { + _ = try communicator.createObjectAdapterWithEndpoints(name: "TestAdapter0", endpoints: "ssl -h foo -p 12011") + try test(false) + } catch is Ice.AlreadyRegisteredException {} + first.deactivate() + output.writeLine("ok") + + output.write("testing servant registration exceptions... ") + communicator.getProperties().setProperty(key: "TestAdapter1.Endpoints", value: "tcp -h *") + var adapter = try communicator.createObjectAdapter("TestAdapter1") + let obj = EmptyI() + _ = try adapter.add(servant: EmptyDisp(obj), id: Ice.stringToIdentity("x")) + do { + _ = try adapter.add(servant: EmptyDisp(obj), id: Ice.stringToIdentity("x")) + try test(false) + } catch is Ice.AlreadyRegisteredException {} + + _ = try adapter.remove(Ice.stringToIdentity("x")) + do { + _ = try adapter.remove(Ice.stringToIdentity("x")) + try test(false) + } catch is Ice.NotRegisteredException {} + adapter.deactivate() + output.writeLine("ok") + + output.write("testing servant locator registration exceptions... ") + communicator.getProperties().setProperty(key: "TestAdapter2.Endpoints", value: "tcp -h *") + adapter = try communicator.createObjectAdapter("TestAdapter2") + try adapter.addServantLocator(locator: ServantLocatorI(), category: "x") + do { + try adapter.addServantLocator(locator: ServantLocatorI(), category: "x") + try test(false) + } catch is Ice.AlreadyRegisteredException {} + + // adapter.deactivate() + output.writeLine("ok") + + output.write("testing object factory registration exception... ") + try communicator.getValueFactoryManager().add(factory: { _ in nil }, id: "::x") + do { + try communicator.getValueFactoryManager().add(factory: { _ in nil }, id: "::x") + try test(false) + } catch is Ice.AlreadyRegisteredException {} + output.writeLine("ok") + + output.write("testing stringToProxy... ") + let ref = "thrower:\(helper.getTestEndpoint(num: 0))" + let base = try communicator.stringToProxy(ref)! + output.writeLine("ok") + + output.write("testing checked cast... ") + let thrower = try checkedCast(prx: base, type: ThrowerPrx.self)! + try test(thrower == base) + output.writeLine("ok") + + output.write("catching exact types... ") + do { + try thrower.throwAasA(1) + try test(false) + } catch let ex as A { + try test(ex.aMem == 1) + } catch { + output.writeLine("\(error)") + try test(false) + } + + do { + try thrower.throwAorDasAorD(1) + try test(false) + } catch let ex as A { + try test(ex.aMem == 1) + } catch { + try test(false) + } + + do { + try thrower.throwAorDasAorD(-1) + try test(false) + } catch let ex as D { + try test(ex.dMem == -1) + } catch { + try test(false) + } + + do { + try thrower.throwBasB(a: 1, b: 2) + try test(false) + } catch let ex as B { + try test(ex.aMem == 1) + try test(ex.bMem == 2) + } catch { + try test(false) + } + + do { + try thrower.throwCasC(a: 1, b: 2, c: 3) + try test(false) + } catch let ex as C { + try test(ex.aMem == 1) + try test(ex.bMem == 2) + try test(ex.cMem == 3) + } catch { + try test(false) + } + output.writeLine("ok") + + output.write("catching base types... ") + do { + try thrower.throwBasB(a: 1, b: 2) + try test(false) + } catch let ex as A { + try test(ex.aMem == 1) + } catch { + try test(false) + } + + do { + try thrower.throwCasC(a: 1, b: 2, c: 3) + try test(false) + } catch let ex as B { + try test(ex.aMem == 1) + try test(ex.bMem == 2) + } catch { + try test(false) + } + output.writeLine("ok") + + output.write("catching derived types... ") + do { + try thrower.throwBasA(a: 1, b: 2) + try test(false) + } catch let ex as B { + try test(ex.aMem == 1) + try test(ex.bMem == 2) + } catch { + try test(false) + } + + do { + try thrower.throwCasA(a: 1, b: 2, c: 3) + try test(false) + } catch let ex as C { + try test(ex.aMem == 1) + try test(ex.bMem == 2) + try test(ex.cMem == 3) + } catch { + try test(false) + } + + do { + try thrower.throwCasB(a: 1, b: 2, c: 3) + try test(false) + } catch let ex as C { + try test(ex.aMem == 1) + try test(ex.bMem == 2) + try test(ex.cMem == 3) + } catch { + try test(false) + } + output.writeLine("ok") + + let supportsUndeclaredExceptions = try thrower.supportsUndeclaredExceptions() + if supportsUndeclaredExceptions { + output.write("catching unknown user exception... ") + + do { + try thrower.throwUndeclaredA(1) + try test(false) + } catch is Ice.UnknownUserException {} catch { + try test(false) + } + + do { + try thrower.throwUndeclaredB(a: 1, b: 2) + try test(false) + } catch is Ice.UnknownUserException {} catch { + try test(false) + } + + do { + try thrower.throwUndeclaredC(a: 1, b: 2, c: 3) + try test(false) + } catch is Ice.UnknownUserException {} catch { + try test(false) + } + output.writeLine("ok") + } + + let conn = try thrower.ice_getConnection() + if conn != nil { + output.write("testing memory limit marshal exception...") + do { + _ = try thrower.throwMemoryLimitException(ByteSeq()) + try test(false) + } catch is Ice.MemoryLimitException {} catch { + try test(false) + } + + do { + _ = try thrower.throwMemoryLimitException(ByteSeq(repeating: 0, count: 20 * 1024)) // 20KB + try test(false) + } catch is Ice.ConnectionLostException {} catch is Ice.UnknownLocalException { + // Expected with JS bidir server + } catch { + try test(false) + } + + do { + var str = "thrower:\(helper.getTestEndpoint(num: 1))" + let thrower2 = try uncheckedCast(prx: communicator.stringToProxy(str)!, type: ThrowerPrx.self) + do { + // 2MB(no limits) + _ = try thrower2.throwMemoryLimitException(ByteSeq(repeating: 0, count: 2 * 1024 * 1024)) + } catch is Ice.MemoryLimitException {} + str = "thrower:\(helper.getTestEndpoint(num: 2))" + let thrower3 = try uncheckedCast(prx: communicator.stringToProxy(str)!, type: ThrowerPrx.self) + do { + _ = try thrower3.throwMemoryLimitException(ByteSeq(repeating: 0, count: 1024)) // 1KB limit + try test(false) + } catch is Ice.ConnectionLostException {} + } catch is Ice.ConnectionRefusedException { + // Expected with JS bidir server + } + output.writeLine("ok") + } + + output.write("catching object not exist exception... ") + do { + let id = try Ice.stringToIdentity("does not exist") + do { + let thrower2 = uncheckedCast(prx: thrower.ice_identity(id), type: ThrowerPrx.self) + try thrower2.ice_ping() + try test(false) + } catch let ex as Ice.ObjectNotExistException { + try test(ex.id == id) + } catch { + try test(false) + } + } + output.writeLine("ok") + + output.write("catching facet not exist exception... ") + do { + let thrower2 = uncheckedCast(prx: thrower, type: ThrowerPrx.self, facet: "no such facet") + do { + try thrower2.ice_ping() + try test(false) + } catch let ex as Ice.FacetNotExistException { + try test(ex.facet == "no such facet") + } + } catch { + try test(false) + } + output.writeLine("ok") + + output.write("catching operation not exist exception... ") + do { + let thrower2 = uncheckedCast(prx: thrower, type: WrongOperationPrx.self) + try thrower2.noSuchOperation() + try test(false) + } catch let ex as Ice.OperationNotExistException { + try test(ex.operation == "noSuchOperation") + } catch { + try test(false) + } + output.writeLine("ok") + + output.write("catching unknown local exception... ") + do { + try thrower.throwLocalException() + try test(false) + } catch is Ice.UnknownLocalException {} catch { + try test(false) + } + + do { + try thrower.throwLocalExceptionIdempotent() + try test(false) + } catch is Ice.UnknownLocalException {} catch is Ice.OperationNotExistException {} catch { + try test(false) + } + output.writeLine("ok") + + output.write("catching unknown non-Ice exception... ") + do { + try thrower.throwNonIceException() + try test(false) + } catch is Ice.UnknownException {} catch { + try test(false) + } + output.writeLine("ok") + + output.write("testing asynchronous exceptions... ") + do { + try thrower.throwAfterResponse() + } catch { + try test(false) + } + + do { + try thrower.throwAfterException() + try test(false) + } catch is A {} catch { + try test(false) + } + output.writeLine("ok") + + output.write("catching exact types with AMI mapping... ") + try Promise<Void> { seal in + firstly { + thrower.throwAasAAsync(1) + }.map { + try test(false) + }.catch { e in + do { + if let exc = e as? A { + try test(exc.aMem == 1) + } else { + try test(false) + } + seal.fulfill(()) + } catch { + seal.reject(error) + } + } + }.wait() + + for i in [1, -1] { + try Promise<Void> { seal in + firstly { + thrower.throwAorDasAorDAsync(Int32(i)) + }.map { + try test(false) + }.catch { e in + do { + if let ex = e as? A { + try test(ex.aMem == 1) + } else if let ex = e as? D { + try test(ex.dMem == -1) + } else { + try test(false) + } + seal.fulfill(()) + } catch { + seal.reject(error) + } + } + }.wait() + } + + try Promise<Void> { seal in + firstly { + thrower.throwBasBAsync(a: 1, b: 2) + }.map { + try test(false) + }.catch { e in + do { + if let ex = e as? B { + try test(ex.aMem == 1) + try test(ex.bMem == 2) + } else { + try test(false) + } + seal.fulfill(()) + } catch { + seal.reject(error) + } + } + }.wait() + + try Promise<Void> { seal in + firstly { + thrower.throwCasCAsync(a: 1, b: 2, c: 3) + }.map { + try test(false) + }.catch { e in + do { + if let ex = e as? C { + try test(ex.aMem == 1) + try test(ex.bMem == 2) + try test(ex.cMem == 3) + } else { + try test(false) + } + seal.fulfill(()) + } catch { + seal.reject(error) + } + } + }.wait() + + output.writeLine("ok") + + output.write("catching derived types with new AMI mapping... ") + try Promise<Void> { seal in + firstly { + thrower.throwBasAAsync(a: 1, b: 2) + }.done { + try test(false) + }.catch { e in + do { + if let ex = e as? B { + try test(ex.aMem == 1) + try test(ex.bMem == 2) + } else { + try test(false) + } + seal.fulfill(()) + } catch { + seal.reject(error) + } + } + }.wait() + + try Promise<Void> { seal in + firstly { + thrower.throwCasAAsync(a: 1, b: 2, c: 3) + }.done { + try test(false) + }.catch { e in + do { + if let ex = e as? C { + try test(ex.aMem == 1) + try test(ex.bMem == 2) + try test(ex.cMem == 3) + } else { + try test(false) + } + seal.fulfill(()) + } catch { + seal.reject(error) + } + } + }.wait() + + try Promise<Void> { seal in + firstly { + thrower.throwCasBAsync(a: 1, b: 2, c: 3) + }.done { + try test(false) + }.catch { e in + do { + if let ex = e as? C { + try test(ex.aMem == 1) + try test(ex.bMem == 2) + try test(ex.cMem == 3) + } else { + try test(false) + } + seal.fulfill(()) + } catch { + seal.reject(error) + } + } + }.wait() + output.writeLine("ok") + + if supportsUndeclaredExceptions { + output.write("catching unknown user exception with new AMI mapping... ") + + try Promise<Void> { seal in + firstly { + thrower.throwUndeclaredAAsync(1) + }.done { + try test(false) + }.catch { e in + if e is Ice.UnknownUserException { + seal.fulfill(()) + } else { + seal.reject(e) + } + } + }.wait() + + try Promise<Void> { seal in + firstly { + thrower.throwUndeclaredBAsync(a: 1, b: 2) + }.done { + try test(false) + }.catch { e in + if e is Ice.UnknownUserException { + seal.fulfill(()) + } else { + seal.reject(e) + } + } + }.wait() + + try Promise<Void> { seal in + firstly { + thrower.throwUndeclaredCAsync(a: 1, b: 2, c: 3) + }.done { + try test(false) + }.catch { e in + if e is Ice.UnknownUserException { + seal.fulfill(()) + } else { + seal.reject(e) + } + } + }.wait() + + output.writeLine("ok") + } + + output.write("catching object not exist exception with new AMI mapping... ") + try Promise<Void> { seal in + let id = try Ice.stringToIdentity("does not exist") + let thrower2 = uncheckedCast(prx: thrower.ice_identity(id), type: ThrowerPrx.self) + firstly { + thrower2.throwAasAAsync(1) + }.done { + try test(false) + }.catch { e in + do { + if let ex = e as? Ice.ObjectNotExistException { + try test(ex.id == id) + } else { + try test(false) + } + seal.fulfill(()) + } catch { + seal.reject(error) + } + } + }.wait() + output.writeLine("ok") + + output.write("catching facet not exist exception with new AMI mapping... ") + try Promise<Void> { seal in + let thrower2 = uncheckedCast(prx: thrower, type: ThrowerPrx.self, facet: "no such facet") + firstly { + thrower2.throwAasAAsync(1) + }.done { + try test(false) + }.catch { e in + do { + if let ex = e as? Ice.FacetNotExistException { + try test(ex.facet == "no such facet") + } else { + try test(false) + } + seal.fulfill(()) + } catch { + seal.reject(error) + } + } + }.wait() + output.writeLine("ok") + + output.write("catching operation not exist exception with new AMI mapping... ") + try Promise<Void> { seal in + let thrower4 = uncheckedCast(prx: thrower, type: WrongOperationPrx.self) + firstly { + thrower4.noSuchOperationAsync() + }.done { + try test(false) + }.catch { e in + do { + if let ex = e as? Ice.OperationNotExistException { + try test(ex.operation == "noSuchOperation") + } else { + try test(false) + } + seal.fulfill(()) + } catch { + seal.reject(error) + } + } + }.wait() + output.writeLine("ok") + + output.write("catching unknown local exception with new AMI mapping... ") + try Promise<Void> { seal in + firstly { + thrower.throwLocalExceptionAsync() + }.done { + try test(false) + }.catch { e in + do { + try test(e is Ice.UnknownLocalException || e is Ice.OperationNotExistException) + seal.fulfill(()) + } catch { + seal.reject(error) + } + } + }.wait() + + try Promise<Void> { seal in + firstly { + thrower.throwLocalExceptionIdempotentAsync() + }.done { + try test(false) + }.catch { e in + do { + try test(e is Ice.UnknownLocalException || e is Ice.OperationNotExistException) + seal.fulfill(()) + } catch { + seal.reject(error) + } + } + }.wait() + output.writeLine("ok") + + output.write("catching unknown non-Ice exception with new AMI mapping... ") + try Promise<Void> { seal in + firstly { + thrower.throwNonIceExceptionAsync() + }.done { + try test(false) + }.catch { e in + do { + try test(e is Ice.UnknownException) + seal.fulfill(()) + } catch { + seal.reject(error) + } + } + }.wait() + output.writeLine("ok") + + if supportsUndeclaredExceptions { + output.write("catching unknown user exception with new AMI mapping... ") + try Promise<Void> { seal in + firstly { + thrower.throwUndeclaredAAsync(1) + }.done { + try test(false) + }.catch { e in + do { + try test(e is Ice.UnknownUserException) + seal.fulfill(()) + } catch { + seal.reject(error) + } + } + }.wait() + + try Promise<Void> { seal in + firstly { + thrower.throwUndeclaredBAsync(a: 1, b: 2) + }.done { + try test(false) + }.catch { e in + do { + try test(e is Ice.UnknownUserException) + seal.fulfill(()) + } catch { + seal.reject(error) + } + } + }.wait() + + try Promise<Void> { seal in + firstly { + thrower.throwUndeclaredCAsync(a: 1, b: 2, c: 3) + }.done { + try test(false) + }.catch { e in + do { + try test(e is Ice.UnknownUserException) + seal.fulfill(()) + } catch { + seal.reject(error) + } + } + }.wait() + } + output.writeLine("ok") + + output.write("catching object not exist exception with new AMI mapping... ") + try Promise<Void> { seal in + let id = try Ice.stringToIdentity("does not exist") + let thrower2 = uncheckedCast(prx: thrower.ice_identity(id), type: ThrowerPrx.self) + firstly { + thrower2.throwAasAAsync(1) + }.done { + try test(false) + }.catch { e in + do { + if let ex = e as? Ice.ObjectNotExistException { + try test(ex.id == id) + } else { + try test(false) + } + seal.fulfill(()) + } catch { + seal.reject(error) + } + } + }.wait() + output.writeLine("ok") + + output.write("catching facet not exist exception with new AMI mapping... ") + try Promise<Void> { seal in + let thrower2 = uncheckedCast(prx: thrower, type: ThrowerPrx.self, facet: "no such facet") + firstly { + thrower2.throwAasAAsync(1) + }.done { + try test(false) + }.catch { e in + do { + if let ex = e as? Ice.FacetNotExistException { + try test(ex.facet == "no such facet") + } else { + try test(false) + } + seal.fulfill(()) + } catch { + seal.reject(error) + } + } + }.wait() + output.writeLine("ok") + + output.write("catching operation not exist exception with new AMI mapping... ") + try Promise<Void> { seal in + let thrower4 = uncheckedCast(prx: thrower, type: WrongOperationPrx.self) + firstly { + thrower4.noSuchOperationAsync() + }.done { + try test(false) + }.catch { e in + do { + if let ex = e as? Ice.OperationNotExistException { + try test(ex.operation == "noSuchOperation") + } else { + try test(false) + } + seal.fulfill(()) + } catch { + seal.reject(error) + } + } + }.wait() + output.writeLine("ok") + + output.write("catching unknown local exception with new AMI mapping... ") + try Promise<Void> { seal in + firstly { + thrower.throwLocalExceptionAsync() + }.done { + try test(false) + }.catch { e in + do { + try test(e is Ice.UnknownLocalException || e is Ice.OperationNotExistException) + seal.fulfill(()) + } catch { + seal.reject(error) + } + } + }.wait() + + try Promise<Void> { seal in + firstly { + thrower.throwLocalExceptionIdempotentAsync() + }.done { + try test(false) + }.catch { e in + do { + try test(e is Ice.UnknownLocalException || e is Ice.OperationNotExistException) + seal.fulfill(()) + } catch { + seal.reject(error) + } + } + }.wait() + output.writeLine("ok") + + output.write("catching unknown non-Ice exception with new AMI mapping... ") + try Promise<Void> { seal in + firstly { + thrower.throwNonIceExceptionAsync() + }.done { + try test(false) + }.catch { e in + do { + try test(e is Ice.UnknownException) + seal.fulfill(()) + } catch { + seal.reject(error) + } + } + }.wait() + output.writeLine("ok") + return thrower +} diff --git a/swift/test/Ice/exceptions/Client.swift b/swift/test/Ice/exceptions/Client.swift new file mode 100644 index 00000000000..c03d8601f5d --- /dev/null +++ b/swift/test/Ice/exceptions/Client.swift @@ -0,0 +1,25 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import PromiseKit +import TestCommon + +public class Client: TestHelperI { + public override func run(args: [String]) throws { + let properties = try createTestProperties(args) + properties.setProperty(key: "Ice.Warn.Connections", value: "0") + properties.setProperty(key: "Ice.MessageSizeMax", value: "10") // 10KB max + var initData = Ice.InitializationData() + initData.properties = properties + initData.classResolverPrefix = ["IceExceptions"] + let communicator = try initialize(initData) + communicator.getProperties().setProperty(key: "TestAdapter.Endpoints", value: getTestEndpoint(num: 0)) + defer { + communicator.destroy() + } + let thrower = try allTests(self) + try thrower.shutdown() + } +} diff --git a/swift/test/Ice/exceptions/Collocated.swift b/swift/test/Ice/exceptions/Collocated.swift new file mode 100644 index 00000000000..38b484f412f --- /dev/null +++ b/swift/test/Ice/exceptions/Collocated.swift @@ -0,0 +1,39 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import TestCommon + +class Collocated: TestHelperI { + public override func run(args: [String]) throws { + let properties = try createTestProperties(args) + properties.setProperty(key: "Ice.Warn.Dispatch", value: "0") + properties.setProperty(key: "Ice.Warn.Connections", value: "0") + properties.setProperty(key: "Ice.MessageSizeMax", value: "10") // 10KB max + + var initData = Ice.InitializationData() + initData.properties = properties + initData.classResolverPrefix = ["IceExceptions"] + + let communicator = try initialize(initData) + defer { + communicator.destroy() + } + + communicator.getProperties().setProperty(key: "TestAdapter.Endpoints", value: getTestEndpoint(num: 0)) + communicator.getProperties().setProperty(key: "TestAdapter2.Endpoints", value: getTestEndpoint(num: 1)) + communicator.getProperties().setProperty(key: "TestAdapter2.MessageSizeMax", value: "0") + communicator.getProperties().setProperty(key: "TestAdapter3.Endpoints", value: getTestEndpoint(num: 2)) + communicator.getProperties().setProperty(key: "TestAdapter3.MessageSizeMax", value: "1") + + let adapter = try communicator.createObjectAdapter("TestAdapter") + + let obj = ThrowerI() + try adapter.add(servant: ThrowerDisp(obj), id: Ice.stringToIdentity("thrower")) + + try adapter.activate() + + _ = try allTests(self) + } +} diff --git a/swift/test/Ice/exceptions/Server.swift b/swift/test/Ice/exceptions/Server.swift new file mode 100644 index 00000000000..efa9686d7cc --- /dev/null +++ b/swift/test/Ice/exceptions/Server.swift @@ -0,0 +1,60 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import TestCommon + +extension G { + var _GDescription: String { + return ":\nG: \(data)" + } +} + +extension H { + var _HDescription: String { + return ":\nH: \(data)" + } +} + +class EmptyI: Empty {} + +class Server: TestHelperI { + public override func run(args: [String]) throws { + let properties = try createTestProperties(args) + properties.setProperty(key: "Ice.Warn.Dispatch", value: "0") + properties.setProperty(key: "Ice.Warn.Connections", value: "0") + properties.setProperty(key: "Ice.MessageSizeMax", value: "10") // 10KB max + + var initData = Ice.InitializationData() + initData.properties = properties + initData.classResolverPrefix = ["IceExceptions"] + + let communicator = try initialize(initData) + defer { + communicator.destroy() + } + + communicator.getProperties().setProperty(key: "TestAdapter.Endpoints", value: getTestEndpoint(num: 0)) + communicator.getProperties().setProperty(key: "TestAdapter2.Endpoints", value: getTestEndpoint(num: 1)) + communicator.getProperties().setProperty(key: "TestAdapter2.MessageSizeMax", value: "0") + communicator.getProperties().setProperty(key: "TestAdapter3.Endpoints", value: getTestEndpoint(num: 2)) + communicator.getProperties().setProperty(key: "TestAdapter3.MessageSizeMax", value: "1") + + let adapter = try communicator.createObjectAdapter("TestAdapter") + let adapter2 = try communicator.createObjectAdapter("TestAdapter2") + let adapter3 = try communicator.createObjectAdapter("TestAdapter3") + + let obj = ThrowerI() + try adapter.add(servant: ThrowerDisp(obj), id: Ice.stringToIdentity("thrower")) + try adapter2.add(servant: ThrowerDisp(obj), id: Ice.stringToIdentity("thrower")) + try adapter3.add(servant: ThrowerDisp(obj), id: Ice.stringToIdentity("thrower")) + + try adapter.activate() + try adapter2.activate() + try adapter3.activate() + + serverReady() + communicator.waitForShutdown() + } +} diff --git a/swift/test/Ice/exceptions/ServerAMD.swift b/swift/test/Ice/exceptions/ServerAMD.swift new file mode 100644 index 00000000000..5a5f6ad5ad6 --- /dev/null +++ b/swift/test/Ice/exceptions/ServerAMD.swift @@ -0,0 +1,60 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import TestCommon + +extension G { + var _GDescription: String { + return ":\nG: \(data)" + } +} + +extension H { + var _HDescription: String { + return ":\nH: \(data)" + } +} + +class EmptyI: Empty {} + +class ServerAMD: TestHelperI { + public override func run(args: [String]) throws { + let properties = try createTestProperties(args) + properties.setProperty(key: "Ice.Warn.Dispatch", value: "0") + properties.setProperty(key: "Ice.Warn.Connections", value: "0") + properties.setProperty(key: "Ice.MessageSizeMax", value: "10") // 10KB max + + var initData = Ice.InitializationData() + initData.properties = properties + initData.classResolverPrefix = ["IceExceptionsAMD"] + + let communicator = try initialize(initData) + defer { + communicator.destroy() + } + + communicator.getProperties().setProperty(key: "TestAdapter.Endpoints", value: getTestEndpoint(num: 0)) + communicator.getProperties().setProperty(key: "TestAdapter2.Endpoints", value: getTestEndpoint(num: 1)) + communicator.getProperties().setProperty(key: "TestAdapter2.MessageSizeMax", value: "0") + communicator.getProperties().setProperty(key: "TestAdapter3.Endpoints", value: getTestEndpoint(num: 2)) + communicator.getProperties().setProperty(key: "TestAdapter3.MessageSizeMax", value: "1") + + let adapter = try communicator.createObjectAdapter("TestAdapter") + let adapter2 = try communicator.createObjectAdapter("TestAdapter2") + let adapter3 = try communicator.createObjectAdapter("TestAdapter3") + + let obj = ThrowerI() + try adapter.add(servant: ThrowerDisp(obj), id: Ice.stringToIdentity("thrower")) + try adapter2.add(servant: ThrowerDisp(obj), id: Ice.stringToIdentity("thrower")) + try adapter3.add(servant: ThrowerDisp(obj), id: Ice.stringToIdentity("thrower")) + + try adapter.activate() + try adapter2.activate() + try adapter3.activate() + + serverReady() + communicator.waitForShutdown() + } +} diff --git a/swift/test/Ice/exceptions/Test.ice b/swift/test/Ice/exceptions/Test.ice new file mode 100644 index 00000000000..fa260856eed --- /dev/null +++ b/swift/test/Ice/exceptions/Test.ice @@ -0,0 +1,105 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#pragma once + +#include <Ice/BuiltinSequences.ice> + +[["swift:class-resolver-prefix:IceExceptions"]] + +module Test +{ + +interface Empty +{ +} + +interface Thrower; + +exception A +{ + int aMem; +} + +exception B extends A +{ + int bMem; +} + +exception C extends B +{ + int cMem; +} + +exception D +{ + int dMem; +} + +exception E +{ + string data; +} + +["cpp:ice_print"] +exception F +{ + string data; +} + +local exception G +{ + string data; +} + +["cpp:ice_print"] +local exception H +{ + string data; +} + +module Mod +{ + exception A extends ::Test::A + { + int a2Mem; + } +} + +interface Thrower +{ + void shutdown(); + bool supportsUndeclaredExceptions(); + bool supportsAssertException(); + + void throwAasA(int a) throws A; + void throwAorDasAorD(int a) throws A, D; + void throwBasA(int a, int b) throws A; + void throwCasA(int a, int b, int c) throws A; + void throwBasB(int a, int b) throws B; + void throwCasB(int a, int b, int c) throws B; + void throwCasC(int a, int b, int c) throws C; + + void throwModA(int a, int a2) throws Mod::A; + + void throwUndeclaredA(int a); + void throwUndeclaredB(int a, int b); + void throwUndeclaredC(int a, int b, int c); + void throwLocalException(); + void throwNonIceException(); + void throwAssertException(); + Ice::ByteSeq throwMemoryLimitException(Ice::ByteSeq seq); + + idempotent void throwLocalExceptionIdempotent(); + + void throwAfterResponse(); + void throwAfterException() throws A; +} + +interface WrongOperation +{ + void noSuchOperation(); +} + +} diff --git a/swift/test/Ice/exceptions/TestAMD.ice b/swift/test/Ice/exceptions/TestAMD.ice new file mode 100644 index 00000000000..cd6be26e32e --- /dev/null +++ b/swift/test/Ice/exceptions/TestAMD.ice @@ -0,0 +1,110 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#pragma once + +#include <Ice/BuiltinSequences.ice> + +[["swift:class-resolver-prefix:IceExceptionsAMD"]] + +module Test +{ + +interface Empty +{ +} + +interface Thrower; + +exception A +{ + int aMem; +} + +exception B extends A +{ + int bMem; +} + +exception C extends B +{ + int cMem; +} + +exception D +{ + int dMem; +} + +exception E +{ + string data; +} + +["cpp:ice_print"] +exception F +{ + string data; +} + +local exception G +{ + string data; +} + +["cpp:ice_print"] +local exception H +{ + string data; +} + +module Mod +{ + exception A extends ::Test::A + { + int a2Mem; + } +} + +["amd"] interface Thrower +{ + void shutdown(); + bool supportsUndeclaredExceptions(); + bool supportsAssertException(); + + void throwAasA(int a) throws A; + void throwAorDasAorD(int a) throws A, D; + void throwBasA(int a, int b) throws A; + void throwCasA(int a, int b, int c) throws A; + void throwBasB(int a, int b) throws B; + void throwCasB(int a, int b, int c) throws B; + void throwCasC(int a, int b, int c) throws C; + + void throwModA(int a, int a2) throws Mod::A; + + void throwUndeclaredA(int a); + void throwUndeclaredB(int a, int b); + void throwUndeclaredC(int a, int b, int c); + void throwLocalException(); + void throwNonIceException(); + void throwAssertException(); + Ice::ByteSeq throwMemoryLimitException(Ice::ByteSeq seq); + + idempotent void throwLocalExceptionIdempotent(); + + void throwAfterResponse(); + void throwAfterException() throws A; + + void throwE() throws E; + void throwF() throws F; + void throwG(); + void throwH(); +} + +["amd"] interface WrongOperation +{ + void noSuchOperation(); +} + +} diff --git a/swift/test/Ice/exceptions/TestAMDI.swift b/swift/test/Ice/exceptions/TestAMDI.swift new file mode 100644 index 00000000000..63e55dd08d6 --- /dev/null +++ b/swift/test/Ice/exceptions/TestAMDI.swift @@ -0,0 +1,163 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import PromiseKit +import TestCommon + +class RuntimeError: Error {} + +class ThrowerI: Thrower { + func shutdownAsync(current: Current) -> Promise<Void> { + return Promise<Void> { seal in + current.adapter!.getCommunicator().shutdown() + seal.fulfill(()) + } + } + + func supportsUndeclaredExceptionsAsync(current _: Current) -> Promise<Bool> { + return Promise.value(true) + } + + func supportsAssertExceptionAsync(current _: Current) -> Promise<Bool> { + return Promise.value(false) + } + + func throwAasAAsync(a: Int32, current _: Current) -> Promise<Void> { + return Promise<Void> { seal in + seal.reject(A(aMem: a)) + } + } + + func throwAorDasAorDAsync(a: Int32, current _: Current) -> Promise<Void> { + return Promise<Void> { seal in + if a > 0 { + seal.reject(A(aMem: a)) + } else { + seal.reject(D(dMem: a)) + } + } + } + + func throwBasAAsync(a: Int32, b: Int32, current _: Current) -> Promise<Void> { + return Promise<Void> { seal in + seal.reject(B(aMem: a, bMem: b)) + } + } + + func throwCasAAsync(a: Int32, b: Int32, c: Int32, current _: Current) -> Promise<Void> { + return Promise<Void> { seal in + seal.reject(C(aMem: a, bMem: b, cMem: c)) + } + } + + func throwBasBAsync(a: Int32, b: Int32, current _: Current) -> Promise<Void> { + return Promise<Void> { seal in + seal.reject(B(aMem: a, bMem: b)) + } + } + + func throwCasBAsync(a: Int32, b: Int32, c: Int32, current _: Current) -> Promise<Void> { + return Promise<Void> { seal in + seal.reject(C(aMem: a, bMem: b, cMem: c)) + } + } + + func throwCasCAsync(a: Int32, b: Int32, c: Int32, current _: Current) -> Promise<Void> { + return Promise<Void> { seal in + seal.reject(C(aMem: a, bMem: b, cMem: c)) + } + } + + func throwModAAsync(a: Int32, a2: Int32, current _: Current) -> Promise<Void> { + return Promise<Void> { seal in + seal.reject(ModA(aMem: a, a2Mem: a2)) + } + } + + func throwUndeclaredAAsync(a: Int32, current _: Current) -> Promise<Void> { + return Promise<Void> { seal in + seal.reject(A(aMem: a)) + } + } + + func throwUndeclaredBAsync(a: Int32, b: Int32, current _: Current) -> Promise<Void> { + return Promise<Void> { seal in + seal.reject(B(aMem: a, bMem: b)) + } + } + + func throwUndeclaredCAsync(a: Int32, b: Int32, c: Int32, current _: Current) -> Promise<Void> { + return Promise<Void> { seal in + seal.reject(C(aMem: a, bMem: b, cMem: c)) + } + } + + func throwLocalExceptionAsync(current _: Current) -> Promise<Void> { + return Promise<Void> { seal in + seal.reject(Ice.TimeoutException()) + } + } + + func throwNonIceExceptionAsync(current _: Current) -> Promise<Void> { + return Promise<Void> { seal in + seal.reject(RuntimeError()) + } + } + + func throwAssertExceptionAsync(current _: Current) -> Promise<Void> { + return Promise.value(()) + } + + func throwMemoryLimitExceptionAsync(seq _: ByteSeq, current _: Current) -> Promise<ByteSeq> { + return Promise<ByteSeq> { seal in + // 20KB is over the configured 10KB message size max. + seal.fulfill(ByteSeq(repeating: 0, count: 1024 * 20)) + } + } + + func throwLocalExceptionIdempotentAsync(current _: Current) -> Promise<Void> { + return Promise { seal in + seal.reject(Ice.TimeoutException()) + } + } + + func throwAfterResponseAsync(current _: Current) -> Promise<Void> { + return Promise { seal in + seal.fulfill(()) + throw Ice.RuntimeError("") + } + } + + func throwAfterExceptionAsync(current _: Current) -> Promise<Void> { + return Promise { seal in + seal.reject(A(aMem: 12345)) + throw Ice.RuntimeError("") + } + } + + func throwEAsync(current _: Current) -> Promise<Void> { + return Promise<Void> { seal in + seal.reject(E(data: "E")) + } + } + + func throwFAsync(current _: Current) -> Promise<Void> { + return Promise<Void> { seal in + seal.reject(F(data: "F")) + } + } + + func throwGAsync(current _: Current) -> Promise<Void> { + return Promise<Void> { seal in + seal.reject(G(data: "G")) + } + } + + func throwHAsync(current _: Current) -> Promise<Void> { + return Promise<Void> { seal in + seal.reject(H(data: "H")) + } + } +} diff --git a/swift/test/Ice/exceptions/TestI.swift b/swift/test/Ice/exceptions/TestI.swift new file mode 100644 index 00000000000..08235a48e6a --- /dev/null +++ b/swift/test/Ice/exceptions/TestI.swift @@ -0,0 +1,104 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import TestCommon + +class RuntimeError: Error {} + +class ThrowerI: Thrower { + func shutdown(current: Ice.Current) throws { + current.adapter!.getCommunicator().shutdown() + } + + func supportsUndeclaredExceptions(current _: Current) throws -> Bool { + return true + } + + func supportsAssertException(current _: Current) throws -> Bool { + return false + } + + func throwAasA(a: Int32, current _: Ice.Current) throws { + throw A(aMem: a) + } + + func throwAorDasAorD(a: Int32, current _: Ice.Current) throws { + if a > 0 { + throw A(aMem: a) + } else { + throw D(dMem: a) + } + } + + func throwBasA(a: Int32, b: Int32, current: Ice.Current) throws { + try throwBasB(a: a, b: b, current: current) + } + + func throwBasB(a: Int32, b: Int32, current _: Ice.Current) throws { + let ex = B() + ex.aMem = a + ex.bMem = b + throw ex + } + + func throwCasA(a: Int32, b: Int32, c: Int32, current: Ice.Current) throws { + try throwCasC(a: a, b: b, c: c, current: current) + } + + func throwCasB(a: Int32, b: Int32, c: Int32, current: Ice.Current) throws { + try throwCasC(a: a, b: b, c: c, current: current) + } + + func throwCasC(a: Int32, b: Int32, c: Int32, current _: Ice.Current) throws { + throw C(aMem: a, bMem: b, cMem: c) + } + + func throwModA(a _: Int32, a2 _: Int32, current _: Current) throws { + throw ModA(aMem: 1, a2Mem: 1) + } + + func throwLocalException(current _: Ice.Current) throws { + throw Ice.TimeoutException() + } + + func throwNonIceException(current _: Ice.Current) throws { + throw RuntimeError() + } + + func throwAssertException(current _: Ice.Current) throws {} + + func throwMemoryLimitException(seq _: ByteSeq, current _: Ice.Current) throws -> ByteSeq { + return ByteSeq(repeating: 0, count: 1024 * 20) // 20KB is over the configured 10KB message size max. + } + + func throwLocalExceptionIdempotent(current _: Ice.Current) throws { + throw Ice.TimeoutException() + } + + func throwUndeclaredA(a: Int32, current _: Ice.Current) throws { + throw A(aMem: a) + } + + func throwUndeclaredB(a: Int32, b: Int32, current _: Ice.Current) throws { + throw B(aMem: a, bMem: b) + } + + func throwUndeclaredC(a: Int32, b: Int32, c: Int32, current _: Ice.Current) throws { + throw C(aMem: a, bMem: b, cMem: c) + } + + func throwAfterResponse(current _: Ice.Current) throws { + // + // Only relevant for AMD. + // + } + + func throwAfterException(current _: Ice.Current) throws { + // + // Only relevant for AMD. + // + throw A() + } +} diff --git a/swift/test/Ice/facets/AllTests.swift b/swift/test/Ice/facets/AllTests.swift new file mode 100644 index 00000000000..2d80d5ccc8d --- /dev/null +++ b/swift/test/Ice/facets/AllTests.swift @@ -0,0 +1,160 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import PromiseKit +import TestCommon + +class EmptyI: Empty {} + +func allTests(_ helper: TestHelper) throws -> GPrx { + func test(_ value: Bool, file: String = #file, line: Int = #line) throws { + try helper.test(value, file: file, line: line) + } + let output = helper.getWriter() + + let communicator = helper.communicator() + + output.write("testing Ice.Admin.Facets property... ") + try test(communicator.getProperties().getPropertyAsList("Ice.Admin.Facets").count == 0) + communicator.getProperties().setProperty(key: "Ice.Admin.Facets", value: "foobar") + var facetFilter = communicator.getProperties().getPropertyAsList("Ice.Admin.Facets") + try test(facetFilter == ["foobar"]) + communicator.getProperties().setProperty(key: "Ice.Admin.Facets", value: "foo\\'bar") + facetFilter = communicator.getProperties().getPropertyAsList("Ice.Admin.Facets") + try test(facetFilter == ["foo'bar"]) + communicator.getProperties().setProperty(key: "Ice.Admin.Facets", value: "'foo bar' toto 'titi'") + facetFilter = communicator.getProperties().getPropertyAsList("Ice.Admin.Facets") + try test(facetFilter == ["foo bar", "toto", "titi"]) + communicator.getProperties().setProperty(key: "Ice.Admin.Facets", value: "'foo bar\\' toto' 'titi'") + facetFilter = communicator.getProperties().getPropertyAsList("Ice.Admin.Facets") + try test(facetFilter == ["foo bar' toto", "titi"]) + // communicator.getProperties().setProperty("Ice.Admin.Facets", "'foo bar' 'toto titi"); + // facetFilter = communicator.getProperties().getPropertyAsList("Ice.Admin.Facets"); + // test(facetFilter.Length == 0); + communicator.getProperties().setProperty(key: "Ice.Admin.Facets", value: "") + output.writeLine("ok") + + output.write("testing facet registration exceptions... ") + communicator.getProperties().setProperty(key: "FacetExceptionTestAdapter.Endpoints", value: "tcp -h *") + let adapter = try communicator.createObjectAdapter("FacetExceptionTestAdapter") + let obj = EmptyI() + _ = try adapter.add(servant: EmptyDisp(obj), id: Ice.stringToIdentity("d")) + _ = try adapter.addFacet(servant: EmptyDisp(obj), id: Ice.stringToIdentity("d"), facet: "facetABCD") + do { + _ = try adapter.addFacet(servant: EmptyDisp(obj), id: Ice.stringToIdentity("d"), facet: "facetABCD") + try test(false) + } catch is Ice.AlreadyRegisteredException {} + + _ = try adapter.removeFacet(id: Ice.stringToIdentity("d"), facet: "facetABCD") + do { + _ = try adapter.removeFacet(id: Ice.stringToIdentity("d"), facet: "facetABCD") + try test(false) + } catch is Ice.NotRegisteredException {} + output.writeLine("ok") + + output.write("testing removeAllFacets... ") + let obj1 = EmptyI() + let obj2 = EmptyI() + _ = try adapter.addFacet(servant: EmptyDisp(obj1), id: Ice.stringToIdentity("id1"), facet: "f1") + _ = try adapter.addFacet(servant: EmptyDisp(obj2), id: Ice.stringToIdentity("id1"), facet: "f2") + let obj3 = EmptyI() + _ = try adapter.addFacet(servant: EmptyDisp(obj1), id: Ice.stringToIdentity("id2"), facet: "f1") + _ = try adapter.addFacet(servant: EmptyDisp(obj2), id: Ice.stringToIdentity("id2"), facet: "f2") + _ = try adapter.addFacet(servant: EmptyDisp(obj3), id: Ice.stringToIdentity("id2"), facet: "") + var fm = try adapter.removeAllFacets(Ice.stringToIdentity("id1")) + try test(fm.count == 2) + try test((fm["f1"] as! EmptyDisp).servant as? EmptyI === obj1) + try test((fm["f2"] as! EmptyDisp).servant as? EmptyI === obj2) + do { + _ = try adapter.removeAllFacets(Ice.stringToIdentity("id1")) + try test(false) + } catch is Ice.NotRegisteredException {} + fm = try adapter.removeAllFacets(Ice.stringToIdentity("id2")) + try test(fm.count == 3) + try test((fm["f1"] as! EmptyDisp).servant as? EmptyI === obj1) + try test((fm["f2"] as! EmptyDisp).servant as? EmptyI === obj2) + try test((fm[""] as! EmptyDisp).servant as? EmptyI === obj3) + output.writeLine("ok") + + adapter.deactivate() + + output.write("testing stringToProxy... ") + + let db = try communicator.stringToProxy("d:\(helper.getTestEndpoint(num: 0))")! + output.writeLine("ok") + + output.write("testing unchecked cast... ") + var prx = uncheckedCast(prx: db, type: ObjectPrx.self) + try test(prx.ice_getFacet() == "") + prx = uncheckedCast(prx: db, type: ObjectPrx.self, facet: "facetABCD") + try test(prx.ice_getFacet() == "facetABCD") + var prx2 = uncheckedCast(prx: prx, type: ObjectPrx.self) + try test(prx2.ice_getFacet() == "facetABCD") + var prx3 = uncheckedCast(prx: prx, type: ObjectPrx.self, facet: "") + try test(prx3.ice_getFacet() == "") + var d = uncheckedCast(prx: db, type: DPrx.self) + try test(d.ice_getFacet() == "") + var df = uncheckedCast(prx: db, type: DPrx.self, facet: "facetABCD") + try test(df.ice_getFacet() == "facetABCD") + var df2 = uncheckedCast(prx: df, type: DPrx.self) + try test(df2.ice_getFacet() == "facetABCD") + var df3 = uncheckedCast(prx: df, type: DPrx.self, facet: "") + try test(df3.ice_getFacet() == "") + output.writeLine("ok") + + output.write("testing checked cast... ") + prx = try checkedCast(prx: db, type: ObjectPrx.self)! + try test(prx.ice_getFacet() == "") + prx = try checkedCast(prx: db, type: ObjectPrx.self, facet: "facetABCD")! + try test(prx.ice_getFacet() == "facetABCD") + prx2 = try checkedCast(prx: prx, type: ObjectPrx.self)! + try test(prx2.ice_getFacet() == "facetABCD") + prx3 = try checkedCast(prx: prx, type: ObjectPrx.self, facet: "")! + try test(prx3.ice_getFacet() == "") + d = try checkedCast(prx: db, type: DPrx.self)! + try test(d.ice_getFacet() == "") + df = try checkedCast(prx: db, type: DPrx.self, facet: "facetABCD")! + try test(df.ice_getFacet() == "facetABCD") + df2 = try checkedCast(prx: df, type: DPrx.self)! + try test(df2.ice_getFacet() == "facetABCD") + df3 = try checkedCast(prx: df, type: DPrx.self, facet: "")! + try test(df3.ice_getFacet() == "") + output.writeLine("ok") + + output.write("testing non-facets A, B, C, and D... ") + d = try checkedCast(prx: db, type: DPrx.self)! + try test(d == db) + try test(d.callA() == "A") + try test(d.callB() == "B") + try test(d.callC() == "C") + try test(d.callD() == "D") + output.writeLine("ok") + + output.write("testing facets A, B, C, and D... ") + df = try checkedCast(prx: d, type: DPrx.self, facet: "facetABCD")! + try test(df.callA() == "A") + try test(df.callB() == "B") + try test(df.callC() == "C") + try test(df.callD() == "D") + output.writeLine("ok") + + output.write("testing facets E and F... ") + let ff = try checkedCast(prx: d, type: FPrx.self, facet: "facetEF")! + try test(ff.callE() == "E") + try test(ff.callF() == "F") + output.writeLine("ok") + + output.write("testing facet G... ") + let gf = try checkedCast(prx: ff, type: GPrx.self, facet: "facetGH")! + try test(gf.callG() == "G") + output.writeLine("ok") + + output.write("testing whether casting preserves the facet... ") + let hf = try checkedCast(prx: gf, type: HPrx.self)! + try test(hf.callG() == "G") + try test(hf.callH() == "H") + output.writeLine("ok") + return gf +} diff --git a/swift/test/Ice/facets/Client.swift b/swift/test/Ice/facets/Client.swift new file mode 100644 index 00000000000..6f64f7dcfff --- /dev/null +++ b/swift/test/Ice/facets/Client.swift @@ -0,0 +1,24 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import PromiseKit +import TestCommon + +public class Client: TestHelperI { + public override func run(args: [String]) throws { + let properties = try createTestProperties(args) + properties.setProperty(key: "Ice.Warn.Connections", value: "0") + properties.setProperty(key: "Ice.MessageSizeMax", value: "10") // 10KB max + var initData = Ice.InitializationData() + initData.properties = properties + let communicator = try initialize(initData) + communicator.getProperties().setProperty(key: "TestAdapter.Endpoints", value: getTestEndpoint(num: 0)) + defer { + communicator.destroy() + } + let g = try allTests(self) + try g.shutdown() + } +} diff --git a/swift/test/Ice/facets/Collocated.swift b/swift/test/Ice/facets/Collocated.swift new file mode 100644 index 00000000000..c8fc27f35b7 --- /dev/null +++ b/swift/test/Ice/facets/Collocated.swift @@ -0,0 +1,33 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import TestCommon + +class Collocated: TestHelperI { + public override func run(args: [String]) throws { + let communicator = try initialize(args) + defer { + communicator.destroy() + } + + communicator.getProperties().setProperty(key: "TestAdapter.Endpoints", value: getTestEndpoint(num: 0)) + + let adapter = try communicator.createObjectAdapter("TestAdapter") + + let d = DI() + try adapter.add(servant: DDisp(d), id: Ice.stringToIdentity("d")) + try adapter.addFacet(servant: DDisp(d), id: Ice.stringToIdentity("d"), facet: "facetABCD") + + let f = FI() + try adapter.addFacet(servant: FDisp(f), id: Ice.stringToIdentity("d"), facet: "facetEF") + + let h = HI(communicator: communicator) + try adapter.addFacet(servant: HDisp(h), id: Ice.stringToIdentity("d"), facet: "facetGH") + + try adapter.activate() + + _ = try allTests(self) + } +} diff --git a/swift/test/Ice/facets/Server.swift b/swift/test/Ice/facets/Server.swift new file mode 100644 index 00000000000..a9e6ec22225 --- /dev/null +++ b/swift/test/Ice/facets/Server.swift @@ -0,0 +1,34 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import TestCommon + +class Server: TestHelperI { + public override func run(args: [String]) throws { + let communicator = try initialize(args) + defer { + communicator.destroy() + } + + communicator.getProperties().setProperty(key: "TestAdapter.Endpoints", value: getTestEndpoint(num: 0)) + + let adapter = try communicator.createObjectAdapter("TestAdapter") + + let d = DI() + try adapter.add(servant: DDisp(d), id: Ice.stringToIdentity("d")) + try adapter.addFacet(servant: DDisp(d), id: Ice.stringToIdentity("d"), facet: "facetABCD") + + let f = FI() + try adapter.addFacet(servant: FDisp(f), id: Ice.stringToIdentity("d"), facet: "facetEF") + + let h = HI(communicator: communicator) + try adapter.addFacet(servant: HDisp(h), id: Ice.stringToIdentity("d"), facet: "facetGH") + + try adapter.activate() + + serverReady() + communicator.waitForShutdown() + } +} diff --git a/swift/test/Ice/facets/Test.ice b/swift/test/Ice/facets/Test.ice new file mode 100644 index 00000000000..3c5da35dd6c --- /dev/null +++ b/swift/test/Ice/facets/Test.ice @@ -0,0 +1,55 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#pragma once + +module Test +{ + +interface Empty +{ +} + +interface A +{ + string callA(); +} + +interface B extends A +{ + string callB(); +} + +interface C extends A +{ + string callC(); +} + +interface D extends B, C +{ + string callD(); +} + +interface E +{ + string callE(); +} + +interface F extends E +{ + string callF(); +} + +interface G +{ + void shutdown(); + string callG(); +} + +interface H extends G +{ + string callH(); +} + +} diff --git a/swift/test/Ice/facets/TestI.swift b/swift/test/Ice/facets/TestI.swift new file mode 100644 index 00000000000..907db71d082 --- /dev/null +++ b/swift/test/Ice/facets/TestI.swift @@ -0,0 +1,101 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice + +class AI: A { + func callA(current _: Ice.Current) throws -> String { + return "A" + } +} + +class BI: B { + func callA(current _: Ice.Current) throws -> String { + return "A" + } + + func callB(current _: Ice.Current) throws -> String { + return "B" + } +} + +class CI: C { + func callA(current _: Ice.Current) throws -> String { + return "A" + } + + func callC(current _: Ice.Current) throws -> String { + return "C" + } +} + +class DI: D { + func callA(current _: Ice.Current) throws -> String { + return "A" + } + + func callB(current _: Ice.Current) throws -> String { + return "B" + } + + func callC(current _: Ice.Current) throws -> String { + return "C" + } + + func callD(current _: Ice.Current) throws -> String { + return "D" + } +} + +class EI: E { + func callE(current _: Ice.Current) throws -> String { + return "E" + } +} + +class FI: F { + func callE(current _: Ice.Current) throws -> String { + return "E" + } + + func callF(current _: Ice.Current) throws -> String { + return "F" + } +} + +class GI: G { + var _communicator: Ice.Communicator + + public init(communicator: Ice.Communicator) { + _communicator = communicator + } + + func callG(current _: Ice.Current) throws -> String { + return "G" + } + + func shutdown(current _: Ice.Current) throws { + _communicator.shutdown() + } +} + +class HI: H { + let _communicator: Ice.Communicator + + init(communicator: Ice.Communicator) { + _communicator = communicator + } + + func callG(current _: Ice.Current) throws -> String { + return "G" + } + + func callH(current _: Ice.Current) throws -> String { + return "H" + } + + func shutdown(current _: Ice.Current) throws { + _communicator.shutdown() + } +} diff --git a/swift/test/Ice/hold/AllTests.swift b/swift/test/Ice/hold/AllTests.swift new file mode 100644 index 00000000000..a937dd7dc67 --- /dev/null +++ b/swift/test/Ice/hold/AllTests.swift @@ -0,0 +1,186 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Foundation +import Ice +import PromiseKit +import TestCommon + +class Condition { + var _lock = os_unfair_lock() + var _value: Bool + + init(value: Bool) { + _value = value + } + + func set(value: Bool) { + withLock(&_lock) { + self._value = value + } + } + + func value() -> Bool { + return withLock(&_lock) { + self._value + } + } +} + +func allTests(_ helper: TestHelper) throws { + func test(_ value: Bool, file: String = #file, line: Int = #line) throws { + try helper.test(value, file: file, line: line) + } + let output = helper.getWriter() + + let communicator = helper.communicator() + + output.write("testing stringToProxy... ") + let base = try communicator.stringToProxy("hold:\(helper.getTestEndpoint(num: 0))")! + let baseSerialized = try communicator.stringToProxy("hold:\(helper.getTestEndpoint(num: 1))")! + output.writeLine("ok") + + output.write("testing checked cast... ") + let hold = try checkedCast(prx: base, type: HoldPrx.self)! + let holdOneway = uncheckedCast(prx: base.ice_oneway(), type: HoldPrx.self) + try test(hold == base) + let holdSerialized = try checkedCast(prx: baseSerialized, type: HoldPrx.self)! + let holdSerializedOneway = uncheckedCast(prx: baseSerialized.ice_oneway(), type: HoldPrx.self) + try test(holdSerialized == baseSerialized) + output.writeLine("ok") + + output.write("changing state between active and hold rapidly... ") + for _ in 0 ..< 100 { + try hold.putOnHold(0) + } + + for _ in 0 ..< 100 { + try holdOneway.putOnHold(0) + } + + for _ in 0 ..< 100 { + try holdSerialized.putOnHold(0) + } + + for _ in 0 ..< 100 { + try holdSerializedOneway.putOnHold(0) + } + output.writeLine("ok") + + output.write("testing without serialize mode... ") + do { + let cond = Condition(value: true) + var value: Int32 = 0 + + var completed: Promise<Int32>! + var sent: Promise<Bool>! + while cond.value() { + let expected = value + sent = Promise<Bool> { seal in + completed = hold.setAsync(value: value + 1, + delay: Int32.random(in: 0 ..< 5)) { + seal.fulfill($0) + } + } + + _ = completed!.done { (v: Int32) throws -> Void in + if v != expected { + cond.set(value: false) + } + } + + value += 1 + if value % 100 == 0 { + _ = try sent.wait() + } + + if value > 100_000 { + // Don't continue, it's possible that out-of-order dispatch doesn't occur + // after 100000 iterations and we don't want the test to last for too long + // when this occurs. + break + } + } + try test(value > 100_000 || !cond.value()) + _ = try sent.wait() + } + output.writeLine("ok") + + output.write("testing with serialize mode... ") + do { + let cond = Condition(value: true) + var value: Int32 = 0 + + var completed: Promise<Int32>? + while value < 3000, cond.value() { + let expected = value + let sent = Promise<Bool> { seal in + completed = holdSerialized.setAsync(value: value + 1, delay: 0) { + seal.fulfill($0) + } + } + + _ = completed!.done { (v: Int32) throws -> Void in + if v != expected { + cond.set(value: false) + } + } + value += 1 + if value % 100 == 0 { + _ = try sent.wait() + } + } + _ = try completed!.wait() + try test(cond.value()) + + for i in 0 ..< 10000 { + try holdSerializedOneway.setOneway(value: value + 1, expected: value) + value += 1 + if i % 100 == 0 { + try holdSerializedOneway.putOnHold(1) + } + } + } + output.writeLine("ok") + + output.write("testing serialization... ") + do { + var value: Int32 = 0 + _ = try holdSerialized.set(value: value, delay: 0) + var completed: Promise<Void>! + for i in 0 ..< 10000 { + // Create a new proxy for each request + completed = holdSerialized.ice_oneway().setOnewayAsync(value: value + 1, expected: value) + value += 1 + if (i % 100) == 0 { + try completed.wait() + try holdSerialized.ice_ping() // Ensure everything's dispatched. + try holdSerialized.ice_getConnection()!.close(.GracefullyWithWait) + } + } + try completed.wait() + } + output.writeLine("ok") + + output.write("testing waitForHold... ") + do { + try hold.waitForHold() + try hold.waitForHold() + for i in 0 ..< 1000 { + try holdOneway.ice_ping() + if (i % 20) == 0 { + try hold.putOnHold(0) + } + } + try hold.putOnHold(-1) + try hold.ice_ping() + try hold.putOnHold(-1) + try hold.ice_ping() + } + output.writeLine("ok") + + output.write("changing state to hold and shutting down server... ") + try hold.shutdown() + output.writeLine("ok") +} diff --git a/swift/test/Ice/hold/Client.swift b/swift/test/Ice/hold/Client.swift new file mode 100644 index 00000000000..6287acd71eb --- /dev/null +++ b/swift/test/Ice/hold/Client.swift @@ -0,0 +1,17 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import PromiseKit +import TestCommon + +public class Client: TestHelperI { + public override func run(args: [String]) throws { + let communicator = try initialize(args) + defer { + communicator.destroy() + } + try allTests(self) + } +} diff --git a/swift/test/Ice/hold/Server.swift b/swift/test/Ice/hold/Server.swift new file mode 100644 index 00000000000..0130718d499 --- /dev/null +++ b/swift/test/Ice/hold/Server.swift @@ -0,0 +1,37 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Dispatch +import Ice +import TestCommon + +class Server: TestHelperI { + public override func run(args: [String]) throws { + let communicator = try initialize(args) + defer { + communicator.destroy() + } + + communicator.getProperties().setProperty(key: "TestAdapter1.Endpoints", value: getTestEndpoint(num: 0)) + communicator.getProperties().setProperty(key: "TestAdapter1.ThreadPool.Size", value: "5") + communicator.getProperties().setProperty(key: "TestAdapter1.ThreadPool.SizeMax", value: "5") + communicator.getProperties().setProperty(key: "TestAdapter1.ThreadPool.SizeWarn", value: "0") + communicator.getProperties().setProperty(key: "TestAdapter1.ThreadPool.Serialize", value: "0") + let adapter1 = try communicator.createObjectAdapter("TestAdapter1") + try adapter1.add(servant: HoldDisp(HoldI(adapter: adapter1, helper: self)), id: Ice.stringToIdentity("hold")) + + communicator.getProperties().setProperty(key: "TestAdapter2.Endpoints", value: getTestEndpoint(num: 1)) + communicator.getProperties().setProperty(key: "TestAdapter2.ThreadPool.Size", value: "5") + communicator.getProperties().setProperty(key: "TestAdapter2.ThreadPool.SizeMax", value: "5") + communicator.getProperties().setProperty(key: "TestAdapter2.ThreadPool.SizeWarn", value: "0") + communicator.getProperties().setProperty(key: "TestAdapter2.ThreadPool.Serialize", value: "1") + let adapter2 = try communicator.createObjectAdapter("TestAdapter2") + try adapter2.add(servant: HoldDisp(HoldI(adapter: adapter2, helper: self)), id: Ice.stringToIdentity("hold")) + + try adapter1.activate() + try adapter2.activate() + serverReady() + communicator.waitForShutdown() + } +} diff --git a/swift/test/Ice/hold/Test.ice b/swift/test/Ice/hold/Test.ice new file mode 100644 index 00000000000..7f097ad5d30 --- /dev/null +++ b/swift/test/Ice/hold/Test.ice @@ -0,0 +1,19 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#pragma once + +module Test +{ + +interface Hold +{ + void putOnHold(int seconds); + void waitForHold(); + void setOneway(int value, int expected); + int set(int value, int delay); + void shutdown(); +} + +} diff --git a/swift/test/Ice/hold/TestI.swift b/swift/test/Ice/hold/TestI.swift new file mode 100644 index 00000000000..315e41abf6c --- /dev/null +++ b/swift/test/Ice/hold/TestI.swift @@ -0,0 +1,74 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Dispatch +import Foundation +import Ice +import TestCommon + +class HoldI: Hold { + var _adapter: Ice.ObjectAdapter + var _helper: TestHelper + var _last: Int32 = 0 + var _lock = os_unfair_lock() + var _queue = DispatchQueue(label: "ice.hold.Server") + + init(adapter: Ice.ObjectAdapter, helper: TestHelper) { + _adapter = adapter + _helper = helper + } + + func putOnHold(seconds: Int32, current: Ice.Current) throws { + if seconds < 0 { + _adapter.hold() + } else if seconds == 0 { + _adapter.hold() + try _adapter.activate() + } else { + _queue.asyncAfter(deadline: .now() + .milliseconds(Int(seconds))) { + do { + try self.putOnHold(seconds: 0, current: current) + } catch is Ice.ObjectAdapterDeactivatedException {} catch { + precondition(false) + } + } + } + } + + func waitForHold(current: Ice.Current) throws { + _queue.async { + do { + current.adapter!.waitForHold() + try current.adapter!.activate() + } catch { + // + // This shouldn't occur. The test ensures all the waitForHold timers are + // finished before shutting down the communicator. + // + precondition(false) + } + } + } + + func set(value: Int32, delay: Int32, current _: Ice.Current) throws -> Int32 { + Thread.sleep(forTimeInterval: Double(delay / 1000)) + return withLock(&_lock) { + let tmp = _last + _last = value + return tmp + } + } + + func setOneway(value: Int32, expected: Int32, current _: Ice.Current) throws { + try withLock(&_lock) { + try self._helper.test(_last == expected) + _last = value + } + } + + func shutdown(current _: Ice.Current) throws { + _adapter.hold() + _adapter.getCommunicator().shutdown() + } +} diff --git a/swift/test/Ice/info/AllTests.swift b/swift/test/Ice/info/AllTests.swift new file mode 100644 index 00000000000..59b626a0f06 --- /dev/null +++ b/swift/test/Ice/info/AllTests.swift @@ -0,0 +1,236 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import TestCommon + +func getTCPEndpointInfo(_ info: Ice.EndpointInfo) -> Ice.TCPEndpointInfo? { + var curr: Ice.EndpointInfo? = info + while curr != nil { + if curr is Ice.TCPEndpointInfo { + return curr as? Ice.TCPEndpointInfo + } + curr = curr?.underlying + } + return nil +} + +func getTCPConnectionInfo(_ info: Ice.ConnectionInfo) -> Ice.TCPConnectionInfo? { + var curr: Ice.ConnectionInfo? = info + while curr != nil { + if curr is Ice.TCPConnectionInfo { + return curr as? Ice.TCPConnectionInfo + } + curr = curr?.underlying + } + return nil +} + +func allTests(_ helper: TestHelper) throws { + func test(_ value: Bool, file: String = #file, line: Int = #line) throws { + try helper.test(value, file: file, line: line) + } + let output = helper.getWriter() + + let communicator = helper.communicator() + + output.write("testing proxy endpoint information... ") + do { + let p1 = try communicator.stringToProxy( + "test -t:default -h tcphost -p 10000 -t 1200 -z --sourceAddress 10.10.10.10:" + + "udp -h udphost -p 10001 --interface eth0 --ttl 5 --sourceAddress 10.10.10.10:" + + "opaque -e 1.8 -t 100 -v ABCD")! + + var endps = p1.ice_getEndpoints() + + let info = endps[0].getInfo()! + let tcpEndpoint = getTCPEndpointInfo(info)! + try test(tcpEndpoint.host == "tcphost") + try test(tcpEndpoint.port == 10000) + try test(tcpEndpoint.sourceAddress == "10.10.10.10") + try test(tcpEndpoint.timeout == 1200) + try test(tcpEndpoint.compress) + try test(!tcpEndpoint.datagram()) + + try test(tcpEndpoint.type() == Ice.TCPEndpointType && !tcpEndpoint.secure() || + tcpEndpoint.type() == Ice.SSLEndpointType && tcpEndpoint.secure() || + tcpEndpoint.type() == Ice.WSEndpointType && !tcpEndpoint.secure() || + tcpEndpoint.type() == Ice.WSSEndpointType && tcpEndpoint.secure()) + + try test(tcpEndpoint.type() == Ice.TCPEndpointType && info is Ice.TCPEndpointInfo || + tcpEndpoint.type() == Ice.SSLEndpointType && info is Ice.SSLEndpointInfo || + tcpEndpoint.type() == Ice.WSEndpointType && info is Ice.WSEndpointInfo || + tcpEndpoint.type() == Ice.WSSEndpointType && info is Ice.WSEndpointInfo) + + let udpEndpoint = (endps[1].getInfo() as? Ice.UDPEndpointInfo)! + try test(udpEndpoint.host == "udphost") + try test(udpEndpoint.port == 10001) + try test(udpEndpoint.mcastInterface == "eth0") + try test(udpEndpoint.mcastTtl == 5) + try test(udpEndpoint.sourceAddress == "10.10.10.10") + try test(udpEndpoint.timeout == -1) + try test(!udpEndpoint.compress) + try test(!udpEndpoint.secure()) + try test(udpEndpoint.datagram()) + try test(udpEndpoint.type() == 3) + + let opaqueEndpoint = (endps[2].getInfo() as? Ice.OpaqueEndpointInfo)! + try test(opaqueEndpoint.rawBytes.count > 0) + try test(opaqueEndpoint.rawEncoding == Ice.EncodingVersion(major: 1, minor: 8)) + } + output.writeLine("ok") + + output.write("test object adapter endpoint information... ") + do { + let host = communicator.getProperties().getPropertyAsInt("Ice.IPv6") != 0 ? "::1" : "127.0.0.1" + communicator.getProperties().setProperty(key: "TestAdapter.Endpoints", + value: "tcp -h \"\(host)\" -t 15000:udp -h \"\(host)\"") + var adapter = try communicator.createObjectAdapter("TestAdapter") + + var endpoints = adapter.getEndpoints() + try test(endpoints.count == 2) + var publishedEndpoints = adapter.getPublishedEndpoints() + + try test(endpoints.elementsEqual(publishedEndpoints) { $0 == $1 }) + + var tcpEndpoint = getTCPEndpointInfo(endpoints[0].getInfo()!)! + try test(tcpEndpoint.type() == Ice.TCPEndpointType || + tcpEndpoint.type() == Ice.SSLEndpointType || + tcpEndpoint.type() == Ice.WSEndpointType || + tcpEndpoint.type() == Ice.WSSEndpointType) + + try test(tcpEndpoint.host == host) + try test(tcpEndpoint.port > 0) + try test(tcpEndpoint.timeout == 15000) + + let udpEndpoint = (endpoints[1].getInfo() as? Ice.UDPEndpointInfo)! + try test(udpEndpoint.host == host) + try test(udpEndpoint.datagram()) + try test(udpEndpoint.port > 0) + + endpoints = [endpoints[0]] + try adapter.setPublishedEndpoints(endpoints) + publishedEndpoints = adapter.getPublishedEndpoints() + try test(endpoints.elementsEqual(publishedEndpoints) { $0 == $1 }) + + adapter.destroy() + + let port = helper.getTestPort(num: 1) + communicator.getProperties().setProperty(key: "TestAdapter.Endpoints", value: "default -h * -p \(port)") + communicator.getProperties().setProperty(key: "TestAdapter.PublishedEndpoints", + value: helper.getTestEndpoint(num: 1)) + adapter = try communicator.createObjectAdapter("TestAdapter") + + endpoints = adapter.getEndpoints() + try test(endpoints.count >= 1) + publishedEndpoints = adapter.getPublishedEndpoints() + try test(publishedEndpoints.count == 1) + + for endpoint in endpoints { + tcpEndpoint = getTCPEndpointInfo(endpoint.getInfo()!)! + try test(tcpEndpoint.port == port) + } + + tcpEndpoint = getTCPEndpointInfo(publishedEndpoints[0].getInfo()!)! + try test(tcpEndpoint.host == helper.getTestHost()) + try test(tcpEndpoint.port == port) + + adapter.destroy() + } + output.writeLine("ok") + + let endpointPort = helper.getTestPort(num: 0) + + let base = try communicator.stringToProxy("test:" + + helper.getTestEndpoint(num: 0) + ":" + + helper.getTestEndpoint(num: 0, prot: "udp"))! + + let testIntf = try checkedCast(prx: base, type: TestIntfPrx.self)! + + let defaultHost = communicator.getProperties().getProperty("Ice.Default.Host") + + output.write("test connection endpoint information... ") + do { + var info = try base.ice_getConnection()!.getEndpoint().getInfo()! + let tcpinfo = getTCPEndpointInfo(info)! + try test(tcpinfo.port == endpointPort) + try test(!tcpinfo.compress) + try test(tcpinfo.host == defaultHost) + + let ctx = try testIntf.getEndpointInfoAsContext() + try test(ctx["host"] == tcpinfo.host) + try test(ctx["compress"] == "false") + let port = Int(ctx["port"]!)! + try test(port > 0) + + info = try base.ice_datagram().ice_getConnection()!.getEndpoint().getInfo()! + let udp = (info as? Ice.UDPEndpointInfo)! + try test(udp.port == endpointPort) + try test(udp.host == defaultHost) + } + output.writeLine("ok") + + output.write("testing connection information... ") + do { + var connection = try base.ice_getConnection()! + try connection.setBufferSize(rcvSize: 1024, sndSize: 2048) + + let info = try connection.getInfo() + let ipInfo = getTCPConnectionInfo(info)! + try test(!info.incoming) + try test(info.adapterName == "") + try test(ipInfo.remotePort == endpointPort) + try test(ipInfo.localPort > 0) + + if defaultHost == "127.0.0.1" { + try test(ipInfo.localAddress == defaultHost) + try test(ipInfo.remoteAddress == defaultHost) + } + try test(ipInfo.rcvSize >= 1024) + try test(ipInfo.sndSize >= 2048) + + let ctx = try testIntf.getConnectionInfoAsContext() + try test(ctx["incoming"] == "true") + try test(ctx["adapterName"] == "TestAdapter") + try test(ctx["remoteAddress"] == ipInfo.localAddress) + try test(ctx["localAddress"] == ipInfo.remoteAddress) + try test(ctx["remotePort"] == "\(ipInfo.localPort)") + try test(ctx["localPort"] == "\(ipInfo.remotePort)") + + if try base.ice_getConnection()!.type() == "ws" || + base.ice_getConnection()!.type() == "wss" { + let headers = (info as? Ice.WSConnectionInfo)!.headers + + try test(headers["Upgrade"] == "websocket") + try test(headers["Connection"] == "Upgrade") + try test(headers["Sec-WebSocket-Protocol"] == "ice.zeroc.com") + try test(headers["Sec-WebSocket-Accept"] != nil) + + try test(ctx["ws.Upgrade"] == "websocket") + try test(ctx["ws.Connection"] == "Upgrade") + try test(ctx["ws.Sec-WebSocket-Protocol"] == "ice.zeroc.com") + try test(ctx["ws.Sec-WebSocket-Version"] == "13") + try test(ctx["ws.Sec-WebSocket-Key"] != nil) + } + + connection = try base.ice_datagram().ice_getConnection()! + try connection.setBufferSize(rcvSize: 2048, sndSize: 1024) + + let udpInfo = (try connection.getInfo() as? Ice.UDPConnectionInfo)! + try test(!udpInfo.incoming) + try test(udpInfo.adapterName == "") + try test(udpInfo.localPort > 0) + try test(udpInfo.remotePort == endpointPort) + + if defaultHost == "127.0.0.1" { + try test(udpInfo.remoteAddress == defaultHost) + try test(udpInfo.localAddress == defaultHost) + } + try test(udpInfo.rcvSize >= 2048) + try test(udpInfo.sndSize >= 1024) + } + output.writeLine("ok") + + try testIntf.shutdown() +} diff --git a/swift/test/Ice/info/Client.swift b/swift/test/Ice/info/Client.swift new file mode 100644 index 00000000000..6287acd71eb --- /dev/null +++ b/swift/test/Ice/info/Client.swift @@ -0,0 +1,17 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import PromiseKit +import TestCommon + +public class Client: TestHelperI { + public override func run(args: [String]) throws { + let communicator = try initialize(args) + defer { + communicator.destroy() + } + try allTests(self) + } +} diff --git a/swift/test/Ice/info/Server.swift b/swift/test/Ice/info/Server.swift new file mode 100644 index 00000000000..3863ab33b1b --- /dev/null +++ b/swift/test/Ice/info/Server.swift @@ -0,0 +1,26 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Dispatch +import Ice +import TestCommon + +class Server: TestHelperI { + public override func run(args: [String]) throws { + let communicator = try initialize(args) + defer { + communicator.destroy() + } + + communicator.getProperties().setProperty( + key: "TestAdapter.Endpoints", + value: "\(getTestEndpoint(num: 0)):\(getTestEndpoint(num: 0, prot: "udp"))" + ) + let adapter = try communicator.createObjectAdapter("TestAdapter") + try adapter.add(servant: TestIntfDisp(TestI()), id: Ice.stringToIdentity("test")) + try adapter.activate() + serverReady() + communicator.waitForShutdown() + } +} diff --git a/swift/test/Ice/info/Test.ice b/swift/test/Ice/info/Test.ice new file mode 100644 index 00000000000..58d8a045a33 --- /dev/null +++ b/swift/test/Ice/info/Test.ice @@ -0,0 +1,21 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#pragma once + +#include <Ice/Current.ice> + +module Test +{ + +interface TestIntf +{ + void shutdown(); + + Ice::Context getEndpointInfoAsContext(); + + Ice::Context getConnectionInfoAsContext(); +} + +} diff --git a/swift/test/Ice/info/TestI.swift b/swift/test/Ice/info/TestI.swift new file mode 100644 index 00000000000..624b5271e98 --- /dev/null +++ b/swift/test/Ice/info/TestI.swift @@ -0,0 +1,73 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice + +func getIPEndpointInfo(_ info: Ice.EndpointInfo) -> Ice.IPEndpointInfo? { + var curr: Ice.EndpointInfo? = info + while curr != nil { + if curr is Ice.IPEndpointInfo { + return curr as? Ice.IPEndpointInfo + } + curr = curr?.underlying + } + return nil +} + +func getIPConnectionInfo(_ info: Ice.ConnectionInfo) -> Ice.IPConnectionInfo? { + var curr: Ice.ConnectionInfo? = info + while curr != nil { + if curr is Ice.IPConnectionInfo { + return curr as? Ice.IPConnectionInfo + } + curr = curr?.underlying + } + return nil +} + +class TestI: TestIntf { + func shutdown(current: Ice.Current) throws { + current.adapter!.getCommunicator().shutdown() + } + + func getEndpointInfoAsContext(current: Ice.Current) throws -> Ice.Context { + var ctx = Ice.Context() + let info = current.con!.getEndpoint().getInfo()! + ctx["timeout"] = "\(info.timeout)" + ctx["compress"] = info.compress ? "true" : "false" + ctx["datagram"] = info.datagram() ? "true" : "false" + ctx["secure"] = info.datagram() ? "true" : "false" + ctx["type"] = "\(info.type())" + + let ipinfo = getIPEndpointInfo(info)! + ctx["host"] = ipinfo.host + ctx["port"] = "\(ipinfo.port)" + + if let udpinfo = ipinfo as? Ice.UDPEndpointInfo { + ctx["mcastInterface"] = udpinfo.mcastInterface + ctx["mcastTtl"] = "\(udpinfo.mcastTtl)" + } + return ctx + } + + func getConnectionInfoAsContext(current: Ice.Current) throws -> Ice.Context { + var ctx = Ice.Context() + let info = try current.con!.getInfo() + ctx["adapterName"] = info.adapterName + ctx["incoming"] = info.incoming ? "true" : "false" + + let ipinfo = getIPConnectionInfo(info)! + ctx["localAddress"] = ipinfo.localAddress + ctx["localPort"] = "\(ipinfo.localPort)" + ctx["remoteAddress"] = ipinfo.remoteAddress + ctx["remotePort"] = "\(ipinfo.remotePort)" + + if let wsinfo = info as? WSConnectionInfo { + for (key, value) in wsinfo.headers { + ctx["ws.\(key)"] = value + } + } + return ctx + } +} diff --git a/swift/test/Ice/inheritance/AllTests.swift b/swift/test/Ice/inheritance/AllTests.swift new file mode 100644 index 00000000000..fca28c900dc --- /dev/null +++ b/swift/test/Ice/inheritance/AllTests.swift @@ -0,0 +1,205 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import TestCommon + +func allTests(_ helper: TestHelper) throws -> InitialPrx { + func test(_ value: Bool, file: String = #file, line: Int = #line) throws { + try helper.test(value, file: file, line: line) + } + let output = helper.getWriter() + + let communicator = helper.communicator() + + let base = try communicator.stringToProxy("initial:\(helper.getTestEndpoint(num: 0))")! + + output.write("testing checked cast... ") + let initial = try checkedCast(prx: base, type: InitialPrx.self)! + try test(initial == base) + output.writeLine("ok") + + output.write("getting proxies for class hierarchy... ") + let ca = try initial.caop()! + let cb = try initial.cbop()! + let cc = try initial.ccop()! + let cd = try initial.cdop()! + try test(ca !== cb) + try test(ca !== cc) + try test(ca !== cd) + try test(cb !== cc) + try test(cb !== cd) + try test(cc !== cd) + output.writeLine("ok") + + output.write("getting proxies for interface hierarchy... ") + let ia = try initial.iaop()! + let ib1 = try initial.ib1op()! + let ib2 = try initial.ib2op()! + let ic = try initial.icop()! + try test(ia !== ib1) + try test(ia !== ib2) + try test(ia !== ic) + try test(ib1 !== ic) + try test(ib2 !== ic) + output.writeLine("ok") + + output.write("invoking proxy operations on class hierarchy... ") + + var cao = try ca.caop(ca)! + try test(cao == ca) + cao = try ca.caop(cb)! + try test(cao == cb) + cao = try ca.caop(cc)! + try test(cao == cc) + cao = try cb.caop(ca)! + try test(cao == ca) + cao = try cb.caop(cb)! + try test(cao == cb) + cao = try cb.caop(cc)! + try test(cao == cc) + cao = try cc.caop(ca)! + try test(cao == ca) + cao = try cc.caop(cb)! + try test(cao == cb) + cao = try cc.caop(cc)! + try test(cao == cc) + + cao = try cb.cbop(cb)! + try test(cao == cb) + var cbo = try cb.cbop(cb)! + try test(cbo == cb) + cao = try cb.cbop(cc)! + try test(cao == cc) + cbo = try cb.cbop(cc)! + try test(cbo == cc) + cao = try cc.cbop(cb)! + try test(cao == cb) + cbo = try cc.cbop(cb)! + try test(cbo == cb) + cao = try cc.cbop(cc)! + try test(cao == cc) + cbo = try cc.cbop(cc)! + try test(cbo == cc) + + cao = try cc.ccop(cc)! + try test(cao == cc) + cbo = try cc.ccop(cc)! + try test(cbo == cc) + var cco = try cc.ccop(cc)! + try test(cco == cc) + output.writeLine("ok") + + output.write("ditto, but for interface hierarchy... ") + + var iao = try ia.iaop(ia)! + try test(iao == ia) + iao = try ia.iaop(ib1)! + try test(iao == ib1) + iao = try ia.iaop(ib2)! + try test(iao == ib2) + iao = try ia.iaop(ic)! + try test(iao == ic) + iao = try ib1.iaop(ia)! + try test(iao == ia) + iao = try ib1.iaop(ib1)! + try test(iao == ib1) + iao = try ib1.iaop(ib2)! + try test(iao == ib2) + iao = try ib1.iaop(ic)! + try test(iao == ic) + iao = try ib2.iaop(ia)! + try test(iao == ia) + iao = try ib2.iaop(ib1)! + try test(iao == ib1) + iao = try ib2.iaop(ib2)! + try test(iao == ib2) + iao = try ib2.iaop(ic)! + try test(iao == ic) + iao = try ic.iaop(ia)! + try test(iao == ia) + iao = try ic.iaop(ib1)! + try test(iao == ib1) + iao = try ic.iaop(ib2)! + try test(iao == ib2) + iao = try ic.iaop(ic)! + try test(iao == ic) + + iao = try ib1.ib1op(ib1)! + try test(iao == ib1) + var ib1o = try ib1.ib1op(ib1)! + try test(ib1o == ib1) + iao = try ib1.ib1op(ic)! + try test(iao == ic) + ib1o = try ib1.ib1op(ic)! + try test(ib1o == ic) + iao = try ic.ib1op(ib1)! + try test(iao == ib1) + ib1o = try ic.ib1op(ib1)! + try test(ib1o == ib1) + iao = try ic.ib1op(ic)! + try test(iao == ic) + ib1o = try ic.ib1op(ic)! + try test(ib1o == ic) + + iao = try ib2.ib2op(ib2)! + try test(iao == ib2) + var ib2o = try ib2.ib2op(ib2)! + try test(ib2o == ib2) + iao = try ib2.ib2op(ic)! + try test(iao == ic) + ib2o = try ib2.ib2op(ic)! + try test(ib2o == ic) + iao = try ic.ib2op(ib2)! + try test(iao == ib2) + ib2o = try ic.ib2op(ib2)! + try test(ib2o == ib2) + iao = try ic.ib2op(ic)! + try test(iao == ic) + ib2o = try ic.ib2op(ic)! + try test(ib2o == ic) + + iao = try ic.icop(ic)! + try test(iao == ic) + ib1o = try ic.icop(ic)! + try test(ib1o == ic) + ib2o = try ic.icop(ic)! + try test(ib2o == ic) + let ico = try ic.icop(ic)! + try test(ico == ic) + output.writeLine("ok") + + output.write("ditto, but for class implementing interfaces... ") + + cao = try cd.caop(cd)! + try test(cao == cd) + cbo = try cd.cbop(cd)! + try test(cbo == cd) + cco = try cd.ccop(cd)! + try test(cco == cd) + + iao = try cd.iaop(cd)! + try test(iao == cd) + ib1o = try cd.ib1op(cd)! + try test(ib1o == cd) + ib2o = try cd.ib2op(cd)! + try test(ib2o == cd) + + cao = try cd.cdop(cd)! + try test(cao == cd) + cbo = try cd.cdop(cd)! + try test(cbo == cd) + cco = try cd.cdop(cd)! + try test(cco == cd) + + iao = try cd.cdop(cd)! + try test(iao == cd) + ib1o = try cd.cdop(cd)! + try test(ib1o == cd) + ib2o = try cd.cdop(cd)! + try test(ib2o == cd) + output.writeLine("ok") + + return initial +} diff --git a/swift/test/Ice/inheritance/Client.swift b/swift/test/Ice/inheritance/Client.swift new file mode 100644 index 00000000000..48b4d34ba85 --- /dev/null +++ b/swift/test/Ice/inheritance/Client.swift @@ -0,0 +1,18 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import PromiseKit +import TestCommon + +public class Client: TestHelperI { + public override func run(args: [String]) throws { + let communicator = try initialize(args) + defer { + communicator.destroy() + } + let initial = try allTests(self) + try initial.shutdown() + } +} diff --git a/swift/test/Ice/inheritance/Collocated.swift b/swift/test/Ice/inheritance/Collocated.swift new file mode 100644 index 00000000000..2c8fff7d9b5 --- /dev/null +++ b/swift/test/Ice/inheritance/Collocated.swift @@ -0,0 +1,25 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import TestCommon + +class Collocated: TestHelperI { + public override func run(args: [String]) throws { + let communicator = try initialize(args) + defer { + communicator.destroy() + } + + communicator.getProperties().setProperty( + key: "TestAdapter.Endpoints", + value: "\(getTestEndpoint(num: 0)):\(getTestEndpoint(num: 0, prot: "udp"))" + ) + let adapter = try communicator.createObjectAdapter("TestAdapter") + try adapter.add(servant: InitialDisp(InitialI(adapter)), id: Ice.stringToIdentity("initial")) + try adapter.activate() + + _ = try allTests(self) + } +} diff --git a/swift/test/Ice/inheritance/Server.swift b/swift/test/Ice/inheritance/Server.swift new file mode 100644 index 00000000000..dc471283182 --- /dev/null +++ b/swift/test/Ice/inheritance/Server.swift @@ -0,0 +1,26 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Dispatch +import Ice +import TestCommon + +class Server: TestHelperI { + public override func run(args: [String]) throws { + let communicator = try initialize(args) + defer { + communicator.destroy() + } + + communicator.getProperties().setProperty( + key: "TestAdapter.Endpoints", + value: "\(getTestEndpoint(num: 0)):\(getTestEndpoint(num: 0, prot: "udp"))" + ) + let adapter = try communicator.createObjectAdapter("TestAdapter") + try adapter.add(servant: InitialDisp(InitialI(adapter)), id: Ice.stringToIdentity("initial")) + try adapter.activate() + serverReady() + communicator.waitForShutdown() + } +} diff --git a/swift/test/Ice/inheritance/Test.ice b/swift/test/Ice/inheritance/Test.ice new file mode 100644 index 00000000000..a5721cd067f --- /dev/null +++ b/swift/test/Ice/inheritance/Test.ice @@ -0,0 +1,231 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#pragma once + +[["swift:class-resolver-prefix:IceInheritance", + "suppress-warning:deprecated"]] // For classes with operations + +module Test +{ + +module MA +{ + +interface IA +{ + IA* iaop(IA* p); +} + +class CA +{ + CA* caop(CA* p); +} + +} + +module MB +{ + +interface IB1 extends MA::IA +{ + IB1* ib1op(IB1* p); +} + +interface IB2 extends MA::IA +{ + IB2* ib2op(IB2* p); +} + +["cpp:virtual"]class CB extends MA::CA +{ + CB* cbop(CB* p); +} + +} + +module MA +{ + +interface IC extends MB::IB1, MB::IB2 +{ + IC* icop(IC* p); +} + +["cpp:virtual"]class CC extends MB::CB +{ + CC* ccop(CC* p); +} + +["cpp:virtual"]class CD extends CC implements MB::IB1, MB::IB2 +{ + CD* cdop(CD* p); +} + +} + +interface Initial +{ + void shutdown(); + MA::CA* caop(); + MB::CB* cbop(); + MA::CC* ccop(); + MA::CD* cdop(); + MA::IA* iaop(); + MB::IB1* ib1op(); + MB::IB2* ib2op(); + MA::IC* icop(); +} + +module MC +{ + +class A +{ + int aA; +} + +class B extends A +{ + int bB; +} + +class C extends B +{ + int cC; +} + +["cpp:virtual"] class D extends C +{ + int dD; +} + +} + +module MD +{ + +["cpp:virtual"] class A +{ + int aA; +} + +["cpp:virtual"] class B extends A +{ + int bB; +} + +["cpp:virtual"] class C extends B +{ + int cC; +} + +["cpp:virtual"] class D extends C +{ + int dD; +} + +} + +module ME +{ + +class A +{ + int aA; +} + +class B extends A +{ + int bB; +} + +["cpp:virtual"] class C extends B +{ + int cC; +} + +["cpp:virtual"] class D extends C +{ + int dD; +} + +} + +module MF +{ + +class A +{ + int aA; +} + +["cpp:virtual"] class B extends A +{ + int bB; +} + +class C extends B +{ + int cC; +} + +["cpp:virtual"] class D extends C +{ + int dD; +} + +} + +module MG +{ + +class A +{ + int aA; +} + +["cpp:virtual"] class B extends A +{ + int bB; +} + +["cpp:virtual"] class C extends B +{ + int cC; +} + +class D extends C +{ + int dD; +} + +} + +module MH +{ + +class A +{ + int aA; +} + +class B extends A +{ + int bB; +} + +class C extends B +{ + int cC; +} + +class D extends C +{ + int dD; +} + +} + +} diff --git a/swift/test/Ice/inheritance/TestI.swift b/swift/test/Ice/inheritance/TestI.swift new file mode 100644 index 00000000000..f07c494fde9 --- /dev/null +++ b/swift/test/Ice/inheritance/TestI.swift @@ -0,0 +1,168 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import TestCommon + +class CAI: MACAOperations { + func caop(p: MACAPrx?, current _: Ice.Current) throws -> MACAPrx? { + return p + } +} + +class CBI: MBCBOperations { + func caop(p: MACAPrx?, current _: Ice.Current) throws -> MACAPrx? { + return p + } + + func cbop(p: MBCBPrx?, current _: Ice.Current) throws -> MBCBPrx? { + return p + } +} + +class CCI: MACCOperations { + func caop(p: MACAPrx?, current _: Ice.Current) throws -> MACAPrx? { + return p + } + + func ccop(p: MACCPrx?, current _: Ice.Current) throws -> MACCPrx? { + return p + } + + func cbop(p: MBCBPrx?, current _: Ice.Current) throws -> MBCBPrx? { + return p + } +} + +class CDI: MACDOperations { + func caop(p: MACAPrx?, current _: Ice.Current) throws -> MACAPrx? { + return p + } + + func ccop(p: MACCPrx?, current _: Ice.Current) throws -> MACCPrx? { + return p + } + + func cdop(p: MACDPrx?, current _: Ice.Current) throws -> MACDPrx? { + return p + } + + func iaop(p: MAIAPrx?, current _: Ice.Current) throws -> MAIAPrx? { + return p + } + + func cbop(p: MBCBPrx?, current _: Ice.Current) throws -> MBCBPrx? { + return p + } + + func ib1op(p: MBIB1Prx?, current _: Ice.Current) throws -> MBIB1Prx? { + return p + } + + func ib2op(p: MBIB2Prx?, current _: Ice.Current) throws -> MBIB2Prx? { + return p + } +} + +class IAI: MAIA { + func iaop(p: MAIAPrx?, current _: Ice.Current) throws -> MAIAPrx? { + return p + } +} + +class IB1I: MBIB1 { + func iaop(p: MAIAPrx?, current _: Ice.Current) throws -> MAIAPrx? { + return p + } + + func ib1op(p: MBIB1Prx?, current _: Ice.Current) throws -> MBIB1Prx? { + return p + } +} + +class IB2I: MBIB2 { + func iaop(p: MAIAPrx?, current _: Ice.Current) throws -> MAIAPrx? { + return p + } + + func ib2op(p: MBIB2Prx?, current _: Ice.Current) throws -> MBIB2Prx? { + return p + } +} + +class ICI: MAIC { + func iaop(p: MAIAPrx?, current _: Ice.Current) throws -> MAIAPrx? { + return p + } + + func icop(p: MAICPrx?, current _: Ice.Current) throws -> MAICPrx? { + return p + } + + func ib1op(p: MBIB1Prx?, current _: Ice.Current) throws -> MBIB1Prx? { + return p + } + + func ib2op(p: MBIB2Prx?, current _: Ice.Current) throws -> MBIB2Prx? { + return p + } +} + +class InitialI: Initial { + let _ca: MACAPrx + let _cb: MBCBPrx + let _cc: MACCPrx + let _cd: MACDPrx + let _ia: MAIAPrx + let _ib1: MBIB1Prx + let _ib2: MBIB2Prx + let _ic: MAICPrx + + init(_ adapter: Ice.ObjectAdapter) throws { + _ca = try uncheckedCast(prx: adapter.addWithUUID(MACADisp(CAI())), type: MACAPrx.self) + _cb = try uncheckedCast(prx: adapter.addWithUUID(MBCBDisp(CBI())), type: MBCBPrx.self) + _cc = try uncheckedCast(prx: adapter.addWithUUID(MACCDisp(CCI())), type: MACCPrx.self) + _cd = try uncheckedCast(prx: adapter.addWithUUID(MACDDisp(CDI())), type: MACDPrx.self) + _ia = try uncheckedCast(prx: adapter.addWithUUID(MAIADisp(IAI())), type: MAIAPrx.self) + _ib1 = try uncheckedCast(prx: adapter.addWithUUID(MBIB1Disp(IB1I())), type: MBIB1Prx.self) + _ib2 = try uncheckedCast(prx: adapter.addWithUUID(MBIB2Disp(IB2I())), type: MBIB2Prx.self) + _ic = try uncheckedCast(prx: adapter.addWithUUID(MAICDisp(ICI())), type: MAICPrx.self) + } + + func caop(current _: Ice.Current) throws -> MACAPrx? { + return _ca + } + + func cbop(current _: Ice.Current) throws -> MBCBPrx? { + return _cb + } + + func ccop(current _: Ice.Current) throws -> MACCPrx? { + return _cc + } + + func cdop(current _: Ice.Current) throws -> MACDPrx? { + return _cd + } + + func iaop(current _: Ice.Current) throws -> MAIAPrx? { + return _ia + } + + func ib1op(current _: Ice.Current) throws -> MBIB1Prx? { + return _ib1 + } + + func ib2op(current _: Ice.Current) throws -> MBIB2Prx? { + return _ib2 + } + + func icop(current _: Ice.Current) throws -> MAICPrx? { + return _ic + } + + func shutdown(current: Ice.Current) throws { + current.adapter!.getCommunicator().shutdown() + } +} diff --git a/swift/test/Ice/invoke/AllTests.swift b/swift/test/Ice/invoke/AllTests.swift new file mode 100644 index 00000000000..4294f025a1e --- /dev/null +++ b/swift/test/Ice/invoke/AllTests.swift @@ -0,0 +1,115 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Foundation +import Ice +import TestCommon + +let testString = "This is a test string" + +class Cookie { + func getString() -> String { + return testString + } +} + +func allTests(_ helper: TestHelper) throws -> MyClassPrx { + func test(_ value: Bool, file: String = #file, line: Int = #line) throws { + try helper.test(value, file: file, line: line) + } + let output = helper.getWriter() + + let communicator = helper.communicator() + + let baseProxy = try communicator.stringToProxy("test:\(helper.getTestEndpoint(num: 0))")! + let cl = try checkedCast(prx: baseProxy, type: MyClassPrx.self)! + let oneway = cl.ice_oneway() + let batchOneway = cl.ice_batchOneway() + + output.write("testing ice_invoke... ") + do { + try test(oneway.ice_invoke(operation: "opOneway", mode: .Normal, inEncaps: Data()).ok) + try test(batchOneway.ice_invoke(operation: "opOneway", mode: .Normal, inEncaps: Data()).ok) + try test(batchOneway.ice_invoke(operation: "opOneway", mode: .Normal, inEncaps: Data()).ok) + try test(batchOneway.ice_invoke(operation: "opOneway", mode: .Normal, inEncaps: Data()).ok) + try test(batchOneway.ice_invoke(operation: "opOneway", mode: .Normal, inEncaps: Data()).ok) + + try batchOneway.ice_flushBatchRequests() + let outS = Ice.OutputStream(communicator: communicator) + outS.startEncapsulation() + outS.write(testString) + outS.endEncapsulation() + let inEncaps = outS.finished() + let result = try cl.ice_invoke(operation: "opString", mode: .Normal, inEncaps: inEncaps) + try test(result.ok) + let inS = Ice.InputStream(communicator: communicator, bytes: result.outEncaps) + _ = try inS.startEncapsulation() + var s: String = try inS.read() + try test(s == testString) + s = try inS.read() + try inS.endEncapsulation() + try test(s == testString) + } + + for i in 0 ..< 2 { + var ctx: Ice.Context! + if i == 1 { + ctx = Ice.Context() + ctx["raise"] = "" + } + let result = try cl.ice_invoke(operation: "opException", mode: .Normal, inEncaps: Data(), context: ctx) + try test(!result.ok) + let inS = Ice.InputStream(communicator: communicator, bytes: result.outEncaps) + _ = try inS.startEncapsulation() + + do { + try inS.throwException() + } catch is MyException { + try inS.endEncapsulation() + } catch { + try test(false) + } + } + + output.writeLine("ok") + + output.write("testing asynchronous ice_invoke... ") + do { + var result = try oneway.ice_invokeAsync(operation: "opOneway", mode: .Normal, inEncaps: Data()).wait() + try test(result.ok) + + let outS = Ice.OutputStream(communicator: communicator) + outS.startEncapsulation() + outS.write(testString) + outS.endEncapsulation() + let inEncaps = outS.finished() + + result = try cl.ice_invokeAsync(operation: "opString", mode: .Normal, inEncaps: inEncaps).wait() + try test(result.ok) + let inS = Ice.InputStream(communicator: communicator, bytes: result.outEncaps) + _ = try inS.startEncapsulation() + var s: String = try inS.read() + try test(s == testString) + s = try inS.read() + try inS.endEncapsulation() + try test(s == testString) + } + + do { + let result = try cl.ice_invokeAsync(operation: "opException", mode: .Normal, inEncaps: Data()).wait() + try test(!result.ok) + let inS = Ice.InputStream(communicator: communicator, bytes: result.outEncaps) + _ = try inS.startEncapsulation() + do { + try inS.throwException() + } catch is MyException { + try inS.endEncapsulation() + } catch { + try test(false) + } + } + + output.writeLine("ok") + return cl +} diff --git a/swift/test/Ice/invoke/Client.swift b/swift/test/Ice/invoke/Client.swift new file mode 100644 index 00000000000..3fa999ddd18 --- /dev/null +++ b/swift/test/Ice/invoke/Client.swift @@ -0,0 +1,23 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import PromiseKit +import TestCommon + +public class Client: TestHelperI { + public override func run(args: [String]) throws { + let properties = try createTestProperties(args) + var initData = Ice.InitializationData() + initData.properties = properties + initData.classResolverPrefix = ["IceInvoke"] + + let communicator = try initialize(initData) + defer { + communicator.destroy() + } + let cl = try allTests(self) + try cl.shutdown() + } +} diff --git a/swift/test/Ice/invoke/Server.swift b/swift/test/Ice/invoke/Server.swift new file mode 100644 index 00000000000..e2f93e303e1 --- /dev/null +++ b/swift/test/Ice/invoke/Server.swift @@ -0,0 +1,52 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Dispatch +import Ice +import TestCommon + +class ServantLocatorI: Ice.ServantLocator { + var _blobject: Ice.Disp + + init(_ async: Bool) { + if async { + _blobject = Ice.BlobjectAsyncDisp(BlobjectAsyncI()) + } else { + _blobject = Ice.BlobjectDisp(BlobjectI()) + } + } + + func locate(_: Ice.Current) -> (returnValue: Ice.Disp?, cookie: AnyObject?) { + return (_blobject, nil) + } + + func finished(curr _: Ice.Current, servant _: Ice.Disp, cookie _: AnyObject?) {} + + func deactivate(_: String) {} +} + +class Server: TestHelperI { + public override func run(args: [String]) throws { + let async = args.contains("--async") + + let properties = try createTestProperties(args) + var initData = Ice.InitializationData() + initData.properties = properties + initData.classResolverPrefix = ["IceInvoke"] + let communicator = try initialize(initData) + defer { + communicator.destroy() + } + + communicator.getProperties().setProperty(key: "TestAdapter.Endpoints", value: "\(getTestEndpoint(num: 0))") + let adapter = try communicator.createObjectAdapter("TestAdapter") + + try adapter.addServantLocator(locator: ServantLocatorI(async), category: "") + try adapter.activate() + + try adapter.activate() + serverReady() + communicator.waitForShutdown() + } +} diff --git a/swift/test/Ice/invoke/Test.ice b/swift/test/Ice/invoke/Test.ice new file mode 100644 index 00000000000..357da20f023 --- /dev/null +++ b/swift/test/Ice/invoke/Test.ice @@ -0,0 +1,27 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#pragma once + +[["swift:class-resolver-prefix:IceInvoke"]] + +module Test +{ + +exception MyException +{ +} + +interface MyClass +{ + void opOneway(); + + string opString(string s1, out string s2); + + void opException() throws MyException; + + void shutdown(); +} + +} diff --git a/swift/test/Ice/invoke/TestI.swift b/swift/test/Ice/invoke/TestI.swift new file mode 100644 index 00000000000..2b18e880cac --- /dev/null +++ b/swift/test/Ice/invoke/TestI.swift @@ -0,0 +1,94 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import PromiseKit +import TestCommon + +class BlobjectI: Ice.Blobject { + func ice_invoke(inEncaps: Data, current: Ice.Current) throws -> (ok: Bool, outParams: Data) { + let communicator = current.adapter!.getCommunicator() + let inS = Ice.InputStream(communicator: communicator, bytes: inEncaps) + _ = try inS.startEncapsulation() + let outS = Ice.OutputStream(communicator: communicator) + outS.startEncapsulation() + if current.operation == "opOneway" { + return (true, Data()) + } else if current.operation == "opString" { + let s: String = try inS.read() + outS.write(s) + outS.write(s) + outS.endEncapsulation() + return (true, outS.finished()) + } else if current.operation == "opException" { + if current.ctx["raise"] != nil { + throw MyException() + } + let ex = MyException() + outS.write(ex) + outS.endEncapsulation() + return (false, outS.finished()) + } else if current.operation == "shutdown" { + communicator.shutdown() + return (true, Data()) + } else if current.operation == "ice_isA" { + let s: String = try inS.read() + if s == "::Test::MyClass" { + outS.write(true) + } else { + outS.write(false) + } + outS.endEncapsulation() + return (true, outS.finished()) + } else { + throw Ice.OperationNotExistException(id: current.id, facet: current.facet, operation: current.operation) + } + } +} + +class BlobjectAsyncI: Ice.BlobjectAsync { + func ice_invokeAsync(inEncaps: Data, current: Current) -> Promise<(ok: Bool, outParams: Data)> { + do { + let communicator = current.adapter!.getCommunicator() + let inS = Ice.InputStream(communicator: communicator, bytes: inEncaps) + _ = try inS.startEncapsulation() + let outS = Ice.OutputStream(communicator: communicator) + outS.startEncapsulation() + if current.operation == "opOneway" { + return Promise.value((true, Data())) + } else if current.operation == "opString" { + let s: String = try inS.read() + outS.write(s) + outS.write(s) + outS.endEncapsulation() + return Promise.value((true, outS.finished())) + } else if current.operation == "opException" { + let ex = MyException() + outS.write(ex) + outS.endEncapsulation() + return Promise.value((false, outS.finished())) + } else if current.operation == "shutdown" { + communicator.shutdown() + return Promise.value((false, Data())) + } else if current.operation == "ice_isA" { + let s: String = try inS.read() + if s == "::Test::MyClass" { + outS.write(true) + } else { + outS.write(false) + } + outS.endEncapsulation() + return Promise.value((true, outS.finished())) + } else { + throw Ice.OperationNotExistException(id: current.id, + facet: current.facet, + operation: current.operation) + } + } catch { + return Promise<(ok: Bool, outParams: Data)> { seal in + seal.reject(error) + } + } + } +} diff --git a/swift/test/Ice/location/AllTests.swift b/swift/test/Ice/location/AllTests.swift new file mode 100644 index 00000000000..f54ca2b3c67 --- /dev/null +++ b/swift/test/Ice/location/AllTests.swift @@ -0,0 +1,507 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Foundation +import Ice +import PromiseKit +import TestCommon + +func allTests(_ helper: TestHelper) throws { + func test(_ value: Bool, file: String = #file, line: Int = #line) throws { + try helper.test(value, file: file, line: line) + } + let output = helper.getWriter() + + let communicator = helper.communicator() + + let manager = try checkedCast( + prx: communicator.stringToProxy("ServerManager:\(helper.getTestEndpoint(num: 0))")!, + type: ServerManagerPrx.self + )! + + let locator = uncheckedCast(prx: communicator.getDefaultLocator()!, type: TestLocatorPrx.self) + + let registry = try checkedCast(prx: locator.getRegistry()!, type: TestLocatorRegistryPrx.self)! + + output.write("testing stringToProxy... ") + var base = try communicator.stringToProxy("test @ TestAdapter")! + let base2 = try communicator.stringToProxy("test @ TestAdapter")! + let base3 = try communicator.stringToProxy("test")! + let base4 = try communicator.stringToProxy("ServerManager")! + let base5 = try communicator.stringToProxy("test2")! + let base6 = try communicator.stringToProxy("test @ ReplicatedAdapter")! + output.writeLine("ok") + + output.write("testing ice_locator and ice_getLocator... ") + try test(base.ice_getLocator()!.ice_getIdentity() == communicator.getDefaultLocator()!.ice_getIdentity()) + let anotherLocator = try uncheckedCast(prx: communicator.stringToProxy("anotherLocator")!, + type: Ice.LocatorPrx.self) + base = base.ice_locator(anotherLocator) + try test(base.ice_getLocator()!.ice_getIdentity() == anotherLocator.ice_getIdentity()) + communicator.setDefaultLocator(nil) + + base = try communicator.stringToProxy("test @ TestAdapter")! + try test(base.ice_getLocator() == nil) + base = base.ice_locator(anotherLocator) + try test(base.ice_getLocator()!.ice_getIdentity() == anotherLocator.ice_getIdentity()) + communicator.setDefaultLocator(locator) + base = try communicator.stringToProxy("test @ TestAdapter")! + try test(base.ice_getLocator()!.ice_getIdentity() == communicator.getDefaultLocator()!.ice_getIdentity()) + + // + // We also test ice_router/ice_getRouter(perhaps we should add a + // test/Ice/router test?) + // + try test(base.ice_getRouter() == nil) + let anotherRouter = try uncheckedCast(prx: communicator.stringToProxy("anotherRouter")!, type: Ice.RouterPrx.self) + base = base.ice_router(anotherRouter) + try test(base.ice_getRouter()!.ice_getIdentity() == anotherRouter.ice_getIdentity()) + let router = try uncheckedCast(prx: communicator.stringToProxy("dummyrouter")!, type: Ice.RouterPrx.self) + communicator.setDefaultRouter(router) + base = try communicator.stringToProxy("test @ TestAdapter")! + try test(base.ice_getRouter()!.ice_getIdentity() == communicator.getDefaultRouter()!.ice_getIdentity()) + communicator.setDefaultRouter(nil) + base = try communicator.stringToProxy("test @ TestAdapter")! + try test(base.ice_getRouter() == nil) + output.writeLine("ok") + + output.write("starting server... ") + try manager.startServer() + output.writeLine("ok") + + output.write("testing checked cast... ") + var obj = try checkedCast(prx: base, type: TestIntfPrx.self)! + let obj2 = try checkedCast(prx: base2, type: TestIntfPrx.self)! + let obj3 = try checkedCast(prx: base3, type: TestIntfPrx.self)! + _ = try checkedCast(prx: base4, type: ServerManagerPrx.self)! + let obj5 = try checkedCast(prx: base5, type: TestIntfPrx.self)! + let obj6 = try checkedCast(prx: base6, type: TestIntfPrx.self)! + output.writeLine("ok") + + output.write("testing id@AdapterId indirect proxy... ") + try obj.shutdown() + try manager.startServer() + do { + try obj2.ice_ping() + } catch { + try test(false) + } + output.writeLine("ok") + + output.write("testing id@ReplicaGroupId indirect proxy... ") + try obj.shutdown() + try manager.startServer() + do { + try obj6.ice_ping() + } catch { + try test(false) + } + output.writeLine("ok") + + output.write("testing identity indirect proxy... ") + try obj.shutdown() + try manager.startServer() + + do { + try obj3.ice_ping() + } catch { + try test(false) + } + + do { + try obj2.ice_ping() + } catch { + try test(false) + } + try obj.shutdown() + try manager.startServer() + + do { + try obj2.ice_ping() + } catch { + try test(false) + } + + do { + try obj3.ice_ping() + } catch { + try test(false) + } + + try obj.shutdown() + try manager.startServer() + + do { + try obj2.ice_ping() + } catch { + try test(false) + } + + try obj.shutdown() + try manager.startServer() + + do { + try obj3.ice_ping() + } catch { + try test(false) + } + + try obj.shutdown() + try manager.startServer() + + do { + let obj5 = try checkedCast(prx: base5, type: TestIntfPrx.self)! + try obj5.ice_ping() + } catch { + try test(false) + } + output.writeLine("ok") + + output.write("testing proxy with unknown identity... ") + do { + base = try communicator.stringToProxy("unknown/unknown")! + try base.ice_ping() + try test(false) + } catch let ex as Ice.NotRegisteredException { + try test(ex.kindOfObject == "object") + try test(ex.id == "unknown/unknown") + } + output.writeLine("ok") + + output.write("testing proxy with unknown adapter... ") + do { + base = try communicator.stringToProxy("test @ TestAdapterUnknown")! + try base.ice_ping() + try test(false) + } catch let ex as Ice.NotRegisteredException { + try test(ex.kindOfObject == "object adapter") + try test(ex.id == "TestAdapterUnknown") + } + output.writeLine("ok") + + output.write("testing locator cache timeout... ") + let basencc = try communicator.stringToProxy("test@TestAdapter")!.ice_connectionCached(false) + var count = try locator.getRequestCount() + try basencc.ice_locatorCacheTimeout(0).ice_ping() // No locator cache. + count += 1 + try test(count == locator.getRequestCount()) + try basencc.ice_locatorCacheTimeout(0).ice_ping() // No locator cache. + count += 1 + try test(count == locator.getRequestCount()) + try basencc.ice_locatorCacheTimeout(2).ice_ping() // 2s timeout. + try test(count == locator.getRequestCount()) + Thread.sleep(forTimeInterval: 1.3) // 1300ms + try basencc.ice_locatorCacheTimeout(1).ice_ping() // 1s timeout. + count += 1 + try test(count == locator.getRequestCount()) + + try communicator.stringToProxy("test")!.ice_locatorCacheTimeout(0).ice_ping() // No locator cache. + count += 2 + try test(count == locator.getRequestCount()) + try communicator.stringToProxy("test")!.ice_locatorCacheTimeout(2).ice_ping() // 2s timeout + try test(count == locator.getRequestCount()) + Thread.sleep(forTimeInterval: 1.3) // 1300ms + try communicator.stringToProxy("test")!.ice_locatorCacheTimeout(1).ice_ping() // 1s timeout + count += 2 + try test(count == locator.getRequestCount()) + + try communicator.stringToProxy("test@TestAdapter")!.ice_locatorCacheTimeout(-1).ice_ping() + try test(count == locator.getRequestCount()) + try communicator.stringToProxy("test")!.ice_locatorCacheTimeout(-1).ice_ping() + try test(count == locator.getRequestCount()) + try communicator.stringToProxy("test@TestAdapter")!.ice_ping() + try test(count == locator.getRequestCount()) + try communicator.stringToProxy("test")!.ice_ping() + try test(count == locator.getRequestCount()) + + try test(communicator.stringToProxy("test")!.ice_locatorCacheTimeout(99).ice_getLocatorCacheTimeout() == 99) + + output.writeLine("ok") + + output.write("testing proxy from server... ") + obj = try checkedCast(prx: communicator.stringToProxy("test@TestAdapter")!, type: TestIntfPrx.self)! + var hello = try obj.getHello()! + try test(hello.ice_getAdapterId() == "TestAdapter") + try hello.sayHello() + hello = try obj.getReplicatedHello()! + try test(hello.ice_getAdapterId() == "ReplicatedAdapter") + try hello.sayHello() + output.writeLine("ok") + + output.write("testing locator request queuing... ") + hello = try obj.getReplicatedHello()!.ice_locatorCacheTimeout(0).ice_connectionCached(false) + count = try locator.getRequestCount() + try hello.ice_ping() + count += 1 + try test(count == locator.getRequestCount()) + + var results = [Promise<Void>](repeating: hello.sayHelloAsync(), count: 1000) + for r in results { + try r.wait() + } + results.removeAll() + try test(locator.getRequestCount() > count && + locator.getRequestCount() < count + 999) + + if try locator.getRequestCount() > count + 800 { + try output.write("queuing = \(locator.getRequestCount() - count)") + } + + count = try locator.getRequestCount() + hello = hello.ice_adapterId("unknown") + + results = [Promise<Void>](repeating: hello.sayHelloAsync(), count: 1000) + for r in results { + do { + try r.wait() + try test(false) + } catch is Ice.NotRegisteredException {} + } + results.removeAll() + // XXX: + // Take into account the retries. + try test(locator.getRequestCount() > count && + locator.getRequestCount() < count + 1999) + + if try locator.getRequestCount() > count + 800 { + try output.write("queuing = \(locator.getRequestCount() - count)") + } + output.writeLine("ok") + + output.write("testing adapter locator cache... ") + do { + try communicator.stringToProxy("test@TestAdapter3")!.ice_ping() + try test(false) + } catch let ex as Ice.NotRegisteredException { + try test(ex.kindOfObject == "object adapter") + try test(ex.id == "TestAdapter3") + } + + try registry.setAdapterDirectProxy(id: "TestAdapter3", proxy: locator.findAdapterById("TestAdapter")) + do { + try communicator.stringToProxy("test@TestAdapter3")!.ice_ping() + try registry.setAdapterDirectProxy( + id: "TestAdapter3", + proxy: communicator.stringToProxy("dummy:\(helper.getTestEndpoint(num: 99))") + ) + try communicator.stringToProxy("test@TestAdapter3")!.ice_ping() + } catch { + try test(false) + } + + do { + try communicator.stringToProxy("test@TestAdapter3")!.ice_locatorCacheTimeout(0).ice_ping() + try test(false) + } catch is Ice.LocalException {} + + do { + try communicator.stringToProxy("test@TestAdapter3")!.ice_ping() + try test(false) + } catch is Ice.LocalException {} + + try registry.setAdapterDirectProxy(id: "TestAdapter3", proxy: locator.findAdapterById("TestAdapter")) + do { + try communicator.stringToProxy("test@TestAdapter3")!.ice_ping() + } catch { + try test(false) + } + output.writeLine("ok") + + output.write("testing well-known object locator cache... ") + try registry.addObject(communicator.stringToProxy("test3@TestUnknown")) + do { + try communicator.stringToProxy("test3")!.ice_ping() + try test(false) + } catch let ex as Ice.NotRegisteredException { + try test(ex.kindOfObject == "object adapter") + try test(ex.id == "TestUnknown") + } + try registry.addObject(communicator.stringToProxy("test3@TestAdapter4")) // Update + try registry.setAdapterDirectProxy(id: "TestAdapter4", + proxy: communicator.stringToProxy("dummy:\(helper.getTestEndpoint(num: 99))")) + do { + try communicator.stringToProxy("test3")!.ice_ping() + try test(false) + } catch is Ice.LocalException {} + + try registry.setAdapterDirectProxy(id: "TestAdapter4", proxy: locator.findAdapterById("TestAdapter")) + do { + try communicator.stringToProxy("test3")!.ice_ping() + } catch { + try test(false) + } + + try registry.setAdapterDirectProxy(id: "TestAdapter4", + proxy: communicator.stringToProxy("dummy:\(helper.getTestEndpoint(num: 99))")) + do { + try communicator.stringToProxy("test3")!.ice_ping() + } catch { + try test(false) + } + + do { + try communicator.stringToProxy("test@TestAdapter4")!.ice_locatorCacheTimeout(0).ice_ping() + try test(false) + } catch is Ice.LocalException {} + + do { + try communicator.stringToProxy("test@TestAdapter4")!.ice_ping() + try test(false) + } catch is Ice.LocalException {} + + do { + try communicator.stringToProxy("test3")!.ice_ping() + try test(false) + } catch is Ice.LocalException {} + + try registry.addObject(communicator.stringToProxy("test3@TestAdapter")) + + do { + try communicator.stringToProxy("test3")!.ice_ping() + } catch { + try test(false) + } + + try registry.addObject(communicator.stringToProxy("test4")) + + do { + try communicator.stringToProxy("test4")!.ice_ping() + try test(false) + } catch is Ice.NoEndpointException {} + output.writeLine("ok") + + output.write("testing locator cache background updates... ") + do { + let properties = communicator.getProperties().clone() + properties.setProperty(key: "Ice.BackgroundLocatorCacheUpdates", value: "1") + var initData = Ice.InitializationData() + initData.properties = properties + + let ic = try helper.initialize(initData) + + try registry.setAdapterDirectProxy(id: "TestAdapter5", proxy: locator.findAdapterById("TestAdapter")) + try registry.addObject(communicator.stringToProxy("test3@TestAdapter")) + + count = try locator.getRequestCount() + try ic.stringToProxy("test@TestAdapter5")!.ice_locatorCacheTimeout(0).ice_ping() // No locator cache. + try ic.stringToProxy("test3")!.ice_locatorCacheTimeout(0).ice_ping() // No locator cache. + count += 3 + try test(count == locator.getRequestCount()) + try registry.setAdapterDirectProxy(id: "TestAdapter5", proxy: nil) + try registry.addObject(communicator.stringToProxy("test3:" + helper.getTestEndpoint(num: 99))) + try ic.stringToProxy("test@TestAdapter5")!.ice_locatorCacheTimeout(10).ice_ping() // 10s timeout. + try ic.stringToProxy("test3")!.ice_locatorCacheTimeout(10).ice_ping() // 10s timeout. + try test(count == locator.getRequestCount()) + Thread.sleep(forTimeInterval: 1.2) + + // The following request should trigger the background + // updates but still use the cached endpoints and + // therefore succeed. + try ic.stringToProxy("test@TestAdapter5")!.ice_locatorCacheTimeout(1).ice_ping() // 1s timeout. + try ic.stringToProxy("test3")!.ice_locatorCacheTimeout(1).ice_ping() // 1s timeout. + + do { + while true { + try ic.stringToProxy("test@TestAdapter5")!.ice_locatorCacheTimeout(1).ice_ping() // 1s timeout. + Thread.sleep(forTimeInterval: 0.1) + } + } catch is Ice.LocalException { + // Expected to fail once they endpoints have been updated in the background. + } + + do { + while true { + try ic.stringToProxy("test3")!.ice_locatorCacheTimeout(1).ice_ping() // 1s timeout. + Thread.sleep(forTimeInterval: 0.1) + } + } catch is Ice.LocalException { + // Expected to fail once they endpoints have been updated in the background. + } + ic.destroy() + } + output.writeLine("ok") + + output.write("testing proxy from server after shutdown... ") + hello = try obj.getReplicatedHello()! + try obj.shutdown() + try manager.startServer() + try hello.sayHello() + output.writeLine("ok") + + output.write("testing object migration... ") + hello = try checkedCast(prx: communicator.stringToProxy("hello")!, type: HelloPrx.self)! + try obj.migrateHello() + try hello.ice_getConnection()!.close(.GracefullyWithWait) + try hello.sayHello() + try obj.migrateHello() + try hello.sayHello() + try obj.migrateHello() + try hello.sayHello() + output.writeLine("ok") + + output.write("testing locator encoding resolution... ") + hello = try checkedCast(prx: communicator.stringToProxy("hello")!, type: HelloPrx.self)! + count = try locator.getRequestCount() + try communicator.stringToProxy("test@TestAdapter")!.ice_encodingVersion(Ice.Encoding_1_1).ice_ping() + try test(count == locator.getRequestCount()) + try communicator.stringToProxy("test@TestAdapter10")!.ice_encodingVersion(Ice.Encoding_1_0).ice_ping() + count += 1 + try test(count == locator.getRequestCount()) + try communicator.stringToProxy("test -e 1.0@TestAdapter10-2")!.ice_ping() + count += 1 + try test(count == locator.getRequestCount()) + output.writeLine("ok") + + output.write("shutdown server... ") + try obj.shutdown() + output.writeLine("ok") + + output.write("testing whether server is gone... ") + do { + try obj2.ice_ping() + try test(false) + } catch is Ice.LocalException {} + + do { + try obj3.ice_ping() + try test(false) + } catch is Ice.LocalException {} + + do { + try obj5.ice_ping() + try test(false) + } catch is Ice.LocalException {} + output.writeLine("ok") + + output.write("testing indirect proxies to collocated objects... ") + + // + // Set up test for calling a collocated object through an + // indirect, adapterless reference. + // + let properties = communicator.getProperties() + properties.setProperty(key: "Ice.PrintAdapterReady", value: "0") + let adapter = try communicator.createObjectAdapterWithEndpoints(name: "Hello", endpoints: "tcp -h *") + try adapter.setLocator(locator) + + var ident = Ice.Identity() + ident.name = UUID().uuidString + try registry.addObject(adapter.add(servant: HelloDisp(HelloI()), id: ident)) + try adapter.activate() + + /* let helloPrx */ _ = try checkedCast( + prx: communicator.stringToProxy("\"\(communicator.identityToString(ident))\"")!, + type: HelloPrx.self + )! + + // TODO: in Swift the call doesn't use collocation optimization because + // ServantManager::hasServant only checks C++ ASM for the given identity + // try test(helloPrx.ice_getConnection() == nil) + adapter.deactivate() + output.writeLine("ok") + + output.write("shutdown server manager... ") + try manager.shutdown() + output.writeLine("ok") +} diff --git a/swift/test/Ice/location/Client.swift b/swift/test/Ice/location/Client.swift new file mode 100644 index 00000000000..01c6d81a178 --- /dev/null +++ b/swift/test/Ice/location/Client.swift @@ -0,0 +1,23 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import PromiseKit +import TestCommon + +public class Client: TestHelperI { + public override func run(args: [String]) throws { + let properties = try createTestProperties(args) + properties.setProperty(key: "Ice.Default.Locator", + value: "locator:\(getTestEndpoint(properties: properties, num: 0))") + var initData = Ice.InitializationData() + initData.properties = properties + + let communicator = try initialize(initData) + defer { + communicator.destroy() + } + try allTests(self) + } +} diff --git a/swift/test/Ice/location/Server.swift b/swift/test/Ice/location/Server.swift new file mode 100644 index 00000000000..4bb468638db --- /dev/null +++ b/swift/test/Ice/location/Server.swift @@ -0,0 +1,49 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Dispatch +import Ice +import TestCommon + +class Server: TestHelperI { + public override func run(args: [String]) throws { + // + // Register the server manager. The server manager creates a new + // 'server'(a server isn't a different process, it's just a new + // communicator and object adapter). + // + let properties = try createTestProperties(args) + properties.setProperty(key: "Ice.ThreadPool.Server.Size", value: "2") + var initData = Ice.InitializationData() + initData.properties = properties + + let communicator = try initialize(initData) + defer { + communicator.destroy() + } + + communicator.getProperties().setProperty(key: "ServerManagerAdapter.Endpoints", value: getTestEndpoint(num: 0)) + let adapter = try communicator.createObjectAdapter("ServerManagerAdapter") + + // + // We also register a sample server locator which implements the + // locator interface, this locator is used by the clients and the + // 'servers' created with the server manager interface. + // + let registry = ServerLocatorRegistry() + let object = ServerManagerI(registry: registry, helper: self) + try adapter.add(servant: ServerManagerDisp(object), id: Ice.stringToIdentity("ServerManager")) + try registry.addObject(adapter.createProxy(Ice.stringToIdentity("ServerManager"))) + let registryPrx = try uncheckedCast(prx: adapter.add(servant: TestLocatorRegistryDisp(registry), + id: Ice.stringToIdentity("registry")), + type: Ice.LocatorRegistryPrx.self) + + let locator = ServerLocator(registry: registry, registryPrx: registryPrx) + try adapter.add(servant: TestLocatorDisp(locator), id: Ice.stringToIdentity("locator")) + + try adapter.activate() + serverReady() + communicator.waitForShutdown() + } +} diff --git a/swift/test/Ice/location/Test.ice b/swift/test/Ice/location/Test.ice new file mode 100644 index 00000000000..00bc7b3aedb --- /dev/null +++ b/swift/test/Ice/location/Test.ice @@ -0,0 +1,50 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#pragma once + +#include <Ice/Locator.ice> + +module Test +{ + +interface TestLocatorRegistry extends ::Ice::LocatorRegistry +{ + // + // Allow remote addition of objects to the locator registry. + // + void addObject(Object* obj); +} + +interface TestLocator extends ::Ice::Locator +{ + // + // Returns the number of request on the locator interface. + // + ["cpp:const"] idempotent int getRequestCount(); +} + +interface ServerManager +{ + void startServer(); + void shutdown(); +} + +interface Hello +{ + void sayHello(); +} + +interface TestIntf +{ + void shutdown(); + + Hello* getHello(); + + Hello* getReplicatedHello(); + + void migrateHello(); +} + +} diff --git a/swift/test/Ice/location/TestI.swift b/swift/test/Ice/location/TestI.swift new file mode 100644 index 00000000000..80eb1ebf2e3 --- /dev/null +++ b/swift/test/Ice/location/TestI.swift @@ -0,0 +1,270 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// +import Ice +import PromiseKit +import TestCommon + +class HelloI: Hello { + func sayHello(current _: Ice.Current) {} +} + +class TestI: TestIntf { + var _adapter1: Ice.ObjectAdapter + var _adapter2: Ice.ObjectAdapter + var _registry: ServerLocatorRegistry + + init(adapter1: Ice.ObjectAdapter, + adapter2: Ice.ObjectAdapter, + registry: ServerLocatorRegistry) throws { + _adapter1 = adapter1 + _adapter2 = adapter2 + _registry = registry + + try _registry.addObject(_adapter1.add(servant: HelloDisp(HelloI()), id: Ice.stringToIdentity("hello"))) + } + + func shutdown(current _: Ice.Current) throws { + _adapter1.getCommunicator().shutdown() + } + + func getHello(current _: Ice.Current) throws -> HelloPrx? { + return try uncheckedCast(prx: _adapter1.createIndirectProxy(Ice.stringToIdentity("hello")), + type: HelloPrx.self) + } + + func getReplicatedHello(current _: Ice.Current) throws -> HelloPrx? { + return try uncheckedCast(prx: _adapter1.createProxy(Ice.stringToIdentity("hello")), + type: HelloPrx.self) + } + + func migrateHello(current _: Ice.Current) throws { + let id = try Ice.stringToIdentity("hello") + do { + try _registry.addObject(_adapter2.add(servant: _adapter1.remove(id), id: id)) + } catch is Ice.NotRegisteredException { + try _registry.addObject(_adapter1.add(servant: _adapter2.remove(id), id: id)) + } + } +} + +class ServerManagerI: ServerManager { + var _registry: ServerLocatorRegistry + var _helper: TestHelper + var _communicators = [Ice.Communicator]() + var _nextPort: Int32 = 1 + + init(registry: ServerLocatorRegistry, helper: TestHelper) { + _registry = registry + _helper = helper + } + + func startServer(current _: Ice.Current) throws { + for c in _communicators { + c.waitForShutdown() + c.destroy() + } + _communicators.removeAll() + + // + // Simulate a server: create a new communicator and object + // adapter. The object adapter is started on a system allocated + // port. The configuration used here contains the Ice.Locator + // configuration variable. The new object adapter will register + // its endpoints with the locator and create references containing + // the adapter id instead of the endpoints. + // + var initData = Ice.InitializationData() + let properties = _helper.communicator().getProperties().clone() + properties.setProperty(key: "TestAdapter.AdapterId", value: "TestAdapter") + properties.setProperty(key: "TestAdapter.ReplicaGroupId", value: "ReplicatedAdapter") + properties.setProperty(key: "TestAdapter2.AdapterId", value: "TestAdapter2") + initData.properties = properties + + let serverCommunicator = try _helper.initialize(initData) + _communicators.append(serverCommunicator) + + // + // Use fixed port to ensure that OA re-activation doesn't re-use previous port from + // another OA(e.g.: TestAdapter2 is re-activated using port of TestAdapter). + // + for i in 1 ... 10 { + var adapter: Ice.ObjectAdapter! + var adapter2: Ice.ObjectAdapter! + + do { + _nextPort += 1 + serverCommunicator.getProperties().setProperty(key: "TestAdapter.Endpoints", + value: _helper.getTestEndpoint(num: _nextPort)) + + _nextPort += 1 + serverCommunicator.getProperties().setProperty(key: "TestAdapter2.Endpoints", + value: _helper.getTestEndpoint(num: _nextPort)) + + adapter = try serverCommunicator.createObjectAdapter("TestAdapter") + adapter2 = try serverCommunicator.createObjectAdapter("TestAdapter2") + + let locator = try serverCommunicator.stringToProxy("locator:\(_helper.getTestEndpoint(num: 0))")! + try adapter.setLocator(uncheckedCast(prx: locator, type: Ice.LocatorPrx.self)) + try adapter2.setLocator(uncheckedCast(prx: locator, type: Ice.LocatorPrx.self)) + + let object = try TestI(adapter1: adapter, adapter2: adapter2, registry: _registry) + try _registry.addObject(adapter.add(servant: TestIntfDisp(object), id: Ice.stringToIdentity("test"))) + try _registry.addObject(adapter.add(servant: TestIntfDisp(object), id: Ice.stringToIdentity("test2"))) + _ = try adapter.add(servant: TestIntfDisp(object), id: Ice.stringToIdentity("test3")) + + try adapter.activate() + try adapter2.activate() + break + } catch let ex as Ice.SocketException { + if i == 10 { + throw ex + } + + // Retry, if OA creation fails with EADDRINUSE(this can occur when running with JS web + // browser clients if the driver uses ports in the same range as this test, ICE-8148) + if adapter != nil { + adapter.destroy() + } + + if adapter2 != nil { + adapter2.destroy() + } + } + } + } + + func shutdown(current: Ice.Current) throws { + for c in _communicators { + c.destroy() + } + _communicators.removeAll() + current.adapter!.getCommunicator().shutdown() + } +} + +class ServerLocator: TestLocator { + var _registry: ServerLocatorRegistry + var _registryPrx: Ice.LocatorRegistryPrx + var _requestCount: Int32 + + init(registry: ServerLocatorRegistry, registryPrx: Ice.LocatorRegistryPrx) { + _registry = registry + _registryPrx = registryPrx + _requestCount = 0 + } + + func findAdapterByIdAsync(id: String, current: Ice.Current) -> Promise<ObjectPrx?> { + _requestCount += 1 + if id == "TestAdapter10" || id == "TestAdapter10-2" { + precondition(current.encoding == Ice.Encoding_1_0) + return Promise<ObjectPrx?> { seal in + do { + try seal.fulfill(_registry.getAdapter("TestAdapter")) + } catch { + seal.reject(error) + } + } + } else { + // We add a small delay to make sure locator request queuing gets tested when + // running the test on a fast machine + Thread.sleep(forTimeInterval: 0.1) + return Promise<ObjectPrx?> { seal in + do { + try seal.fulfill(_registry.getAdapter(id)) + } catch { + seal.reject(error) + } + } + } + } + + func findObjectByIdAsync(id: Ice.Identity, current _: Ice.Current) -> Promise<ObjectPrx?> { + _requestCount += 1 + // We add a small delay to make sure locator request queuing gets tested when + // running the test on a fast machine + Thread.sleep(forTimeInterval: 0.1) + return Promise<ObjectPrx?> { seal in + do { + try seal.fulfill(_registry.getObject(id)) + } catch { + seal.reject(error) + } + } + } + + func getRegistry(current _: Ice.Current) throws -> Ice.LocatorRegistryPrx? { + return _registryPrx + } + + func getRequestCount(current _: Ice.Current) throws -> Int32 { + return _requestCount + } +} + +class ServerLocatorRegistry: TestLocatorRegistry { + var _adapters = [String: Ice.ObjectPrx]() + var _objects = [Ice.Identity: Ice.ObjectPrx]() + var _lock = os_unfair_lock() + + func setAdapterDirectProxyAsync(id: String, proxy: ObjectPrx?, current _: Current) -> Promise<Void> { + return Promise<Void> { seal in + withLock(&_lock) { + if let obj = proxy { + self._adapters[id] = obj + } else { + self._adapters.removeValue(forKey: id) + } + } + seal.fulfill(()) + } + } + + func setReplicatedAdapterDirectProxyAsync(adapterId adapter: String, + replicaGroupId replica: String, + p: Ice.ObjectPrx?, + current _: Ice.Current) -> Promise<Void> { + return Promise<Void> { seal in + withLock(&_lock) { + if let obj = p { + _adapters[adapter] = obj + _adapters[replica] = obj + } else { + _adapters.removeValue(forKey: adapter) + _adapters.removeValue(forKey: replica) + } + } + seal.fulfill(()) + } + } + + func setServerProcessProxyAsync(id _: String, proxy _: Ice.ProcessPrx?, current _: Ice.Current) -> Promise<Void> { + return Promise<Void> { seal in + seal.fulfill(()) + } + } + + func addObject(_ obj: Ice.ObjectPrx?) { + withLock(&_lock) { + _objects[obj!.ice_getIdentity()] = obj + } + } + + func addObject(obj: Ice.ObjectPrx?, current _: Ice.Current) throws { + addObject(obj) + } + + func getAdapter(_ id: String) throws -> Ice.ObjectPrx { + guard let obj = _adapters[id] else { + throw Ice.AdapterNotFoundException() + } + return obj + } + + func getObject(_ id: Ice.Identity) throws -> Ice.ObjectPrx { + guard let obj = _objects[id] else { + throw Ice.ObjectNotFoundException() + } + return obj + } +} diff --git a/swift/test/Ice/objects/AllTests.swift b/swift/test/Ice/objects/AllTests.swift new file mode 100644 index 00000000000..ac10fc78e25 --- /dev/null +++ b/swift/test/Ice/objects/AllTests.swift @@ -0,0 +1,248 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Foundation +import Ice +import PromiseKit +import TestCommon + +func allTests(_ helper: TestHelper) throws -> InitialPrx { + func test(_ value: Bool, file: String = #file, line: Int = #line) throws { + try helper.test(value, file: file, line: line) + } + let output = helper.getWriter() + + let communicator = helper.communicator() + output.write("testing stringToProxy... ") + var ref = "initial:\(helper.getTestEndpoint(num: 0))" + var base = try communicator.stringToProxy(ref)! + output.writeLine("ok") + + output.write("testing checked cast... ") + let initial = try checkedCast(prx: base, type: InitialPrx.self)! + try test(initial == base) + output.writeLine("ok") + + output.write("getting B1... ") + var b1 = try initial.getB1()! + output.writeLine("ok") + + output.write("getting B2... ") + let b2 = try initial.getB2()! + output.writeLine("ok") + + output.write("getting C... ") + _ = try initial.getC()! + output.writeLine("ok") + + output.write("getting D... ") + let d = try initial.getD()! + output.writeLine("ok") + + output.write("checking consistency... ") + try test(b1 !== b2) + //test(b1 != c); + //test(b1 != d); + //test(b2 != c); + //test(b2 != d); + //test(c != d); + try test(b1.theB === b1) + try test(b1.theC == nil) + try test(b1.theA is B) + try test((b1.theA as! B).theA === b1.theA) + try test((b1.theA as! B).theB === b1) + //test(((B)b1.theA).theC is C); // Redundant -- theC is always of type C + try test((b1.theA as! B).theC!.theB === b1.theA) + try test(b1.preMarshalInvoked) + try test(b1.postUnmarshalInvoked) + try test(b1.theA!.preMarshalInvoked) + try test(b1.theA!.postUnmarshalInvoked) + try test((b1.theA as! B).theC!.preMarshalInvoked) + try test((b1.theA as! B).theC!.postUnmarshalInvoked) + + // More tests possible for b2 and d, but I think this is already + // sufficient. + try test(b2.theA === b2) + try test(d.theC === nil) + output.writeLine("ok") + + output.write("getting B1, B2, C, and D all at once... ") + let (b1out, b2out, cout, dout) = try initial.getAll() + try test(b1out !== nil) + try test(b2out !== nil) + try test(cout !== nil) + try test(dout !== nil) + output.writeLine("ok") + + output.write("checking consistency... ") + try test(b1out !== b2out) + try test(b1out!.theA === b2out) + try test(b1out!.theB === b1out) + try test(b1out!.theC === nil) + try test(b2out!.theA === b2out) + try test(b2out!.theB === b1out) + try test(b2out!.theC === cout) + try test(cout!.theB === b2out) + try test(dout!.theA === b1out) + try test(dout!.theB === b2out) + try test(dout!.theC === nil) + try test(dout!.preMarshalInvoked) + try test(dout!.postUnmarshalInvoked) + try test(dout!.theA!.preMarshalInvoked) + try test(dout!.theA!.postUnmarshalInvoked) + try test(dout!.theB!.preMarshalInvoked) + try test(dout!.theB!.postUnmarshalInvoked) + try test(dout!.theB!.theC!.preMarshalInvoked) + try test(dout!.theB!.theC!.postUnmarshalInvoked) + output.writeLine("ok") + + output.write("getting I, J and H... ") + let i = try initial.getI() + try test(i !== nil) + let j = try initial.getJ() + try test(j != nil) + let h = try initial.getH() + try test(h != nil) + output.writeLine("ok") + + output.write("getting K... ") + let k = try initial.getK()! + let l = k.value as! L + try test(l.data == "l") + output.writeLine("ok") + + output.write("testing Value as parameter... ") + do { + let (v3, v2) = try initial.opValue(L(data: "l")) + try test((v2 as! L).data == "l") + try test((v3 as! L).data == "l") + } + do { + let (v3, v2) = try initial.opValueSeq([L(data: "l")]) + try test((v2[0] as! L).data == "l") + try test((v3[0] as! L).data == "l") + } + do { + let (v3, v2) = try initial.opValueMap(["l": L(data: "l")]) + try test((v2["l"]! as! L).data == "l") + try test((v3["l"]! as! L).data == "l") + } + output.writeLine("ok") + + output.write("getting D1... ") + do { + var d1 = D1(a1: A1(name: "a1"), + a2: A1(name: "a2"), + a3: A1(name: "a3"), + a4: A1(name: "a4")) + d1 = try initial.getD1(d1)! + try test(d1.a1!.name == "a1") + try test(d1.a2!.name == "a2") + try test(d1.a3!.name == "a3") + try test(d1.a4!.name == "a4") + } + output.writeLine("ok") + + output.write("throw EDerived... ") + do { + try initial.throwEDerived() + try test(false) + } catch let ederived as EDerived { + try test(ederived.a1!.name == "a1") + try test(ederived.a2!.name == "a2") + try test(ederived.a3!.name == "a3") + try test(ederived.a4!.name == "a4") + } + output.writeLine("ok") + + output.write("setting G... ") + do { + try initial.setG(G(theS: S(str: "hello"), str: "g")) + } catch is Ice.OperationNotExistException {} + output.writeLine("ok") + + output.write("setting I... ") + try initial.setI(i) + try initial.setI(j) + try initial.setI(h) + output.writeLine("ok") + + output.write("testing sequences...") + do { + var (retS, outS) = try initial.opBaseSeq([Base]()) + (retS, outS) = try initial.opBaseSeq([Base(theS: S(), str: "")]) + try test(retS.count == 1 && outS.count == 1) + } catch is Ice.OperationNotExistException {} + output.writeLine("ok") + + output.write("testing recursive type... ") + let top = Recursive() + var p = top + do { + for depth in 0 ..< 1000 { + p.v = Recursive() + p = p.v! + if (depth < 10 && (depth % 10) == 0) || + (depth < 1000 && (depth % 100) == 0) || + (depth < 10000 && (depth % 1000) == 0) || + (depth % 10000) == 0 { + try initial.setRecursive(top) + } + } + try test(!initial.supportsClassGraphDepthMax()) + } catch is Ice.UnknownLocalException { + // Expected marshal exception from the server(max class graph depth reached) + } catch is Ice.UnknownException { + // Expected stack overflow from the server(Java only) + } + try initial.setRecursive(Recursive()) + output.writeLine("ok") + + output.write("testing compact ID...") + do { + try test(initial.getCompact() != nil) + } catch is Ice.OperationNotExistException {} + output.writeLine("ok") + + output.write("testing marshaled results...") + b1 = try initial.getMB()! + try test(b1.theB === b1) + b1 = try initial.getAMDMBAsync().wait()! + try test(b1.theB === b1) + output.writeLine("ok") + + output.write("testing UnexpectedObjectException...") + ref = "uoet:\(helper.getTestEndpoint(num: 0))" + base = try communicator.stringToProxy(ref)! + let uoet = uncheckedCast(prx: base, type: UnexpectedObjectExceptionTestPrx.self) + do { + _ = try uoet.op() + try test(false) + } catch let ex as Ice.UnexpectedObjectException { + try test(ex.type == "::Test::AlsoEmpty") + try test(ex.expectedType == "::Test::Empty") + } catch { + output.writeLine("\(error)") + try test(false) + } + output.writeLine("ok") + + output.write("testing class containing complex dictionary... ") + do { + let k1 = StructKey(i: 1, s: "1") + let k2 = StructKey(i: 2, s: "2") + let (m2, m1) = try initial.opM(M(v: [k1: L(data: "one"), k2: L(data: "two")])) + try test(m1!.v.count == 2) + try test(m2!.v.count == 2) + + try test(m1!.v[k1]!!.data == "one") + try test(m2!.v[k1]!!.data == "one") + + try test(m1!.v[k2]!!.data == "two") + try test(m2!.v[k2]!!.data == "two") + } + output.writeLine("ok") + + return initial +} diff --git a/swift/test/Ice/objects/Client.swift b/swift/test/Ice/objects/Client.swift new file mode 100644 index 00000000000..7fd5decd901 --- /dev/null +++ b/swift/test/Ice/objects/Client.swift @@ -0,0 +1,31 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import PromiseKit +import TestCommon + +public class Client: TestHelperI { + public override func run(args: [String]) throws { + let properties = try createTestProperties(args) + var initData = InitializationData() + initData.properties = properties + initData.classResolverPrefix = ["IceObjects"] + let communicator = try initialize(initData) + defer { + communicator.destroy() + } + try communicator.getValueFactoryManager().add(factory: { _ in BI() }, id: "::Test::B") + try communicator.getValueFactoryManager().add(factory: { _ in CI() }, id: "::Test::C") + try communicator.getValueFactoryManager().add(factory: { _ in DI() }, id: "::Test::D") + try communicator.getValueFactoryManager().add(factory: { _ in EI() }, id: "::Test::E") + try communicator.getValueFactoryManager().add(factory: { _ in FI() }, id: "::Test::F") + try communicator.getValueFactoryManager().add(factory: { _ in II() }, id: "::Test::I") + try communicator.getValueFactoryManager().add(factory: { _ in JI() }, id: "::Test::J") + try communicator.getValueFactoryManager().add(factory: { _ in HI() }, id: "::Test::H") + + let initial = try allTests(self) + try initial.shutdown() + } +} diff --git a/swift/test/Ice/objects/Collocated.swift b/swift/test/Ice/objects/Collocated.swift new file mode 100644 index 00000000000..d5dec5c8cdd --- /dev/null +++ b/swift/test/Ice/objects/Collocated.swift @@ -0,0 +1,41 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import TestCommon + +class Collocated: TestHelperI { + public override func run(args: [String]) throws { + let properties = try createTestProperties(args) + properties.setProperty(key: "Ice.Warn.Dispatch", value: "0") + var initData = Ice.InitializationData() + initData.properties = properties + initData.classResolverPrefix = ["IceObjects"] + let communicator = try initialize(initData) + defer { + communicator.destroy() + } + + try communicator.getValueFactoryManager().add(factory: { _ in BI() }, id: "::Test::B") + try communicator.getValueFactoryManager().add(factory: { _ in CI() }, id: "::Test::C") + try communicator.getValueFactoryManager().add(factory: { _ in DI() }, id: "::Test::D") + try communicator.getValueFactoryManager().add(factory: { _ in EI() }, id: "::Test::E") + try communicator.getValueFactoryManager().add(factory: { _ in FI() }, id: "::Test::F") + try communicator.getValueFactoryManager().add(factory: { _ in II() }, id: "::Test::I") + try communicator.getValueFactoryManager().add(factory: { _ in JI() }, id: "::Test::J") + try communicator.getValueFactoryManager().add(factory: { _ in HI() }, id: "::Test::H") + + communicator.getProperties().setProperty(key: "TestAdapter.Endpoints", + value: getTestEndpoint(num: 0)) + let adapter = try communicator.createObjectAdapter("TestAdapter") + try adapter.add(servant: InitialDisp(InitialI(adapter)), id: Ice.stringToIdentity("initial")) + try adapter.add(servant: BlobjectDisp(UnexpectedObjectExceptionTestI()), + id: Ice.stringToIdentity("uoet")) + try adapter.activate() + + let initial = try allTests(self) + // We must call shutdown even in the collocated case for cyclic dependency cleanup + try initial.shutdown() + } +} diff --git a/swift/test/Ice/objects/Derived.ice b/swift/test/Ice/objects/Derived.ice new file mode 100644 index 00000000000..57c75cb5906 --- /dev/null +++ b/swift/test/Ice/objects/Derived.ice @@ -0,0 +1,17 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#pragma once + +#include <Test.ice> + +module Test +{ + +class Derived extends Base +{ + string b; +} + +} diff --git a/swift/test/Ice/objects/DerivedEx.ice b/swift/test/Ice/objects/DerivedEx.ice new file mode 100644 index 00000000000..49a06129a65 --- /dev/null +++ b/swift/test/Ice/objects/DerivedEx.ice @@ -0,0 +1,16 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#pragma once + +#include <Test.ice> + +module Test +{ + +exception DerivedEx extends BaseEx +{ +} + +} diff --git a/swift/test/Ice/objects/II.swift b/swift/test/Ice/objects/II.swift new file mode 100644 index 00000000000..214b3e29d6b --- /dev/null +++ b/swift/test/Ice/objects/II.swift @@ -0,0 +1,10 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// +import Ice + +public class II: Ice.InterfaceByValue { + public required init() { + super.init(id: "::Test::I") + } +} diff --git a/swift/test/Ice/objects/Server.swift b/swift/test/Ice/objects/Server.swift new file mode 100644 index 00000000000..85477fe85ed --- /dev/null +++ b/swift/test/Ice/objects/Server.swift @@ -0,0 +1,33 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import TestCommon + +class Server: TestHelperI { + public override func run(args: [String]) throws { + let properties = try createTestProperties(args) + properties.setProperty(key: "Ice.Warn.Dispatch", value: "0") + var initData = Ice.InitializationData() + initData.properties = properties + initData.classResolverPrefix = ["IceObjects"] + let communicator = try initialize(initData) + defer { + communicator.destroy() + } + + try communicator.getValueFactoryManager().add(factory: { _ in II() }, id: "::Test::I") + try communicator.getValueFactoryManager().add(factory: { _ in JI() }, id: "::Test::J") + try communicator.getValueFactoryManager().add(factory: { _ in HI() }, id: "::Test::H") + + communicator.getProperties().setProperty(key: "TestAdapter.Endpoints", value: getTestEndpoint(num: 0)) + let adapter = try communicator.createObjectAdapter("TestAdapter") + try adapter.add(servant: InitialDisp(InitialI(adapter)), id: Ice.stringToIdentity("initial")) + try adapter.add(servant: BlobjectDisp(UnexpectedObjectExceptionTestI()), + id: Ice.stringToIdentity("uoet")) + try adapter.activate() + serverReady() + communicator.waitForShutdown() + } +} diff --git a/swift/test/Ice/objects/Test.ice b/swift/test/Ice/objects/Test.ice new file mode 100644 index 00000000000..adbd835878b --- /dev/null +++ b/swift/test/Ice/objects/Test.ice @@ -0,0 +1,307 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#pragma once + +[["swift:class-resolver-prefix:IceObjects", + "suppress-warning:deprecated"]] // For classes with operations + +module Test +{ + +struct S +{ + string str; +} + +class Base +{ + S theS; + string str; +} + +exception BaseEx +{ + string reason; +} + +class AbstractBase extends Base +{ + void op(); +} + +class B; +class C; + +class A +{ + B theB; + C theC; + + bool preMarshalInvoked; + bool postUnmarshalInvoked; +} + +class B extends A +{ + A theA; +} + +class C +{ + B theB; + + bool preMarshalInvoked; + bool postUnmarshalInvoked; +} + +class D +{ + A theA; + B theB; + C theC; + + bool preMarshalInvoked; + bool postUnmarshalInvoked; +} + +["protected"] class E +{ + int i; + string s; +} + +class F +{ + ["protected"] E e1; + E e2; +} + +// Exercise empty class with non-empty base +class G extends Base +{ +} + +interface I +{ +} + +interface J extends I +{ +} + +class H implements I +{ +} + +sequence<Base> BaseSeq; + +class CompactExt; + +class Compact(1) +{ +} + +const int CompactExtId = 789; + +class CompactExt(CompactExtId) extends Compact +{ +} + +module Inner +{ + +class A +{ + ::Test::A theA; +} + +exception Ex +{ + string reason; +} + +module Sub +{ + +class A +{ + ::Test::Inner::A theA; +} + +exception Ex +{ + string reason; +} + +} + +} + +class A1 +{ + string name; +} + +class B1 +{ + A1 a1; + A1 a2; +} + +class D1 extends B1 +{ + A1 a3; + A1 a4; +} + +exception EBase +{ + A1 a1; + A1 a2; +} + +exception EDerived extends EBase +{ + A1 a3; + A1 a4; +} + +class Recursive +{ + Recursive v; +} + +class K +{ + Value value; +} + +class L +{ + string data; +} + +sequence<Value> ValueSeq; +dictionary<string, Value> ValueMap; + +struct StructKey +{ + int i; + string s; +} + +dictionary<StructKey, L> LMap; + +class M +{ + LMap v; +} + +interface Initial +{ + void shutdown(); + B getB1(); + B getB2(); + C getC(); + D getD(); + E getE(); + F getF(); + + void setRecursive(Recursive p); + bool supportsClassGraphDepthMax(); + + ["marshaled-result"] B getMB(); + ["amd", "marshaled-result"] B getAMDMB(); + + void getAll(out B b1, out B b2, out C theC, out D theD); + + I getH(); + I getI(); + I getJ(); + K getK(); + + Value opValue(Value v1, out Value v2); + ValueSeq opValueSeq(ValueSeq v1, out ValueSeq v2); + ValueMap opValueMap(ValueMap v1, out ValueMap v2); + + D1 getD1(D1 d1); + void throwEDerived() throws EDerived; + + void setG(G theG); + void setI(I theI); + + BaseSeq opBaseSeq(BaseSeq inSeq, out BaseSeq outSeq); + + Compact getCompact(); + + Inner::A getInnerA(); + Inner::Sub::A getInnerSubA(); + + void throwInnerEx() throws Inner::Ex; + void throwInnerSubEx() throws Inner::Sub::Ex; + + M opM(M v1, out M v2); +} + +interface TestIntf +{ + Base opDerived(); + void throwDerived() throws BaseEx; +} + +class Empty +{ +} + +class AlsoEmpty +{ +} + +interface UnexpectedObjectExceptionTest +{ + Empty op(); +} + +// +// Remaining definitions are here to ensure that the generated code compiles. +// + +class COneMember +{ + Empty e; +} + +class CTwoMembers +{ + Empty e1; + Empty e2; +} + +exception EOneMember +{ + Empty e; +} + +exception ETwoMembers +{ + Empty e1; + Empty e2; +} + +struct SOneMember +{ + Empty e; +} + +struct STwoMembers +{ + Empty e1; + Empty e2; +} + +dictionary<int, COneMember> DOneMember; +dictionary<int, CTwoMembers> DTwoMembers; + +} diff --git a/swift/test/Ice/objects/TestI.swift b/swift/test/Ice/objects/TestI.swift new file mode 100644 index 00000000000..b86c709a875 --- /dev/null +++ b/swift/test/Ice/objects/TestI.swift @@ -0,0 +1,242 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import PromiseKit + +public class BI: B { + public override func ice_preMarshal() { + preMarshalInvoked = true + } + + public override func ice_postUnmarshal() { + postUnmarshalInvoked = true + } +} + +public class CI: C { + public override func ice_preMarshal() { + preMarshalInvoked = true + } + + public override func ice_postUnmarshal() { + postUnmarshalInvoked = true + } +} + +public class DI: D { + public override func ice_preMarshal() { + preMarshalInvoked = true + } + + public override func ice_postUnmarshal() { + postUnmarshalInvoked = true + } +} + +public class EI: E { + public required init() { + super.init(i: 1, s: "hello") + } + + public func checkValues() -> Bool { + return i == 1 && s == "hello" + } +} + +public class FI: F { + public required init() { + super.init() + } + + public init(e: E) { + super.init(e1: e, e2: e) + } + + public func checkValues() -> Bool { + return e1 !== nil && e1 === e2 + } +} + +public class HI: H {} + +public class II: Ice.InterfaceByValue { + public required init() { + super.init(id: "::Test::I") + } +} + +public class JI: Ice.InterfaceByValue { + public required init() { + super.init(id: "::Test::J") + } +} + +class InitialI: Initial { + var _adapter: Ice.ObjectAdapter + var _b1: B + var _b2: B + var _c: C + var _d: D + var _e: E + var _f: F + + init(_ adapter: Ice.ObjectAdapter) { + _adapter = adapter + _b1 = BI() + _b2 = BI() + _c = CI() + _d = DI() + _e = EI() + _f = FI(e: _e) + + _b1.theA = _b2 // Cyclic reference to another B + _b1.theB = _b1 // Self reference. + _b1.theC = nil // Null reference. + + _b2.theA = _b2 // Self reference, using base. + _b2.theB = _b1 // Cyclic reference to another B + _b2.theC = _c // Cyclic reference to a C. + + _c.theB = _b2 // Cyclic reference to a B. + + _d.theA = _b1 // Reference to a B. + _d.theB = _b2 // Reference to a B. + _d.theC = nil // Reference to a C. + } + + func getAll(current _: Ice.Current) throws -> (b1: B?, b2: B?, theC: C?, theD: D?) { + return (_b1, _b2, _c, _d) + } + + func getMB(current _: Current) throws -> B? { + return _b1 + } + + func getB1(current _: Ice.Current) throws -> B? { + return _b1 + } + + func getB2(current _: Ice.Current) throws -> B? { + return _b2 + } + + func getC(current _: Ice.Current) throws -> C? { + return _c + } + + func getD(current _: Ice.Current) throws -> D? { + return _d + } + + func getE(current _: Ice.Current) throws -> E? { + return _e + } + + func getF(current _: Ice.Current) throws -> F? { + return _f + } + + func getI(current _: Ice.Current) throws -> Ice.Value? { + return II() + } + + func getJ(current _: Ice.Current) throws -> Ice.Value? { + return JI() + } + + func getH(current _: Ice.Current) throws -> Ice.Value? { + return HI() + } + + func getK(current _: Ice.Current) throws -> K? { + return K(value: L(data: "l")) + } + + func opValue(v1: Ice.Value?, current _: Ice.Current) throws -> (returnValue: Ice.Value?, v2: Ice.Value?) { + return (v1, v1) + } + + func opValueSeq(v1: [Ice.Value?], current _: Ice.Current) throws -> (returnValue: [Ice.Value?], v2: [Ice.Value?]) { + return (v1, v1) + } + + func opValueMap(v1: [String: Ice.Value?], + current _: Ice.Current) throws -> (returnValue: [String: Ice.Value?], + v2: [String: Ice.Value?]) { + return (v1, v1) + } + + func setRecursive(p _: Recursive?, current _: Ice.Current) {} + + func supportsClassGraphDepthMax(current _: Ice.Current) throws -> Bool { + return true + } + + func getD1(d1: D1?, current _: Ice.Current) throws -> D1? { + return d1 + } + + func throwEDerived(current _: Ice.Current) throws { + throw EDerived(a1: A1(name: "a1"), + a2: A1(name: "a2"), + a3: A1(name: "a3"), + a4: A1(name: "a4")) + } + + func setG(theG _: G?, current _: Ice.Current) throws {} + + func setI(theI _: Ice.Value?, current _: Ice.Current) throws {} + + func opBaseSeq(inSeq: [Base?], current _: Ice.Current) throws -> (returnValue: [Base?], outSeq: [Base?]) { + return (inSeq, inSeq) + } + + func getCompact(current _: Ice.Current) throws -> Compact? { + return CompactExt() + } + + func shutdown(current _: Ice.Current) throws { + _adapter.getCommunicator().shutdown() + } + + func getInnerA(current _: Ice.Current) throws -> InnerA? { + return InnerA(theA: _b1) + } + + func getInnerSubA(current _: Ice.Current) throws -> InnerSubA? { + return InnerSubA(theA: InnerA(theA: _b1)) + } + + func throwInnerEx(current _: Ice.Current) throws { + throw InnerEx(reason: "Inner::Ex") + } + + func throwInnerSubEx(current _: Ice.Current) throws { + throw InnerSubEx(reason: "Inner::Sub::Ex") + } + + func getAMDMBAsync(current _: Ice.Current) -> Promise<B?> { + return Promise<B?> { seal in + seal.fulfill(_b1) + } + } + + func opM(v1: M?, current _: Ice.Current) throws -> (returnValue: M?, v2: M?) { + return (v1, v1) + } +} + +class UnexpectedObjectExceptionTestI: Ice.Blobject { + func ice_invoke(inEncaps _: Data, current: Ice.Current) throws -> (ok: Bool, outParams: Data) { + let communicator = current.adapter!.getCommunicator() + let ostr = Ice.OutputStream(communicator: communicator) + _ = ostr.startEncapsulation(encoding: current.encoding, format: .DefaultFormat) + let ae = AlsoEmpty() + ostr.write(ae) + ostr.writePendingValues() + ostr.endEncapsulation() + return (true, ostr.finished()) + } +} diff --git a/swift/test/Ice/operations/AllTests.swift b/swift/test/Ice/operations/AllTests.swift new file mode 100644 index 00000000000..884f22ad2cd --- /dev/null +++ b/swift/test/Ice/operations/AllTests.swift @@ -0,0 +1,56 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import TestCommon + +func allTests(helper: TestHelper) throws -> MyClassPrx { + func test(_ value: Bool, file: String = #file, line: Int = #line) throws { + try helper.test(value, file: file, line: line) + } + let output = helper.getWriter() + + let communicator = helper.communicator() + + let baseProxy = try communicator.stringToProxy("test:\(helper.getTestEndpoint(num: 0))")! + let cl = try checkedCast(prx: baseProxy, type: MyClassPrx.self)! + let derivedProxy = try checkedCast(prx: cl, type: MyDerivedClassPrx.self)! + + let bprx = try checkedCast(prx: try communicator.stringToProxy("b:\(helper.getTestEndpoint(num: 0))")!, + type: MBPrx.self)! + + output.write("testing twoway operations... ") + try twoways(helper, cl, bprx) + try twoways(helper, derivedProxy, bprx) + try derivedProxy.opDerived() + output.writeLine("ok") + + output.write("testing oneway operations... ") + try oneways(helper, cl) + try oneways(helper, derivedProxy) + output.writeLine("ok") + + output.write("testing twoway operations with AMI... ") + try twowaysAMI(helper, cl) + try twowaysAMI(helper, derivedProxy) + try derivedProxy.opDerived() + output.writeLine("ok") + + output.write("testing oneway operations with AMI... ") + try onewaysAMI(helper, cl) + try onewaysAMI(helper, derivedProxy) + output.writeLine("ok") + + output.write("testing batch oneway operations... ") + try batchOneways(helper, cl) + try batchOneways(helper, derivedProxy) + output.writeLine("ok") + + output.write("testing batch oneway operations with AMI... ") + try batchOneways(helper, cl) + try batchOneways(helper, derivedProxy) + output.writeLine("ok") + + return cl +} diff --git a/swift/test/Ice/operations/BatchOneways.swift b/swift/test/Ice/operations/BatchOneways.swift new file mode 100644 index 00000000000..699fe698775 --- /dev/null +++ b/swift/test/Ice/operations/BatchOneways.swift @@ -0,0 +1,109 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Darwin +import Ice +import TestCommon + +func batchOneways(_ helper: TestHelper, _ p: MyClassPrx) throws { + func test(_ value: Bool, file: String = #file, line: Int = #line) throws { + try helper.test(value, file: file, line: line) + } + + let bs1 = ByteSeq(repeating: 0, count: 10 * 1024) + let batch = p.ice_batchOneway() + try batch.ice_flushBatchRequests() // Empty flush + + _ = try p.opByteSOnewayCallCount() // Reset the call count + + for _ in 0 ..< 30 { + do { + try batch.opByteSOneway(bs1) + } catch is Ice.MemoryLimitException { + try test(false) + } + } + + var count: Int32 = 0 + while count < 27 { // 3 * 9 requests auto-flushed. + count += try p.opByteSOnewayCallCount() + usleep(100) + } + + var conn = try batch.ice_getConnection() + if conn != nil { + let batch1 = p.ice_batchOneway() + let batch2 = p.ice_batchOneway() + + try batch1.ice_ping() + try batch2.ice_ping() + try batch1.ice_flushBatchRequests() + try batch1.ice_getConnection()!.close(Ice.ConnectionClose.GracefullyWithWait) + try batch1.ice_ping() + try batch2.ice_ping() + + _ = try batch1.ice_getConnection() + _ = try batch2.ice_getConnection() + + try batch1.ice_ping() + try batch1.ice_getConnection()!.close(Ice.ConnectionClose.GracefullyWithWait) + try batch1.ice_ping() + try batch2.ice_ping() + } + + var identity = Ice.Identity() + identity.name = "invalid" + let batch3 = batch.ice_identity(identity) + try batch3.ice_ping() + try batch3.ice_flushBatchRequests() + + // Make sure that a bogus batch request doesn't cause troubles to other ones. + try batch3.ice_ping() + try batch.ice_ping() + try batch.ice_flushBatchRequests() + try batch.ice_ping() + + try p.ice_ping() + + var supportsCompress = true + do { + supportsCompress = try p.supportsCompress() + } catch is Ice.OperationNotExistException {} + + conn = try p.ice_getConnection() + if supportsCompress, + conn != nil, + p.ice_getCommunicator().getProperties().getProperty("Ice.Override.Compress") == "" { + let prx = try p.ice_getConnection()!.createProxy(p.ice_getIdentity()).ice_batchOneway() + + let batchC1 = uncheckedCast(prx: prx.ice_compress(false), type: MyClassPrx.self) + let batchC2 = uncheckedCast(prx: prx.ice_compress(true), type: MyClassPrx.self) + let batchC3 = uncheckedCast(prx: prx.ice_identity(identity), type: MyClassPrx.self) + + try batchC1.opByteSOneway(bs1) + try batchC1.opByteSOneway(bs1) + try batchC1.opByteSOneway(bs1) + try batchC1.ice_getConnection()!.flushBatchRequests(Ice.CompressBatch.Yes) + + try batchC2.opByteSOneway(bs1) + try batchC2.opByteSOneway(bs1) + try batchC2.opByteSOneway(bs1) + try batchC1.ice_getConnection()!.flushBatchRequests(Ice.CompressBatch.No) + + try batchC1.opByteSOneway(bs1) + try batchC1.opByteSOneway(bs1) + try batchC1.opByteSOneway(bs1) + try batchC1.ice_getConnection()!.flushBatchRequests(Ice.CompressBatch.BasedOnProxy) + + try batchC1.opByteSOneway(bs1) + try batchC2.opByteSOneway(bs1) + try batchC1.opByteSOneway(bs1) + try batchC1.ice_getConnection()!.flushBatchRequests(Ice.CompressBatch.BasedOnProxy) + + try batchC1.opByteSOneway(bs1) + try batchC3.opByteSOneway(bs1) + try batchC1.opByteSOneway(bs1) + try batchC1.ice_getConnection()!.flushBatchRequests(Ice.CompressBatch.BasedOnProxy) + } +} diff --git a/swift/test/Ice/operations/BatchOnewaysAMI.swift b/swift/test/Ice/operations/BatchOnewaysAMI.swift new file mode 100644 index 00000000000..85277b4ddd7 --- /dev/null +++ b/swift/test/Ice/operations/BatchOnewaysAMI.swift @@ -0,0 +1,63 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Darwin +import Ice +import PromiseKit +import TestCommon + +func batchOnewaysAMI(_ helper: TestHelper, _ p: MyClassPrx) throws { + func test(_ value: Bool, file: String = #file, line: Int = #line) throws { + try helper.test(value, file: file, line: line) + } + + let bs1 = ByteSeq(repeating: 0, count: 10 * 1024) + let batch = p.ice_batchOneway() + + try firstly { + batch.ice_flushBatchRequestsAsync() + }.wait() + + for _ in 0 ..< 30 { + _ = batch.opByteSOnewayAsync(bs1) + } + + var count: Int32 = 0 + while count < 27 { // 3 * 9 requests auto-flushed. + count += try p.opByteSOnewayCallCount() + usleep(100) + } + + let conn = try batch.ice_getConnection() + if conn != nil { + let batch1 = uncheckedCast(prx: p.ice_batchOneway(), type: MyClassPrx.self) + let batch2 = uncheckedCast(prx: p.ice_batchOneway(), type: MyClassPrx.self) + + _ = batch1.ice_pingAsync() + _ = batch2.ice_pingAsync() + try batch1.ice_flushBatchRequestsAsync().wait() + try batch1.ice_getConnection()!.close(Ice.ConnectionClose.GracefullyWithWait) + _ = batch1.ice_pingAsync() + _ = batch2.ice_pingAsync() + + _ = try batch1.ice_getConnection() + _ = try batch2.ice_getConnection() + + _ = batch1.ice_pingAsync() + try batch1.ice_getConnection()!.close(Ice.ConnectionClose.GracefullyWithWait) + + _ = batch1.ice_pingAsync() + _ = batch2.ice_pingAsync() + } + + let batch3 = batch.ice_identity(Ice.Identity(name: "invalid", category: "")) + _ = batch3.ice_pingAsync() + try batch3.ice_flushBatchRequestsAsync().wait() + + // Make sure that a bogus batch request doesn't cause troubles to other ones. + _ = batch3.ice_pingAsync() + _ = batch.ice_pingAsync() + try batch.ice_flushBatchRequestsAsync().wait() + _ = batch.ice_pingAsync() +} diff --git a/swift/test/Ice/operations/Client.swift b/swift/test/Ice/operations/Client.swift new file mode 100644 index 00000000000..9ffb1d4b40e --- /dev/null +++ b/swift/test/Ice/operations/Client.swift @@ -0,0 +1,24 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import TestCommon + +public class Client: TestHelperI { + public override func run(args: [String]) throws { + var initData = Ice.InitializationData() + let properties = try createTestProperties(args) + properties.setProperty(key: "Ice.ThreadPool.Client.Size", value: "2") + properties.setProperty(key: "Ice.ThreadPool.Client.SizeWarn", value: "0") + properties.setProperty(key: "Ice.BatchAutoFlushSize", value: "100") + initData.properties = properties + initData.classResolverPrefix = ["IceOperations"] + let communicator = try initialize(initData) + defer { + communicator.destroy() + } + let cl = try allTests(helper: self) + try cl.shutdown() + } +} diff --git a/swift/test/Ice/operations/Collocated.swift b/swift/test/Ice/operations/Collocated.swift new file mode 100644 index 00000000000..23f2e49f087 --- /dev/null +++ b/swift/test/Ice/operations/Collocated.swift @@ -0,0 +1,43 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import TestCommon + +class Collocated: TestHelperI { + public override func run(args: [String]) throws { + let properties = try createTestProperties(args) + + properties.setProperty(key: "Ice.ThreadPool.Client.Size", value: "2") + properties.setProperty(key: "Ice.ThreadPool.Client.SizeWarn", value: "0") + properties.setProperty(key: "Ice.BatchAutoFlushSize", value: "100") + + // + // Its possible to have batch oneway requests dispatched + // after the adapter is deactivated due to thread + // scheduling so we supress this warning. + // + properties.setProperty(key: "Ice.Warn.Dispatch", value: "0") + // + // We don't want connection warnings because of the timeout test. + // + properties.setProperty(key: "Ice.Warn.Connections", value: "0") + + var initData = Ice.InitializationData() + initData.properties = properties + initData.classResolverPrefix = ["IceOperations"] + let communicator = try initialize(initData) + defer { + communicator.destroy() + } + + communicator.getProperties().setProperty(key: "TestAdapter.Endpoints", value: getTestEndpoint(num: 0)) + let adapter = try communicator.createObjectAdapter("TestAdapter") + try adapter.add(servant: MBDisp(BI()), id: Ice.stringToIdentity("b")) + try adapter.add(servant: MyDerivedClassDisp(MyDerivedClassI(self)), + id: Ice.stringToIdentity("test")) + try adapter.activate() + _ = try allTests(helper: self) + } +} diff --git a/swift/test/Ice/operations/Oneways.swift b/swift/test/Ice/operations/Oneways.swift new file mode 100644 index 00000000000..6c67113af3c --- /dev/null +++ b/swift/test/Ice/operations/Oneways.swift @@ -0,0 +1,20 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import TestCommon + +func oneways(_ helper: TestHelper, _ prx: MyClassPrx) throws { + let p = prx.ice_oneway() + + try p.ice_ping() + try p.opVoid() + try p.opIdempotent() + try p.opNonmutating() + + do { + _ = try p.opByte(p1: 0xFF, p2: 0x0F) + try helper.test(false) + } catch is Ice.TwowayOnlyException {} +} diff --git a/swift/test/Ice/operations/OnewaysAMI.swift b/swift/test/Ice/operations/OnewaysAMI.swift new file mode 100644 index 00000000000..163a7bd1d41 --- /dev/null +++ b/swift/test/Ice/operations/OnewaysAMI.swift @@ -0,0 +1,71 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import PromiseKit +import TestCommon + +func onewaysAMI(_ helper: TestHelper, _ proxy: MyClassPrx) throws { + let p = uncheckedCast(prx: proxy.ice_oneway(), type: MyClassPrx.self) + + do { + let group = DispatchGroup() + group.enter() + _ = p.ice_pingAsync { _ in + group.leave() + } + group.wait() + } + + do { + try firstly { + p.ice_isAAsync(id: ice_staticId(MyClassPrx.self)) + }.done { _ in + try helper.test(false) + }.wait() + } catch is Ice.TwowayOnlyException {} + + do { + try firstly { + p.ice_idsAsync() + }.done { _ in + try helper.test(false) + }.wait() + } catch is Ice.TwowayOnlyException {} + + do { + let group = DispatchGroup() + group.enter() + _ = p.opVoidAsync { _ in + group.leave() + } + group.wait() + } + + do { + let group = DispatchGroup() + group.enter() + _ = p.opIdempotentAsync { _ in + group.leave() + } + group.wait() + } + + do { + let group = DispatchGroup() + group.enter() + _ = p.opNonmutatingAsync { _ in + group.leave() + } + group.wait() + } + + do { + try firstly { + p.opByteAsync(p1: 0xFF, p2: 0x0F) + }.done { _ in + try helper.test(false) + }.wait() + } catch is Ice.TwowayOnlyException {} +} diff --git a/swift/test/Ice/operations/Server.swift b/swift/test/Ice/operations/Server.swift new file mode 100644 index 00000000000..714bbc43b94 --- /dev/null +++ b/swift/test/Ice/operations/Server.swift @@ -0,0 +1,38 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import TestCommon + +class Server: TestHelperI { + public override func run(args: [String]) throws { + let properties = try createTestProperties(args) + // + // Its possible to have batch oneway requests dispatched + // after the adapter is deactivated due to thread + // scheduling so we supress this warning. + // + properties.setProperty(key: "Ice.Warn.Dispatch", value: "0") + // + // We don't want connection warnings because of the timeout test. + // + properties.setProperty(key: "Ice.Warn.Connections", value: "0") + + var initData = Ice.InitializationData() + initData.properties = properties + initData.classResolverPrefix = ["IceOperations"] + let communicator = try initialize(initData) + defer { + communicator.destroy() + } + + communicator.getProperties().setProperty(key: "TestAdapter.Endpoints", value: getTestEndpoint(num: 0)) + let adapter = try communicator.createObjectAdapter("TestAdapter") + try adapter.add(servant: MBDisp(BI()), id: Ice.stringToIdentity("b")) + try adapter.add(servant: MyDerivedClassDisp(MyDerivedClassI(self)), id: Ice.stringToIdentity("test")) + try adapter.activate() + serverReady() + communicator.waitForShutdown() + } +} diff --git a/swift/test/Ice/operations/ServerAMD.swift b/swift/test/Ice/operations/ServerAMD.swift new file mode 100644 index 00000000000..dab66459eae --- /dev/null +++ b/swift/test/Ice/operations/ServerAMD.swift @@ -0,0 +1,38 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import TestCommon + +class ServerAMD: TestHelperI { + public override func run(args: [String]) throws { + let properties = try createTestProperties(args) + // + // Its possible to have batch oneway requests dispatched + // after the adapter is deactivated due to thread + // scheduling so we supress this warning. + // + properties.setProperty(key: "Ice.Warn.Dispatch", value: "0") + // + // We don't want connection warnings because of the timeout test. + // + properties.setProperty(key: "Ice.Warn.Connections", value: "0") + + var initData = Ice.InitializationData() + initData.properties = properties + initData.classResolverPrefix = ["IceOperationsAMD"] + let communicator = try initialize(initData) + defer { + communicator.destroy() + } + + communicator.getProperties().setProperty(key: "TestAdapter.Endpoints", value: getTestEndpoint(num: 0)) + let adapter = try communicator.createObjectAdapter("TestAdapter") + try adapter.add(servant: MBDisp(BI()), id: Ice.stringToIdentity("b")) + try adapter.add(servant: MyDerivedClassDisp(MyDerivedClassI(self)), id: Ice.stringToIdentity("test")) + try adapter.activate() + serverReady() + communicator.waitForShutdown() + } +} diff --git a/swift/test/Ice/operations/Test.ice b/swift/test/Ice/operations/Test.ice new file mode 100644 index 00000000000..3ed647d37fa --- /dev/null +++ b/swift/test/Ice/operations/Test.ice @@ -0,0 +1,455 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#pragma once + +#include <Ice/Current.ice> + +[["swift:class-resolver-prefix:IceOperations", + "suppress-warning:deprecated"]] // For classes with operations + +module Test +{ + +enum MyEnum +{ + enum1, + enum2, + enum3 +} + +interface MyClass; + +struct AnotherStruct +{ + string s; +} + +struct Structure +{ + MyClass* p; + MyEnum e; + AnotherStruct s; +} + +sequence<byte> ByteS; +sequence<bool> BoolS; +sequence<short> ShortS; +sequence<int> IntS; +sequence<long> LongS; +sequence<float> FloatS; +sequence<double> DoubleS; +sequence<string> StringS; +sequence<["cpp:type:wstring"]string> WStringS; +sequence<MyEnum> MyEnumS; +sequence<MyClass*> MyClassS; + +sequence<ByteS> ByteSS; +sequence<BoolS> BoolSS; +sequence<ShortS> ShortSS; +sequence<IntS> IntSS; +sequence<LongS> LongSS; +sequence<FloatS> FloatSS; +sequence<DoubleS> DoubleSS; +sequence<StringS> StringSS; +sequence<MyEnumS> MyEnumSS; +sequence<MyClassS> MyClassSS; + +sequence<StringSS> StringSSS; + +struct MyStruct +{ + int i; + int j; +} + +dictionary<byte, bool> ByteBoolD; +dictionary<short, int> ShortIntD; +dictionary<long, float> LongFloatD; +dictionary<string, string> StringStringD; +dictionary<string, MyEnum> StringMyEnumD; +dictionary<MyEnum, string> MyEnumStringD; +dictionary<MyStruct, MyEnum> MyStructMyEnumD; + +sequence<ByteBoolD> ByteBoolDS; +sequence<ShortIntD> ShortIntDS; +sequence<LongFloatD> LongFloatDS; +sequence<StringStringD> StringStringDS; +sequence<StringMyEnumD> StringMyEnumDS; +sequence<MyEnumStringD> MyEnumStringDS; +sequence<MyStructMyEnumD> MyStructMyEnumDS; + +dictionary<byte, ByteS> ByteByteSD; +dictionary<bool, BoolS> BoolBoolSD; +dictionary<short, ShortS> ShortShortSD; +dictionary<int, IntS> IntIntSD; +dictionary<long, LongS> LongLongSD; +dictionary<string, FloatS> StringFloatSD; +dictionary<string, DoubleS> StringDoubleSD; +dictionary<string, StringS> StringStringSD; +dictionary<MyEnum, MyEnumS> MyEnumMyEnumSD; + +exception SomeException {} + +interface MyClass +{ + void shutdown(); + + bool supportsCompress(); + + void opVoid(); + + byte opByte(byte p1, byte p2, + out byte p3); + + bool opBool(bool p1, bool p2, + out bool p3); + + long opShortIntLong(short p1, int p2, long p3, + out short p4, out int p5, out long p6); + + double opFloatDouble(float p1, double p2, + out float p3, out double p4); + + string opString(string p1, string p2, + out string p3); + + MyEnum opMyEnum(MyEnum p1, out MyEnum p2); + + MyClass* opMyClass(MyClass* p1, out MyClass* p2, out MyClass* p3); + + Structure opStruct(Structure p1, Structure p2, + out Structure p3); + + ByteS opByteS(ByteS p1, ByteS p2, + out ByteS p3); + + BoolS opBoolS(BoolS p1, BoolS p2, + out BoolS p3); + + LongS opShortIntLongS(Test::ShortS p1, IntS p2, LongS p3, + out ::Test::ShortS p4, out IntS p5, out LongS p6); + + DoubleS opFloatDoubleS(FloatS p1, DoubleS p2, + out FloatS p3, out DoubleS p4); + + StringS opStringS(StringS p1, StringS p2, + out StringS p3); + + ByteSS opByteSS(ByteSS p1, ByteSS p2, + out ByteSS p3); + + BoolSS opBoolSS(BoolSS p1, BoolSS p2, + out BoolSS p3); + + LongSS opShortIntLongSS(ShortSS p1, IntSS p2, LongSS p3, + out ShortSS p4, out IntSS p5, out LongSS p6); + + DoubleSS opFloatDoubleSS(FloatSS p1, DoubleSS p2, + out FloatSS p3, out DoubleSS p4); + + StringSS opStringSS(StringSS p1, StringSS p2, + out StringSS p3); + + StringSSS opStringSSS(StringSSS p1, StringSSS p2, + out StringSSS p3); + + ByteBoolD opByteBoolD(ByteBoolD p1, ByteBoolD p2, + out ByteBoolD p3); + + ShortIntD opShortIntD(ShortIntD p1, ShortIntD p2, + out ShortIntD p3); + + LongFloatD opLongFloatD(LongFloatD p1, LongFloatD p2, + out LongFloatD p3); + + StringStringD opStringStringD(StringStringD p1, StringStringD p2, + out StringStringD p3); + + StringMyEnumD opStringMyEnumD(StringMyEnumD p1, StringMyEnumD p2, + out StringMyEnumD p3); + + MyEnumStringD opMyEnumStringD(MyEnumStringD p1, MyEnumStringD p2, + out MyEnumStringD p3); + + MyStructMyEnumD opMyStructMyEnumD(MyStructMyEnumD p1, MyStructMyEnumD p2, + out MyStructMyEnumD p3); + + ByteBoolDS opByteBoolDS(ByteBoolDS p1, ByteBoolDS p2, + out ByteBoolDS p3); + + ShortIntDS opShortIntDS(ShortIntDS p1, ShortIntDS p2, + out ShortIntDS p3); + + LongFloatDS opLongFloatDS(LongFloatDS p1, LongFloatDS p2, + out LongFloatDS p3); + + StringStringDS opStringStringDS(StringStringDS p1, StringStringDS p2, + out StringStringDS p3); + + StringMyEnumDS opStringMyEnumDS(StringMyEnumDS p1, StringMyEnumDS p2, + out StringMyEnumDS p3); + + MyEnumStringDS opMyEnumStringDS(MyEnumStringDS p1, MyEnumStringDS p2, + out MyEnumStringDS p3); + + MyStructMyEnumDS opMyStructMyEnumDS(MyStructMyEnumDS p1, MyStructMyEnumDS p2, + out MyStructMyEnumDS p3); + + ByteByteSD opByteByteSD(ByteByteSD p1, ByteByteSD p2, + out ByteByteSD p3); + + BoolBoolSD opBoolBoolSD(BoolBoolSD p1, BoolBoolSD p2, + out BoolBoolSD p3); + + ShortShortSD opShortShortSD(ShortShortSD p1, ShortShortSD p2, + out ShortShortSD p3); + + IntIntSD opIntIntSD(IntIntSD p1, IntIntSD p2, + out IntIntSD p3); + + LongLongSD opLongLongSD(LongLongSD p1, LongLongSD p2, + out LongLongSD p3); + + StringFloatSD opStringFloatSD(StringFloatSD p1, StringFloatSD p2, + out StringFloatSD p3); + + StringDoubleSD opStringDoubleSD(StringDoubleSD p1, StringDoubleSD p2, + out StringDoubleSD p3); + + StringStringSD opStringStringSD(StringStringSD p1, StringStringSD p2, + out StringStringSD p3); + + MyEnumMyEnumSD opMyEnumMyEnumSD(MyEnumMyEnumSD p1, MyEnumMyEnumSD p2, + out MyEnumMyEnumSD p3); + + IntS opIntS(IntS s); + + void opByteSOneway(ByteS s); + + int opByteSOnewayCallCount(); + + Ice::Context opContext(); + + void opDoubleMarshaling(double p1, DoubleS p2); + + idempotent void opIdempotent(); + + ["nonmutating"] idempotent void opNonmutating(); + + byte opByte1(byte opByte1); + short opShort1(short opShort1); + int opInt1(int opInt1); + long opLong1(long opLong1); + float opFloat1(float opFloat1); + double opDouble1(double opDouble1); + string opString1(string opString1); + StringS opStringS1(StringS opStringS1); + ByteBoolD opByteBoolD1(ByteBoolD opByteBoolD1); + StringS opStringS2(StringS stringS); + ByteBoolD opByteBoolD2(ByteBoolD byteBoolD); + + StringS opStringLiterals(); + WStringS opWStringLiterals(); +} + +struct MyStruct1 +{ + string tesT; // Same name as the enclosing module + MyClass* myClass; // Same name as an already defined class + string myStruct1; // Same name as the enclosing struct +} + +class MyClass1 +{ + string tesT; // Same name as the enclosing module + MyClass* myClass; // Same name as an already defined class + string myClass1; // Same name as the enclosing class +} + +interface MyDerivedClass extends MyClass +{ + void opDerived(); + MyClass1 opMyClass1(MyClass1 opMyClass1); + MyStruct1 opMyStruct1(MyStruct1 opMyStruct1); +} + +// +// String literals +// + +const string s0 = "\u005c"; // backslash +const string s1 = "\u0041"; // A +const string s2 = "\u0049\u0063\u0065"; // Ice +const string s3 = "\u004121"; // A21 +const string s4 = "\\u0041 \\U00000041"; // \\u0041 \\U00000041 +const string s5 = "\u00FF"; // ÿ +const string s6 = "\u03FF"; // GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL (U+03FF) +const string s7 = "\u05F0"; // HEBREW LIGATURE YIDDISH DOUBLE VAV (U+05F0) +const string s8 = "\U00010000"; // LINEAR B SYLLABLE B008 A (U+10000) +const string s9 = "\U0001F34C"; // BANANA (U+1F34C) +const string s10 = "\u0DA7"; // Sinhala Letter Alpapraana Ttayanna +const string s11 = "\xE2\x82\xac\342\202\254\342\x82\254"; // 3 euro signs (U+20AC) in UTF-8 +const string s12 = "\x5C101"; // \101 (not an octal escape) + +const string sw0 = "\U0000005c"; // backslash +const string sw1 = "\U00000041"; // A +const string sw2 = "\U00000049\U00000063\U00000065"; // Ice +const string sw3 = "\U0000004121"; // A21 +const string sw4 = "\\u0041 \\U00000041"; // \\u0041 \\U00000041 +const string sw5 = "\U000000FF"; // ÿ +const string sw6 = "\U000003FF"; // GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL (U+03FF) +const string sw7 = "\U000005F0"; // HEBREW LIGATURE YIDDISH DOUBLE VAV (U+05F0) +const string sw8 = "\U00010000"; // LINEAR B SYLLABLE B008 A (U+10000) +const string sw9 = "\U0001F34C"; // BANANA (U+1F34C) +const string sw10 = "\U00000DA7"; // Sinhala Letter Alpapraana Ttayanna + +/** +\' single quote byte 0x27 in ASCII encoding +\" double quote byte 0x22 in ASCII encoding +\? question mark byte 0x3f in ASCII encoding +\\ backslash byte 0x5c in ASCII encoding +\a audible bell byte 0x07 in ASCII encoding +\b backspace byte 0x08 in ASCII encoding +\f form feed - new page byte 0x0c in ASCII encoding +\n line feed - new line byte 0x0a in ASCII encoding +\r carriage return byte 0x0d in ASCII encoding +\t horizontal tab byte 0x09 in ASCII encoding +\v vertical tab byte 0x0b in ASCII encoding +**/ + +const string ss0 = "\'\"\?\\\a\b\f\n\r\t\v\6"; +const string ss1 = "\u0027\u0022\u003f\u005c\u0007\u0008\u000c\u000a\u000d\u0009\u000b\u0006"; +const string ss2 = "\U00000027\U00000022\U0000003f\U0000005c\U00000007\U00000008\U0000000c\U0000000a\U0000000d\U00000009\U0000000b\U00000006"; + +const string ss3 = "\\\\U\\u\\"; /* \\U\u\ */ +const string ss4 = "\\\u0041\\"; /* \A\ */ +const string ss5 = "\\u0041\\"; /* \u0041\ */ + +// +// Ĩ - Unicode Character 'LATIN CAPITAL LETTER I WITH TILDE' (U+0128) +// Ÿ - Unicode Character 'LATIN CAPITAL LETTER Y WITH DIAERESIS' (U+0178) +// ÿ - Unicode Character 'LATIN SMALL LETTER Y WITH DIAERESIS' (U+00FF) +// Ā - Unicode Character 'LATIN CAPITAL LETTER A WITH MACRON' (U+0100) +// ἀ - Unicode Character 'GREEK SMALL LETTER ALPHA WITH PSILI' (U+1F00) +// 𐆔 - Unicode Character 'ROMAN DIMIDIA SEXTULA SIGN' (U+10194) +// 𐅪 - Unicode Character 'GREEK ACROPHONIC THESPIAN ONE HUNDRED' (U+1016A) +// 𐆘 - Unicode Character 'ROMAN SESTERTIUS SIGN' (U+10198) +// 🍀 - Unicode Character 'FOUR LEAF CLOVER' (U+1F340) +// 🍁 - Unicode Character 'MAPLE LEAF' (U+1F341) +// 🍂 - Unicode Character 'FALLEN LEAF' (U+1F342) +// 🍃 - Unicode Character 'LEAF FLUTTERING IN WIND' (U+1F343) +// +const string su0 = "ĨŸÿĀἀ𐆔𐅪𐆘🍀🍁🍂🍃"; +const string su1 = "\u0128\u0178\u00FF\u0100\u1F00\U00010194\U0001016A\U00010198\U0001F340\U0001F341\U0001F342\U0001F343"; +const string su2 = "\U00000128\U00000178\U000000FF\U00000100\U00001F00\U00010194\U0001016A\U00010198\U0001F340\U0001F341\U0001F342\U0001F343"; + +// +// Wide string literals +// + +const ["cpp:type:wstring"]string ws0 = "\u005c"; // backslash +const ["cpp:type:wstring"]string ws1 = "\u0041"; // A +const ["cpp:type:wstring"]string ws2 = "\u0049\u0063\u0065"; // Ice +const ["cpp:type:wstring"]string ws3 = "\u004121"; // A21 +const ["cpp:type:wstring"]string ws4 = "\\u0041 \\U00000041"; // \\u0041 \\U00000041 +const ["cpp:type:wstring"]string ws5 = "\u00FF"; // ÿ +const ["cpp:type:wstring"]string ws6 = "\u03FF"; // GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL (U+03FF) +const ["cpp:type:wstring"]string ws7 = "\u05F0"; // HEBREW LIGATURE YIDDISH DOUBLE VAV (U+05F0) +const ["cpp:type:wstring"]string ws8 = "\U00010000"; // LINEAR B SYLLABLE B008 A (U+10000) +const ["cpp:type:wstring"]string ws9 = "\U0001F34C"; // BANANA (U+1F34C) +const ["cpp:type:wstring"]string ws10 = "\u0DA7"; // Sinhala Letter Alpapraana Ttayanna + +const ["cpp:type:wstring"]string wsw0 = "\U0000005c"; // backslash +const ["cpp:type:wstring"]string wsw1 = "\U00000041"; // A +const ["cpp:type:wstring"]string wsw2 = "\U00000049\U00000063\U00000065"; // Ice +const ["cpp:type:wstring"]string wsw3 = "\U0000004121"; // A21 +const ["cpp:type:wstring"]string wsw4 = "\\u0041 \\U00000041"; // \\u0041 \\U00000041 +const ["cpp:type:wstring"]string wsw5 = "\U000000FF"; // ÿ +const ["cpp:type:wstring"]string wsw6 = "\U000003FF"; // GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL (U+03FF) +const ["cpp:type:wstring"]string wsw7 = "\U000005F0"; // HEBREW LIGATURE YIDDISH DOUBLE VAV (U+05F0) +const ["cpp:type:wstring"]string wsw8 = "\U00010000"; // LINEAR B SYLLABLE B008 A (U+10000) +const ["cpp:type:wstring"]string wsw9 = "\U0001F34C"; // BANANA (U+1F34C) +const ["cpp:type:wstring"]string wsw10 = "\U00000DA7"; // Sinhala Letter Alpapraana Ttayanna + +/** +\' single quote byte 0x27 in ASCII encoding +\" double quote byte 0x22 in ASCII encoding +\? question mark byte 0x3f in ASCII encoding +\\ backslash byte 0x5c in ASCII encoding +\a audible bell byte 0x07 in ASCII encoding +\b backspace byte 0x08 in ASCII encoding +\f form feed - new page byte 0x0c in ASCII encoding +\n line feed - new line byte 0x0a in ASCII encoding +\r carriage return byte 0x0d in ASCII encoding +\t horizontal tab byte 0x09 in ASCII encoding +\v vertical tab byte 0x0b in ASCII encoding +**/ +const ["cpp:type:wstring"]string wss0 = "\'\"\?\\\a\b\f\n\r\t\v\6"; +const ["cpp:type:wstring"]string wss1 = "\u0027\u0022\u003f\u005c\u0007\u0008\u000c\u000a\u000d\u0009\u000b\u0006"; +const ["cpp:type:wstring"]string wss2 = "\U00000027\U00000022\U0000003f\U0000005c\U00000007\U00000008\U0000000c\U0000000a\U0000000d\U00000009\U0000000b\U00000006"; + +const ["cpp:type:wstring"]string wss3 = "\\\\U\\u\\"; /* \\U\u\ */ +const ["cpp:type:wstring"]string wss4 = "\\\u0041\\"; /* \A\ */ +const ["cpp:type:wstring"]string wss5 = "\\u0041\\"; /* \u0041\ */ + +// +// Ĩ - Unicode Character 'LATIN CAPITAL LETTER I WITH TILDE' (U+0128) +// Ÿ - Unicode Character 'LATIN CAPITAL LETTER Y WITH DIAERESIS' (U+0178) +// ÿ - Unicode Character 'LATIN SMALL LETTER Y WITH DIAERESIS' (U+00FF) +// Ā - Unicode Character 'LATIN CAPITAL LETTER A WITH MACRON' (U+0100) +// ἀ - Unicode Character 'GREEK SMALL LETTER ALPHA WITH PSILI' (U+1F00) +// 𐆔 - Unicode Character 'ROMAN DIMIDIA SEXTULA SIGN' (U+10194) +// 𐅪 - Unicode Character 'GREEK ACROPHONIC THESPIAN ONE HUNDRED' (U+1016A) +// 𐆘 - Unicode Character 'ROMAN SESTERTIUS SIGN' (U+10198) +// 🍀 - Unicode Character 'FOUR LEAF CLOVER' (U+1F340) +// 🍁 - Unicode Character 'MAPLE LEAF' (U+1F341) +// 🍂 - Unicode Character 'FALLEN LEAF' (U+1F342) +// 🍃 - Unicode Character 'LEAF FLUTTERING IN WIND' (U+1F343) +// +const ["cpp:type:wstring"]string wsu0 = "ĨŸÿĀἀ𐆔𐅪𐆘🍀🍁🍂🍃"; +const ["cpp:type:wstring"]string wsu1 = "\u0128\u0178\u00FF\u0100\u1F00\U00010194\U0001016A\U00010198\U0001F340\U0001F341\U0001F342\U0001F343"; +const ["cpp:type:wstring"]string wsu2 = "\U00000128\U00000178\U000000FF\U00000100\U00001F00\U00010194\U0001016A\U00010198\U0001F340\U0001F341\U0001F342\U0001F343"; + +} + +["swift:module:Test:Test2"] +module Test2 +{ + +/** + * + * Makes sure that proxy operations are correctly generated when extending an interface from + * a different module (ICE-7639). + * + **/ +interface MyDerivedClass extends Test::MyClass +{ +} + +} + +// +// Test proxy inheritance for class with operations +// see: https://github.com/zeroc-ice/ice/issues/406 +// +["swift:module:Test:M"] +module M +{ + class A + { + int x; + // void opA(); + } + + interface Intf + { + void opIntf(); + } + + class B extends A implements Intf + { + void opB(); + } +} diff --git a/swift/test/Ice/operations/TestAMD.ice b/swift/test/Ice/operations/TestAMD.ice new file mode 100644 index 00000000000..4d125eb11fd --- /dev/null +++ b/swift/test/Ice/operations/TestAMD.ice @@ -0,0 +1,367 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#pragma once + +#include <Ice/Current.ice> + +[["swift:class-resolver-prefix:IceOperationsAMD", + "suppress-warning:deprecated"]] // For classes with operations + +module Test +{ + +enum MyEnum +{ + enum1, + enum2, + enum3 +} + +interface MyClass; + +struct AnotherStruct +{ + string s; +} + +struct Structure +{ + MyClass* p; + MyEnum e; + AnotherStruct s; +} + +sequence<byte> ByteS; +sequence<bool> BoolS; +sequence<short> ShortS; +sequence<int> IntS; +sequence<long> LongS; +sequence<float> FloatS; +sequence<double> DoubleS; +sequence<string> StringS; +sequence<MyEnum> MyEnumS; +sequence<MyClass*> MyClassS; + +sequence<ByteS> ByteSS; +sequence<BoolS> BoolSS; +sequence<ShortS> ShortSS; +sequence<IntS> IntSS; +sequence<LongS> LongSS; +sequence<FloatS> FloatSS; +sequence<DoubleS> DoubleSS; +sequence<StringS> StringSS; +sequence<MyEnumS> MyEnumSS; +sequence<MyClassS> MyClassSS; + +sequence<StringSS> StringSSS; + +struct MyStruct +{ + int i; + int j; +} + +dictionary<byte, bool> ByteBoolD; +dictionary<short, int> ShortIntD; +dictionary<long, float> LongFloatD; +dictionary<string, string> StringStringD; +dictionary<string, MyEnum> StringMyEnumD; +dictionary<MyEnum, string> MyEnumStringD; +dictionary<MyStruct, MyEnum> MyStructMyEnumD; + +sequence<ByteBoolD> ByteBoolDS; +sequence<ShortIntD> ShortIntDS; +sequence<LongFloatD> LongFloatDS; +sequence<StringStringD> StringStringDS; +sequence<StringMyEnumD> StringMyEnumDS; +sequence<MyEnumStringD> MyEnumStringDS; +sequence<MyStructMyEnumD> MyStructMyEnumDS; + +dictionary<byte, ByteS> ByteByteSD; +dictionary<bool, BoolS> BoolBoolSD; +dictionary<short, ShortS> ShortShortSD; +dictionary<int, IntS> IntIntSD; +dictionary<long, LongS> LongLongSD; +dictionary<string, FloatS> StringFloatSD; +dictionary<string, DoubleS> StringDoubleSD; +dictionary<string, StringS> StringStringSD; +dictionary<MyEnum, MyEnumS> MyEnumMyEnumSD; + +["amd"] interface MyClass +{ + void shutdown(); + + bool supportsCompress(); + + void opVoid(); + + byte opByte(byte p1, byte p2, + out byte p3); + + bool opBool(bool p1, bool p2, + out bool p3); + + long opShortIntLong(short p1, int p2, long p3, + out short p4, out int p5, out long p6); + + double opFloatDouble(float p1, double p2, + out float p3, out double p4); + + string opString(string p1, string p2, + out string p3); + + MyEnum opMyEnum(MyEnum p1, out MyEnum p2); + + MyClass* opMyClass(MyClass* p1, out MyClass* p2, out MyClass* p3); + + Structure opStruct(Structure p1, Structure p2, + out Structure p3); + + ByteS opByteS(ByteS p1, ByteS p2, + out ByteS p3); + + BoolS opBoolS(BoolS p1, BoolS p2, + out BoolS p3); + + LongS opShortIntLongS(Test::ShortS p1, IntS p2, LongS p3, + out ::Test::ShortS p4, out IntS p5, out LongS p6); + + DoubleS opFloatDoubleS(FloatS p1, DoubleS p2, + out FloatS p3, out DoubleS p4); + + StringS opStringS(StringS p1, StringS p2, + out StringS p3); + + ByteSS opByteSS(ByteSS p1, ByteSS p2, + out ByteSS p3); + + BoolSS opBoolSS(BoolSS p1, BoolSS p2, + out BoolSS p3); + + LongSS opShortIntLongSS(ShortSS p1, IntSS p2, LongSS p3, + out ShortSS p4, out IntSS p5, out LongSS p6); + + DoubleSS opFloatDoubleSS(FloatSS p1, DoubleSS p2, + out FloatSS p3, out DoubleSS p4); + + StringSS opStringSS(StringSS p1, StringSS p2, + out StringSS p3); + + StringSSS opStringSSS(StringSSS p1, StringSSS p2, + out StringSSS p3); + + ByteBoolD opByteBoolD(ByteBoolD p1, ByteBoolD p2, + out ByteBoolD p3); + + ShortIntD opShortIntD(ShortIntD p1, ShortIntD p2, + out ShortIntD p3); + + LongFloatD opLongFloatD(LongFloatD p1, LongFloatD p2, + out LongFloatD p3); + + StringStringD opStringStringD(StringStringD p1, StringStringD p2, + out StringStringD p3); + + StringMyEnumD opStringMyEnumD(StringMyEnumD p1, StringMyEnumD p2, + out StringMyEnumD p3); + + MyEnumStringD opMyEnumStringD(MyEnumStringD p1, MyEnumStringD p2, + out MyEnumStringD p3); + + MyStructMyEnumD opMyStructMyEnumD(MyStructMyEnumD p1, MyStructMyEnumD p2, + out MyStructMyEnumD p3); + + ByteBoolDS opByteBoolDS(ByteBoolDS p1, ByteBoolDS p2, + out ByteBoolDS p3); + + ShortIntDS opShortIntDS(ShortIntDS p1, ShortIntDS p2, + out ShortIntDS p3); + + LongFloatDS opLongFloatDS(LongFloatDS p1, LongFloatDS p2, + out LongFloatDS p3); + + StringStringDS opStringStringDS(StringStringDS p1, StringStringDS p2, + out StringStringDS p3); + + StringMyEnumDS opStringMyEnumDS(StringMyEnumDS p1, StringMyEnumDS p2, + out StringMyEnumDS p3); + + MyEnumStringDS opMyEnumStringDS(MyEnumStringDS p1, MyEnumStringDS p2, + out MyEnumStringDS p3); + + MyStructMyEnumDS opMyStructMyEnumDS(MyStructMyEnumDS p1, MyStructMyEnumDS p2, + out MyStructMyEnumDS p3); + + ByteByteSD opByteByteSD(ByteByteSD p1, ByteByteSD p2, + out ByteByteSD p3); + + BoolBoolSD opBoolBoolSD(BoolBoolSD p1, BoolBoolSD p2, + out BoolBoolSD p3); + + ShortShortSD opShortShortSD(ShortShortSD p1, ShortShortSD p2, + out ShortShortSD p3); + + IntIntSD opIntIntSD(IntIntSD p1, IntIntSD p2, + out IntIntSD p3); + + LongLongSD opLongLongSD(LongLongSD p1, LongLongSD p2, + out LongLongSD p3); + + StringFloatSD opStringFloatSD(StringFloatSD p1, StringFloatSD p2, + out StringFloatSD p3); + + StringDoubleSD opStringDoubleSD(StringDoubleSD p1, StringDoubleSD p2, + out StringDoubleSD p3); + + StringStringSD opStringStringSD(StringStringSD p1, StringStringSD p2, + out StringStringSD p3); + + MyEnumMyEnumSD opMyEnumMyEnumSD(MyEnumMyEnumSD p1, MyEnumMyEnumSD p2, + out MyEnumMyEnumSD p3); + + IntS opIntS(IntS s); + + void opByteSOneway(ByteS s); + + int opByteSOnewayCallCount(); + + Ice::Context opContext(); + + void opDoubleMarshaling(double p1, DoubleS p2); + + idempotent void opIdempotent(); + + ["nonmutating"] idempotent void opNonmutating(); + + byte opByte1(byte opByte1); + short opShort1(short opShort1); + int opInt1(int opInt1); + long opLong1(long opLong1); + float opFloat1(float opFloat1); + double opDouble1(double opDouble1); + string opString1(string opString1); + StringS opStringS1(StringS opStringS1); + ByteBoolD opByteBoolD1(ByteBoolD opByteBoolD1); + StringS opStringS2(StringS stringS); + ByteBoolD opByteBoolD2(ByteBoolD byteBoolD); + + StringS opStringLiterals(); + StringS opWStringLiterals(); +} + +struct MyStruct1 +{ + string tesT; // Same name as the enclosing module + MyClass* myClass; // Same name as an already defined class + string myStruct1; // Same name as the enclosing struct +} + +class MyClass1 +{ + string tesT; // Same name as the enclosing module + MyClass* myClass; // Same name as an already defined class + string myClass1; // Same name as the enclosing class +} + +["amd", "cs:tie"] interface MyDerivedClass extends MyClass +{ + void opDerived(); + MyClass1 opMyClass1(MyClass1 opMyClass1); + MyStruct1 opMyStruct1(MyStruct1 opMyStruct1); +} + +// +// String literals +// + +const string s0 = "\u005c"; // backslash +const string s1 = "\u0041"; // A +const string s2 = "\u0049\u0063\u0065"; // Ice +const string s3 = "\u004121"; // A21 +const string s4 = "\\u0041 \\U00000041"; // \\u0041 \\U00000041 +const string s5 = "\u00FF"; // ÿ +const string s6 = "\u03FF"; // GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL (U+03FF) +const string s7 = "\u05F0"; // HEBREW LIGATURE YIDDISH DOUBLE VAV (U+05F0) +const string s8 = "\U00010000"; // LINEAR B SYLLABLE B008 A (U+10000) +const string s9 = "\U0001F34C"; // BANANA (U+1F34C) +const string s10 = "\u0DA7"; // Sinhala Letter Alpapraana Ttayanna + +const string sw0 = "\U0000005c"; // backslash +const string sw1 = "\U00000041"; // A +const string sw2 = "\U00000049\U00000063\U00000065"; // Ice +const string sw3 = "\U0000004121"; // A21 +const string sw4 = "\\u0041 \\U00000041"; // \\u0041 \\U00000041 +const string sw5 = "\U000000FF"; // ÿ +const string sw6 = "\U000003FF"; // GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL (U+03FF) +const string sw7 = "\U000005F0"; // HEBREW LIGATURE YIDDISH DOUBLE VAV (U+05F0) +const string sw8 = "\U00010000"; // LINEAR B SYLLABLE B008 A (U+10000) +const string sw9 = "\U0001F34C"; // BANANA (U+1F34C) +const string sw10 = "\U00000DA7"; // Sinhala Letter Alpapraana Ttayanna + +/** +\' single quote byte 0x27 in ASCII encoding +\" double quote byte 0x22 in ASCII encoding +\? question mark byte 0x3f in ASCII encoding +\\ backslash byte 0x5c in ASCII encoding +\a audible bell byte 0x07 in ASCII encoding +\b backspace byte 0x08 in ASCII encoding +\f form feed - new page byte 0x0c in ASCII encoding +\n line feed - new line byte 0x0a in ASCII encoding +\r carriage return byte 0x0d in ASCII encoding +\t horizontal tab byte 0x09 in ASCII encoding +\v vertical tab byte 0x0b in ASCII encoding +**/ + +const string ss0 = "\'\"\?\\\a\b\f\n\r\t\v\6"; +const string ss1 = "\u0027\u0022\u003f\u005c\u0007\u0008\u000c\u000a\u000d\u0009\u000b\u0006"; +const string ss2 = "\U00000027\U00000022\U0000003f\U0000005c\U00000007\U00000008\U0000000c\U0000000a\U0000000d\U00000009\U0000000b\U00000006"; + +const string ss3 = "\\\\U\\u\\"; /* \\U\u\ */ +const string ss4 = "\\\u0041\\"; /* \A\ */ +const string ss5 = "\\u0041\\"; /* \u0041\ */ + +// +// Ĩ - Unicode Character 'LATIN CAPITAL LETTER I WITH TILDE' (U+0128) +// Ÿ - Unicode Character 'LATIN CAPITAL LETTER Y WITH DIAERESIS' (U+0178) +// ÿ - Unicode Character 'LATIN SMALL LETTER Y WITH DIAERESIS' (U+00FF) +// Ā - Unicode Character 'LATIN CAPITAL LETTER A WITH MACRON' (U+0100) +// ἀ - Unicode Character 'GREEK SMALL LETTER ALPHA WITH PSILI' (U+1F00) +// 𐆔 - Unicode Character 'ROMAN DIMIDIA SEXTULA SIGN' (U+10194) +// 𐅪 - Unicode Character 'GREEK ACROPHONIC THESPIAN ONE HUNDRED' (U+1016A) +// 𐆘 - Unicode Character 'ROMAN SESTERTIUS SIGN' (U+10198) +// 🍀 - Unicode Character 'FOUR LEAF CLOVER' (U+1F340) +// 🍁 - Unicode Character 'MAPLE LEAF' (U+1F341) +// 🍂 - Unicode Character 'FALLEN LEAF' (U+1F342) +// 🍃 - Unicode Character 'LEAF FLUTTERING IN WIND' (U+1F343) +// +const string su0 = "ĨŸÿĀἀ𐆔𐅪𐆘🍀🍁🍂🍃"; +const string su1 = "\u0128\u0178\u00FF\u0100\u1F00\U00010194\U0001016A\U00010198\U0001F340\U0001F341\U0001F342\U0001F343"; +const string su2 = "\U00000128\U00000178\U000000FF\U00000100\U00001F00\U00010194\U0001016A\U00010198\U0001F340\U0001F341\U0001F342\U0001F343"; + +} + +// +// Test proxy inheritance for class with operations +// see: https://github.com/zeroc-ice/ice/issues/406 +// +["swift:module:Test:M"] +module M +{ + class A + { + int x; + // void opA(); + } + + ["amd"] interface Intf + { + void opIntf(); + } + + ["amd"] class B extends A implements Intf + { + void opB(); + } +} diff --git a/swift/test/Ice/operations/TestAMDI.swift b/swift/test/Ice/operations/TestAMDI.swift new file mode 100644 index 00000000000..f97160a95c0 --- /dev/null +++ b/swift/test/Ice/operations/TestAMDI.swift @@ -0,0 +1,446 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Foundation +import Ice +import PromiseKit +import TestCommon + +class BI: MBOperations { + func opBAsync(current _: Ice.Current) -> Promise<Void> { + return Promise.value(()) + } + + func opIntfAsync(current _: Ice.Current) -> Promise<Void> { + return Promise.value(()) + } +} + +class MyDerivedClassI: ObjectI<MyDerivedClassTraits>, MyDerivedClass { + var _helper: TestHelper + var _opByteSOnewayCallCount: Int32 = 0 + var _lock = os_unfair_lock() + + init(_ helper: TestHelper) { + _helper = helper + } + + // + // Override the Object "pseudo" operations to verify the operation mode. + // + override func ice_isA(id: String, current: Ice.Current) throws -> Bool { + try _helper.test(current.mode == .Nonmutating) + return try super.ice_isA(id: id, current: current) + } + + override func ice_ping(current: Ice.Current) throws { + try _helper.test(current.mode == .Nonmutating) + } + + override func ice_ids(current: Ice.Current) throws -> [String] { + try _helper.test(current.mode == .Nonmutating) + return try super.ice_ids(current: current) + } + + override func ice_id(current: Ice.Current) throws -> String { + try _helper.test(current.mode == .Nonmutating) + return try super.ice_id(current: current) + } + + func opDerivedAsync(current _: Current) -> Promise<Void> { + return Promise.value(()) + } + + func opMyClass1Async(opMyClass1: MyClass1?, current _: Current) -> Promise<MyClass1?> { + return Promise.value(opMyClass1) + } + + func opMyStruct1Async(opMyStruct1: MyStruct1, current _: Current) -> Promise<MyStruct1> { + return Promise.value(opMyStruct1) + } + + func shutdownAsync(current: Current) -> Promise<Void> { + return Promise<Void> { seal in + current.adapter!.getCommunicator().shutdown() + seal.fulfill(()) + } + } + + func supportsCompressAsync(current _: Current) -> Promise<Bool> { + return Promise.value(true) + } + + func opVoidAsync(current _: Current) -> Promise<Void> { + return Promise.value(()) + } + + func opByteAsync(p1: UInt8, p2: UInt8, current _: Current) -> Promise<(returnValue: UInt8, p3: UInt8)> { + return Promise.value((p1, p1 ^ p2)) + } + + func opBoolAsync(p1: Bool, p2: Bool, current _: Current) -> Promise<(returnValue: Bool, p3: Bool)> { + return Promise.value((p2, p1)) + } + + func opShortIntLongAsync(p1: Int16, + p2: Int32, + p3: Int64, + current _: Current) -> Promise<(returnValue: Int64, p4: Int16, p5: Int32, p6: Int64)> { + return Promise.value((p3, p1, p2, p3)) + } + + func opFloatDoubleAsync(p1: Float, + p2: Double, + current _: Current) -> Promise<(returnValue: Double, p3: Float, p4: Double)> { + return Promise.value((p2, p1, p2)) + } + + func opStringAsync(p1: String, p2: String, current _: Current) -> Promise<(returnValue: String, p3: String)> { + return Promise.value(("\(p1) \(p2)", "\(p2) \(p1)")) + } + + func opMyEnumAsync(p1: MyEnum, current _: Current) -> Promise<(returnValue: MyEnum, p2: MyEnum)> { + return Promise.value((MyEnum.enum3, p1)) + } + + func opMyClassAsync(p1: MyClassPrx?, + current: Current) -> Promise<(returnValue: MyClassPrx?, p2: MyClassPrx?, p3: MyClassPrx?)> { + guard let adapter = current.adapter else { + fatalError() + } + return Promise { seal in + do { + seal.fulfill( + (try uncheckedCast(prx: adapter.createProxy(current.id), type: MyClassPrx.self), + p1, + try uncheckedCast(prx: adapter.createProxy(Ice.stringToIdentity("noSuchIdentity")), + type: MyClassPrx.self))) + } catch { + seal.reject(error) + } + } + } + + func opStructAsync(p1: Structure, + p2: Structure, + current _: Current) -> Promise<(returnValue: Structure, p3: Structure)> { + var p3 = p1 + p3.s.s = "a new string" + return Promise.value((p2, p3)) + } + + func opByteSAsync(p1: ByteS, p2: ByteS, current _: Current) -> Promise<(returnValue: ByteS, p3: ByteS)> { + return Promise.value((p1 + p2, ByteSeq(p1.reversed()))) + } + + func opBoolSAsync(p1: BoolS, p2: BoolS, current _: Current) -> Promise<(returnValue: BoolS, p3: BoolS)> { + return Promise.value((p1.reversed(), p1 + p2)) + } + + func opShortIntLongSAsync(p1: ShortS, + p2: IntS, + p3: LongS, + current _: Current) -> Promise<(returnValue: LongS, p4: ShortS, p5: IntS, p6: LongS)> { + return Promise.value((p3, p1, p2.reversed(), p3 + p3)) + } + + func opFloatDoubleSAsync(p1: FloatS, + p2: DoubleS, + current _: Current) -> Promise<(returnValue: DoubleS, p3: FloatS, p4: DoubleS)> { + return Promise.value((p2 + p1.map { Double($0) }, p1, p2.reversed())) + } + + func opStringSAsync(p1: StringS, p2: StringS, current _: Current) -> Promise<(returnValue: StringS, p3: StringS)> { + return Promise.value((p1.reversed(), p1 + p2)) + } + + func opByteSSAsync(p1: ByteSS, p2: ByteSS, current _: Current) -> Promise<(returnValue: ByteSS, p3: ByteSS)> { + return Promise.value((p1 + p2, p1.reversed())) + } + + func opBoolSSAsync(p1: BoolSS, p2: BoolSS, current _: Current) -> Promise<(returnValue: BoolSS, p3: BoolSS)> { + return Promise.value((p1.reversed(), p1 + p2)) + } + + func opShortIntLongSSAsync(p1: ShortSS, + p2: IntSS, + p3: LongSS, + current _: Current) -> Promise<(returnValue: LongSS, + p4: ShortSS, + p5: IntSS, + p6: LongSS)> { + return Promise.value((p3, p1, p2.reversed(), p3 + p3)) + } + + func opFloatDoubleSSAsync(p1: FloatSS, + p2: DoubleSS, + current _: Current) -> Promise<(returnValue: DoubleSS, p3: FloatSS, p4: DoubleSS)> { + return Promise.value((p2 + p2, p1, p2.reversed())) + } + + func opStringSSAsync(p1: StringSS, + p2: StringSS, + current _: Current) -> Promise<(returnValue: StringSS, p3: StringSS)> { + return Promise.value((p2.reversed(), p1 + p2)) + } + + func opStringSSSAsync(p1: StringSSS, + p2: StringSSS, + current _: Current) -> Promise<(returnValue: StringSSS, p3: StringSSS)> { + return Promise.value((p2.reversed(), p1 + p2)) + } + + func opByteBoolDAsync(p1: ByteBoolD, + p2: ByteBoolD, + current _: Current) -> Promise<(returnValue: ByteBoolD, p3: ByteBoolD)> { + return Promise.value((p1.merging(p2) { _, new in new }, p1)) + } + + func opShortIntDAsync(p1: ShortIntD, + p2: ShortIntD, + current _: Current) -> Promise<(returnValue: ShortIntD, p3: ShortIntD)> { + return Promise.value((p1.merging(p2) { _, new in new }, p1)) + } + + func opLongFloatDAsync(p1: LongFloatD, + p2: LongFloatD, + current _: Current) -> Promise<(returnValue: LongFloatD, p3: LongFloatD)> { + return Promise.value((p1.merging(p2) { _, new in new }, p1)) + } + + func opStringStringDAsync(p1: StringStringD, + p2: StringStringD, + current _: Current) -> Promise<(returnValue: StringStringD, p3: StringStringD)> { + return Promise.value((p1.merging(p2) { _, new in new }, p1)) + } + + func opStringMyEnumDAsync(p1: StringMyEnumD, + p2: StringMyEnumD, + current _: Current) -> Promise<(returnValue: StringMyEnumD, p3: StringMyEnumD)> { + return Promise.value((p1.merging(p2) { _, new in new }, p1)) + } + + func opMyEnumStringDAsync(p1: MyEnumStringD, + p2: MyEnumStringD, + current _: Current) -> Promise<(returnValue: MyEnumStringD, p3: MyEnumStringD)> { + return Promise.value((p1.merging(p2) { _, new in new }, p1)) + } + + func opMyStructMyEnumDAsync(p1: MyStructMyEnumD, + p2: MyStructMyEnumD, + current _: Current) -> Promise<(returnValue: MyStructMyEnumD, p3: MyStructMyEnumD)> { + return Promise.value((p1.merging(p2) { _, new in new }, p1)) + } + + func opByteBoolDSAsync(p1: ByteBoolDS, + p2: ByteBoolDS, + current _: Current) -> Promise<(returnValue: ByteBoolDS, p3: ByteBoolDS)> { + return Promise.value((p1.reversed(), p2 + p1)) + } + + func opShortIntDSAsync(p1: ShortIntDS, + p2: ShortIntDS, + current _: Current) -> Promise<(returnValue: ShortIntDS, p3: ShortIntDS)> { + return Promise.value((p1.reversed(), p2 + p1)) + } + + func opLongFloatDSAsync(p1: LongFloatDS, + p2: LongFloatDS, + current _: Current) -> Promise<(returnValue: LongFloatDS, p3: LongFloatDS)> { + return Promise.value((p1.reversed(), p2 + p1)) + } + + func opStringStringDSAsync(p1: StringStringDS, + p2: StringStringDS, + current _: Current) -> Promise<(returnValue: StringStringDS, p3: StringStringDS)> { + return Promise.value((p1.reversed(), p2 + p1)) + } + + func opStringMyEnumDSAsync(p1: StringMyEnumDS, + p2: StringMyEnumDS, + current _: Current) -> Promise<(returnValue: StringMyEnumDS, p3: StringMyEnumDS)> { + return Promise.value((p1.reversed(), p2 + p1)) + } + + func opMyEnumStringDSAsync(p1: MyEnumStringDS, + p2: MyEnumStringDS, + current _: Current) -> Promise<(returnValue: MyEnumStringDS, p3: MyEnumStringDS)> { + return Promise.value((p1.reversed(), p2 + p1)) + } + + func opMyStructMyEnumDSAsync(p1: MyStructMyEnumDS, + p2: MyStructMyEnumDS, + current _: Current) -> Promise<(returnValue: MyStructMyEnumDS, p3: MyStructMyEnumDS)> { + return Promise.value((p1.reversed(), p2 + p1)) + } + + func opByteByteSDAsync(p1: ByteByteSD, + p2: ByteByteSD, + current _: Current) -> Promise<(returnValue: ByteByteSD, p3: ByteByteSD)> { + return Promise.value((p1.merging(p2) { _, new in new }, p2)) + } + + func opBoolBoolSDAsync(p1: BoolBoolSD, + p2: BoolBoolSD, + current _: Current) -> Promise<(returnValue: BoolBoolSD, p3: BoolBoolSD)> { + return Promise.value((p1.merging(p2) { _, new in new }, p2)) + } + + func opShortShortSDAsync(p1: ShortShortSD, + p2: ShortShortSD, + current _: Current) -> Promise<(returnValue: ShortShortSD, p3: ShortShortSD)> { + return Promise.value((p1.merging(p2) { _, new in new }, p2)) + } + + func opIntIntSDAsync(p1: IntIntSD, + p2: IntIntSD, + current _: Current) -> Promise<(returnValue: IntIntSD, p3: IntIntSD)> { + return Promise.value((p1.merging(p2) { _, new in new }, p2)) + } + + func opLongLongSDAsync(p1: LongLongSD, + p2: LongLongSD, + current _: Current) -> Promise<(returnValue: LongLongSD, p3: LongLongSD)> { + return Promise.value((p1.merging(p2) { _, new in new }, p2)) + } + + func opStringFloatSDAsync(p1: StringFloatSD, + p2: StringFloatSD, + current _: Current) -> Promise<(returnValue: StringFloatSD, p3: StringFloatSD)> { + return Promise.value((p1.merging(p2) { _, new in new }, p2)) + } + + func opStringDoubleSDAsync(p1: StringDoubleSD, + p2: StringDoubleSD, + current _: Current) -> Promise<(returnValue: StringDoubleSD, p3: StringDoubleSD)> { + return Promise.value((p1.merging(p2) { _, new in new }, p2)) + } + + func opStringStringSDAsync(p1: StringStringSD, + p2: StringStringSD, + current _: Current) -> Promise<(returnValue: StringStringSD, p3: StringStringSD)> { + return Promise.value((p1.merging(p2) { _, new in new }, p2)) + } + + func opMyEnumMyEnumSDAsync(p1: MyEnumMyEnumSD, + p2: MyEnumMyEnumSD, + current _: Current) -> Promise<(returnValue: MyEnumMyEnumSD, p3: MyEnumMyEnumSD)> { + return Promise.value((p1.merging(p2) { _, new in new }, p2)) + } + + func opIntSAsync(s: IntS, current _: Current) -> Promise<IntS> { + return Promise.value(s.map { -$0 }) + } + + func opByteSOnewayAsync(s _: ByteS, current _: Current) -> Promise<Void> { + withLock(&_lock) { + _opByteSOnewayCallCount += 1 + } + return Promise.value(()) + } + + func opByteSOnewayCallCountAsync(current _: Current) -> Promise<Int32> { + return withLock(&_lock) { + let count = _opByteSOnewayCallCount + _opByteSOnewayCallCount = 0 + return Promise<Int32>.value(count) + } + } + + func opContextAsync(current: Current) -> Promise<Context> { + return Promise.value(current.ctx) + } + + func opDoubleMarshalingAsync(p1: Double, p2: DoubleS, current _: Current) -> Promise<Void> { + return Promise<Void> { seal in + do { + let d = Double(1_278_312_346.0 / 13.0) + try _helper.test(p1 == d) + for p in p2 { + try _helper.test(p == d) + } + seal.fulfill(()) + } catch { + seal.reject(error) + } + } + } + + func opIdempotentAsync(current: Current) -> Promise<Void> { + return Promise<Void> { seal in + do { + try _helper.test(current.mode == .Idempotent) + seal.fulfill(()) + } catch { + seal.reject(error) + } + } + } + + func opNonmutatingAsync(current: Current) -> Promise<Void> { + return Promise<Void> { seal in + do { + try _helper.test(current.mode == .Nonmutating) + seal.fulfill(()) + } catch { + seal.reject(error) + } + } + } + + func opByte1Async(opByte1: UInt8, current _: Current) -> Promise<UInt8> { + return Promise.value(opByte1) + } + + func opShort1Async(opShort1: Int16, current _: Current) -> Promise<Int16> { + return Promise.value(opShort1) + } + + func opInt1Async(opInt1: Int32, current _: Current) -> Promise<Int32> { + return Promise.value(opInt1) + } + + func opLong1Async(opLong1: Int64, current _: Current) -> Promise<Int64> { + return Promise.value(opLong1) + } + + func opFloat1Async(opFloat1: Float, current _: Current) -> Promise<Float> { + return Promise.value(opFloat1) + } + + func opDouble1Async(opDouble1: Double, current _: Current) -> Promise<Double> { + return Promise.value(opDouble1) + } + + func opString1Async(opString1: String, current _: Current) -> Promise<String> { + return Promise.value(opString1) + } + + func opStringS1Async(opStringS1: StringS, current _: Current) -> Promise<StringS> { + return Promise.value(opStringS1) + } + + func opByteBoolD1Async(opByteBoolD1: ByteBoolD, current _: Current) -> Promise<ByteBoolD> { + return Promise.value(opByteBoolD1) + } + + func opStringS2Async(stringS: StringS, current _: Current) -> Promise<StringS> { + return Promise.value(stringS) + } + + func opByteBoolD2Async(byteBoolD: ByteBoolD, current _: Current) -> Promise<ByteBoolD> { + return Promise.value(byteBoolD) + } + + func opStringLiteralsAsync(current _: Current) -> Promise<StringS> { + return Promise.value([s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, + sw0, sw1, sw2, sw3, sw4, sw5, sw6, sw7, sw8, sw9, sw10, + ss0, ss1, ss2, ss3, ss4, ss5, + su0, su1, su2]) + } + + func opWStringLiteralsAsync(current: Current) -> Promise<StringS> { + return opStringLiteralsAsync(current: current) + } +} diff --git a/swift/test/Ice/operations/TestI.swift b/swift/test/Ice/operations/TestI.swift new file mode 100644 index 00000000000..3f8461b47f8 --- /dev/null +++ b/swift/test/Ice/operations/TestI.swift @@ -0,0 +1,413 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Foundation +import Ice +import TestCommon + +class BI: MBOperations { + func opB(current _: Ice.Current) throws {} + + func opIntf(current _: Ice.Current) throws {} +} + +class MyDerivedClassI: ObjectI<MyDerivedClassTraits>, MyDerivedClass { + var _helper: TestHelper + var _opByteSOnewayCallCount: Int32 = 0 + var _lock = os_unfair_lock() + + init(_ helper: TestHelper) { + _helper = helper + } + + // + // Override the Object "pseudo" operations to verify the operation mode. + // + override func ice_isA(id: String, current: Ice.Current) throws -> Bool { + try _helper.test(current.mode == .Nonmutating) + return try super.ice_isA(id: id, current: current) + } + + override func ice_ping(current: Ice.Current) throws { + try _helper.test(current.mode == .Nonmutating) + } + + override func ice_ids(current: Ice.Current) throws -> [String] { + try _helper.test(current.mode == .Nonmutating) + return try super.ice_ids(current: current) + } + + override func ice_id(current: Ice.Current) throws -> String { + try _helper.test(current.mode == .Nonmutating) + return try super.ice_id(current: current) + } + + func shutdown(current: Ice.Current) throws { + current.adapter!.getCommunicator().shutdown() + } + + func supportsCompress(current _: Ice.Current) throws -> Bool { + return true + } + + func opVoid(current: Ice.Current) throws { + try _helper.test(current.mode == .Normal) + } + + func opBool(p1: Bool, p2: Bool, current _: Ice.Current) throws -> (returnValue: Bool, p3: Bool) { + return (p2, p1) + } + + func opBoolS(p1: [Bool], p2: [Bool], current _: Ice.Current) throws -> (returnValue: [Bool], p3: [Bool]) { + return (p1.reversed(), p1 + p2) + } + + func opBoolSS(p1: [[Bool]], p2: [[Bool]], current _: Ice.Current) throws -> (returnValue: [[Bool]], p3: [[Bool]]) { + return (p1.reversed(), p1 + p2) + } + + func opByte(p1: UInt8, p2: UInt8, current _: Ice.Current) throws -> (returnValue: UInt8, p3: UInt8) { + return (p1, p1 ^ p2) + } + + func opByteBoolD(p1: [UInt8: Bool], + p2: [UInt8: Bool], + current _: Ice.Current) throws -> (returnValue: [UInt8: Bool], p3: [UInt8: Bool]) { + return (p1.merging(p2) { _, new in new }, p1) + } + + func opByteS(p1: ByteSeq, + p2: ByteSeq, current _: Ice.Current) throws -> (returnValue: ByteSeq, p3: ByteSeq) { + return (p1 + p2, ByteSeq(p1.reversed())) + } + + func opByteSS(p1: [ByteSeq], + p2: [ByteSeq], current _: Ice.Current) throws -> (returnValue: [ByteSeq], p3: [ByteSeq]) { + return (p1 + p2, p1.reversed()) + } + + func opFloatDouble(p1: Float, + p2: Double, + current _: Ice.Current) throws -> (returnValue: Double, p3: Float, p4: Double) { + return (p2, p1, p2) + } + + func opFloatDoubleS(p1: [Float], + p2: [Double], + current _: Ice.Current) throws -> (returnValue: [Double], p3: [Float], p4: [Double]) { + return (p2 + p1.map { Double($0) }, p1, p2.reversed()) + } + + func opFloatDoubleSS(p1: [[Float]], + p2: [[Double]], + current _: Ice.Current) throws -> (returnValue: [[Double]], p3: [[Float]], p4: [[Double]]) { + return (p2 + p2, p1, p2.reversed()) + } + + func opLongFloatD(p1: [Int64: Float], + p2: [Int64: Float], + current _: Ice.Current) throws -> (returnValue: [Int64: Float], p3: [Int64: Float]) { + return (p1.merging(p2) { _, new in new }, p1) + } + + func opMyClass(p1: MyClassPrx?, + current: Ice.Current) throws -> (returnValue: MyClassPrx?, p2: MyClassPrx?, p3: MyClassPrx?) { + guard let adapter = current.adapter else { + fatalError() + } + return (try uncheckedCast(prx: adapter.createProxy(current.id), type: MyClassPrx.self), + p1, + try uncheckedCast(prx: adapter.createProxy(Ice.stringToIdentity("noSuchIdentity")), + type: MyClassPrx.self)) + } + + func opMyEnum(p1: MyEnum, current _: Ice.Current) throws -> (returnValue: MyEnum, p2: MyEnum) { + return (MyEnum.enum3, p1) + } + + func opShortIntD(p1: [Int16: Int32], + p2: [Int16: Int32], + current _: Ice.Current) throws -> (returnValue: [Int16: Int32], p3: [Int16: Int32]) { + return (p1.merging(p2) { _, new in new }, p1) + } + + func opShortIntLong(p1: Int16, + p2: Int32, + p3: Int64, + current _: Ice.Current) throws -> (returnValue: Int64, p4: Int16, p5: Int32, p6: Int64) { + return (p3, p1, p2, p3) + } + + func opShortIntLongS(p1: [Int16], + p2: [Int32], + p3: [Int64], + current _: Ice.Current) throws -> (returnValue: [Int64], + p4: [Int16], + p5: [Int32], + p6: [Int64]) { + return (p3, p1, p2.reversed(), p3 + p3) + } + + func opShortIntLongSS(p1: [[Int16]], + p2: [[Int32]], + p3: [[Int64]], + current _: Ice.Current) throws -> (returnValue: [[Int64]], + p4: [[Int16]], + p5: [[Int32]], + p6: [[Int64]]) { + return (p3, p1, p2.reversed(), p3 + p3) + } + + func opString(p1: String, p2: String, current _: Ice.Current) throws -> (returnValue: String, p3: String) { + return ("\(p1) \(p2)", "\(p2) \(p1)") + } + + func opStringMyEnumD(p1: [String: MyEnum], + p2: [String: MyEnum], + current _: Ice.Current) throws -> (returnValue: [String: MyEnum], p3: [String: MyEnum]) { + return (p1.merging(p2) { _, new in new }, p1) + } + + func opMyEnumStringD(p1: [MyEnum: String], + p2: [MyEnum: String], + current _: Ice.Current) throws -> (returnValue: [MyEnum: String], p3: [MyEnum: String]) { + return (p1.merging(p2) { _, new in new }, p1) + } + + func opMyStructMyEnumD(p1: [MyStruct: MyEnum], + p2: [MyStruct: MyEnum], + current _: Ice.Current) throws -> (returnValue: [MyStruct: MyEnum], p3: [MyStruct: MyEnum]) { + return (p1.merging(p2) { _, new in new }, p1) + } + + func opByteBoolDS(p1: [[UInt8: Bool]], + p2: [[UInt8: Bool]], + current _: Ice.Current) throws -> (returnValue: [[UInt8: Bool]], p3: [[UInt8: Bool]]) { + return (p1.reversed(), p2 + p1) + } + + func opShortIntDS(p1: [[Int16: Int32]], + p2: [[Int16: Int32]], + current _: Ice.Current) throws -> (returnValue: [[Int16: Int32]], p3: [[Int16: Int32]]) { + return (p1.reversed(), p2 + p1) + } + + func opLongFloatDS(p1: [[Int64: Float]], + p2: [[Int64: Float]], + current _: Ice.Current) throws -> (returnValue: [[Int64: Float]], p3: [[Int64: Float]]) { + return (p1.reversed(), p2 + p1) + } + + func opStringStringDS(p1: [[String: String]], + p2: [[String: String]], + current _: Ice.Current) throws -> (returnValue: [[String: String]], p3: [[String: String]]) { + return (p1.reversed(), p2 + p1) + } + + func opStringMyEnumDS(p1: [[String: MyEnum]], + p2: [[String: MyEnum]], + current _: Ice.Current) throws -> (returnValue: [[String: MyEnum]], p3: [[String: MyEnum]]) { + return (p1.reversed(), p2 + p1) + } + + func opMyEnumStringDS(p1: [[MyEnum: String]], + p2: [[MyEnum: String]], + current _: Ice.Current) throws -> (returnValue: [[MyEnum: String]], p3: [[MyEnum: String]]) { + return (p1.reversed(), p2 + p1) + } + + func opMyStructMyEnumDS(p1: [[MyStruct: MyEnum]], + p2: [[MyStruct: MyEnum]], + current _: Ice.Current) throws -> (returnValue: [[MyStruct: MyEnum]], + p3: [[MyStruct: MyEnum]]) { + return (p1.reversed(), p2 + p1) + } + + func opByteByteSD(p1: [UInt8: ByteSeq], + p2: [UInt8: ByteSeq], + current _: Ice.Current) throws -> (returnValue: [UInt8: ByteSeq], p3: [UInt8: ByteSeq]) { + return (p1.merging(p2) { _, new in new }, p2) + } + + func opBoolBoolSD(p1: [Bool: [Bool]], + p2: [Bool: [Bool]], + current _: Ice.Current) throws -> (returnValue: [Bool: [Bool]], p3: [Bool: [Bool]]) { + return (p1.merging(p2) { _, new in new }, p2) + } + + func opShortShortSD(p1: [Int16: [Int16]], + p2: [Int16: [Int16]], + current _: Ice.Current) throws -> (returnValue: [Int16: [Int16]], p3: [Int16: [Int16]]) { + return (p1.merging(p2) { _, new in new }, p2) + } + + func opIntIntSD(p1: [Int32: [Int32]], + p2: [Int32: [Int32]], + current _: Ice.Current) throws -> (returnValue: [Int32: [Int32]], p3: [Int32: [Int32]]) { + return (p1.merging(p2) { _, new in new }, p2) + } + + func opLongLongSD(p1: [Int64: [Int64]], + p2: [Int64: [Int64]], + current _: Ice.Current) throws -> (returnValue: [Int64: [Int64]], p3: [Int64: [Int64]]) { + return (p1.merging(p2) { _, new in new }, p2) + } + + func opStringFloatSD(p1: [String: [Float]], + p2: [String: [Float]], + current _: Ice.Current) throws -> (returnValue: [String: [Float]], p3: [String: [Float]]) { + return (p1.merging(p2) { _, new in new }, p2) + } + + func opStringDoubleSD(p1: [String: [Double]], + p2: [String: [Double]], + current _: Ice.Current) throws -> (returnValue: [String: [Double]], p3: [String: [Double]]) { + return (p1.merging(p2) { _, new in new }, p2) + } + + func opStringStringSD(p1: [String: [String]], + p2: [String: [String]], + current _: Ice.Current) throws -> (returnValue: [String: [String]], p3: [String: [String]]) { + return (p1.merging(p2) { _, new in new }, p2) + } + + func opMyEnumMyEnumSD(p1: [MyEnum: [MyEnum]], + p2: [MyEnum: [MyEnum]], + current _: Ice.Current) throws -> (returnValue: [MyEnum: [MyEnum]], p3: [MyEnum: [MyEnum]]) { + return (p1.merging(p2) { _, new in new }, p2) + } + + func opIntS(s: [Int32], current _: Ice.Current) throws -> [Int32] { + return s.map { -$0 } + } + + func opByteSOneway(s _: ByteSeq, current _: Ice.Current) throws { + withLock(&_lock) { + _opByteSOnewayCallCount += 1 + } + } + + func opByteSOnewayCallCount(current _: Ice.Current) throws -> Int32 { + return withLock(&_lock) { + let count = _opByteSOnewayCallCount + _opByteSOnewayCallCount = 0 + return count + } + } + + func opContext(current: Ice.Current) throws -> Ice.Context { + return current.ctx + } + + func opDoubleMarshaling(p1: Double, p2: [Double], current _: Ice.Current) throws { + let d = Double(1_278_312_346.0 / 13.0) + try _helper.test(p1 == d) + for p in p2 { + try _helper.test(p == d) + } + } + + func opStringS(p1: [String], p2: [String], current _: Ice.Current) throws -> (returnValue: [String], p3: [String]) { + return (p1.reversed(), p1 + p2) + } + + func opStringSS(p1: [[String]], + p2: [[String]], + current _: Ice.Current) throws -> (returnValue: [[String]], p3: [[String]]) { + return (p2.reversed(), p1 + p2) + } + + func opStringSSS(p1: [[[String]]], + p2: [[[String]]], + current _: Ice.Current) throws -> (returnValue: [[[String]]], p3: [[[String]]]) { + return (p2.reversed(), p1 + p2) + } + + func opStringStringD(p1: [String: String], + p2: [String: String], + current _: Ice.Current) throws -> (returnValue: [String: String], p3: [String: String]) { + return (p1.merging(p2) { _, new in new }, p1) + } + + func opStruct(p1: Structure, + p2: Structure, + current _: Ice.Current) throws -> (returnValue: Structure, p3: Structure) { + var p3 = p1 + p3.s.s = "a new string" + return (p2, p3) + } + + func opIdempotent(current: Ice.Current) throws { + try _helper.test(current.mode == .Idempotent) + } + + func opNonmutating(current: Ice.Current) throws { + try _helper.test(current.mode == .Nonmutating) + } + + func opDerived(current _: Ice.Current) throws {} + + func opByte1(opByte1: UInt8, current _: Ice.Current) throws -> UInt8 { + return opByte1 + } + + func opShort1(opShort1: Int16, current _: Ice.Current) throws -> Int16 { + return opShort1 + } + + func opInt1(opInt1: Int32, current _: Ice.Current) throws -> Int32 { + return opInt1 + } + + func opLong1(opLong1: Int64, current _: Ice.Current) throws -> Int64 { + return opLong1 + } + + func opFloat1(opFloat1: Float, current _: Ice.Current) throws -> Float { + return opFloat1 + } + + func opDouble1(opDouble1: Double, current _: Ice.Current) throws -> Double { + return opDouble1 + } + + func opString1(opString1: String, current _: Ice.Current) throws -> String { + return opString1 + } + + func opStringS1(opStringS1: [String], current _: Ice.Current) throws -> [String] { + return opStringS1 + } + + func opByteBoolD1(opByteBoolD1: [UInt8: Bool], current _: Ice.Current) throws -> [UInt8: Bool] { + return opByteBoolD1 + } + + func opStringS2(stringS: [String], current _: Ice.Current) throws -> [String] { + return stringS + } + + func opByteBoolD2(byteBoolD: [UInt8: Bool], current _: Ice.Current) throws -> [UInt8: Bool] { + return byteBoolD + } + + func opMyClass1(opMyClass1: MyClass1?, current _: Ice.Current) throws -> MyClass1? { + return opMyClass1 + } + + func opMyStruct1(opMyStruct1: MyStruct1, current _: Ice.Current) throws -> MyStruct1 { + return opMyStruct1 + } + + func opStringLiterals(current _: Ice.Current) throws -> [String] { + return [s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, + sw0, sw1, sw2, sw3, sw4, sw5, sw6, sw7, sw8, sw9, sw10, + ss0, ss1, ss2, ss3, ss4, ss5, + su0, su1, su2] + } + + func opWStringLiterals(current: Ice.Current) throws -> [String] { + return try opStringLiterals(current: current) + } +} diff --git a/swift/test/Ice/operations/Twoways.swift b/swift/test/Ice/operations/Twoways.swift new file mode 100644 index 00000000000..a1aaf472bd4 --- /dev/null +++ b/swift/test/Ice/operations/Twoways.swift @@ -0,0 +1,1225 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import TestCommon + +func twoways(_ helper: TestHelper, _ p: MyClassPrx, _ bprx: MBPrx) throws { + func test(_ value: Bool, file: String = #file, line: Int = #line) throws { + try helper.test(value, file: file, line: line) + } + + let communicator = helper.communicator() + + let literals = try p.opStringLiterals() + + try test(s0 == "\\" && + s0 == sw0 && + s0 == literals[0] && + s0 == literals[11]) + + try test(s1 == "A" && + s1 == sw1 && + s1 == literals[1] && + s1 == literals[12]) + + try test(s2 == "Ice" && + s2 == sw2 && + s2 == literals[2] && + s2 == literals[13]) + + try test(s3 == "A21" && + s3 == sw3 && + s3 == literals[3] && + s3 == literals[14]) + + try test(s4 == "\\u0041 \\U00000041" && + s4 == sw4 && + s4 == literals[4] && + s4 == literals[15]) + + try test(s5 == "\u{00FF}" && + s5 == sw5 && + s5 == literals[5] && + s5 == literals[16]) + + try test(s6 == "\u{03FF}" && + s6 == sw6 && + s6 == literals[6] && + s6 == literals[17]) + + try test(s7 == "\u{05F0}" && + s7 == sw7 && + s7 == literals[7] && + s7 == literals[18]) + + try test(s8 == "\u{10000}" && + s8 == sw8 && + s8 == literals[8] && + s8 == literals[19]) + + try test(s9 == "\u{1F34C}" && + s9 == sw9 && + s9 == literals[9] && + s9 == literals[20]) + + try test(s10 == "\u{0DA7}" && + s10 == sw10 && + s10 == literals[10] && + s10 == literals[21]) + + try test(ss0 == "\'\"\u{003f}\\\u{0007}\u{0008}\u{000c}\n\r\t\u{000b}\u{0006}" && + ss0 == ss1 && + ss0 == ss2 && + ss0 == literals[22] && + ss0 == literals[23] && + ss0 == literals[24]) + + try test(ss3 == "\\\\U\\u\\" && + ss3 == literals[25]) + + try test(ss4 == "\\A\\" && + ss4 == literals[26]) + + try test(ss5 == "\\u0041\\" && + ss5 == literals[27]) + + try test(su0 == su1 && + su0 == su2 && + su0 == literals[28] && + su0 == literals[29] && + su0 == literals[30]) + + try p.ice_ping() + + try test(ice_staticId(MyClassPrx.self) == "::Test::MyClass") + try test(ice_staticId(Ice.ObjectPrx.self) == "::Ice::Object") + + try test(p.ice_isA(id: ice_staticId(MyClassPrx.self))) + try test(p.ice_id() == ice_staticId(MyDerivedClassPrx.self)) + + do { + let ids = try p.ice_ids() + try test(ids.count == 3) + try test(ids[0] == "::Ice::Object") + try test(ids[1] == "::Test::MyClass") + try test(ids[2] == "::Test::MyDerivedClass") + } + + do { + try p.opVoid() + } + + do { + let (r, b) = try p.opByte(p1: 0xFF, p2: 0x0F) + try test(b == 0xF0) + try test(r == 0xFF) + } + + do { + let (r, b) = try p.opBool(p1: true, p2: false) + try test(b) + try test(!r) + } + + do { + var (r, s, i, l) = try p.opShortIntLong(p1: 10, p2: 11, p3: 12) + try test(s == 10) + try test(i == 11) + try test(l == 12) + try test(r == 12) + + (r, s, i, l) = try p.opShortIntLong(p1: Int16.min, p2: Int32.min, p3: Int64.min) + try test(s == Int16.min) + try test(i == Int32.min) + try test(l == Int64.min) + try test(r == Int64.min) + + (r, s, i, l) = try p.opShortIntLong(p1: Int16.max, p2: Int32.max, p3: Int64.max) + try test(s == Int16.max) + try test(i == Int32.max) + try test(l == Int64.max) + try test(r == Int64.max) + } + + do { + var (r, f, d) = try p.opFloatDouble(p1: 3.14, p2: 1.1e10) + try test(f == 3.14) + try test(d == 1.1e10) + try test(r == 1.1e10) + + (r, f, d) = try p.opFloatDouble(p1: Float.ulpOfOne, p2: Double.leastNormalMagnitude) + try test(f == Float.ulpOfOne) + try test(d == Double.leastNormalMagnitude) + try test(r == Double.leastNormalMagnitude) + + (r, f, d) = try p.opFloatDouble(p1: Float.greatestFiniteMagnitude, p2: Double.greatestFiniteMagnitude) + try test(f == Float.greatestFiniteMagnitude) + try test(d == Double.greatestFiniteMagnitude) + try test(r == Double.greatestFiniteMagnitude) + } + + do { + let (r, s) = try p.opString(p1: "hello", p2: "world") + try test(s == "world hello") + try test(r == "hello world") + } + + do { + let (r, e) = try p.opMyEnum(MyEnum.enum2) + try test(e == MyEnum.enum2) + try test(r == MyEnum.enum3) + } + + do { + var (r, c1, c2) = try p.opMyClass(p) + + try test(c1!.ice_getIdentity() == Ice.stringToIdentity("test")) + try test(c2!.ice_getIdentity() == Ice.stringToIdentity("noSuchIdentity")) + try test(r!.ice_getIdentity() == Ice.stringToIdentity("test")) + try r!.opVoid() + try c1!.opVoid() + + do { + try c2!.opVoid() + try test(false) + } catch is Ice.ObjectNotExistException {} + + (r, c1, c2) = try p.opMyClass(nil) + try test(c1 == nil) + try test(c2 != nil) + try r!.opVoid() + } + + do { + var si1 = Structure() + si1.p = p + si1.e = MyEnum.enum3 + si1.s = AnotherStruct() + si1.s.s = "abc" + var si2 = Structure() + si2.p = nil + si2.e = MyEnum.enum2 + si2.s = AnotherStruct() + si2.s.s = "def" + + let (rso, so) = try p.opStruct(p1: si1, p2: si2) + try test(rso.p == nil) + try test(rso.e == MyEnum.enum2) + try test(rso.s.s == "def") + try test(so.p == p) + try test(so.e == MyEnum.enum3) + try test(so.s.s == "a new string") + try so.p!.opVoid() + } + + do { + let bsi1 = ByteSeq([0x01, 0x11, 0x12, 0x22]) + let bsi2 = ByteSeq([0xF1, 0xF2, 0xF3, 0xF4]) + + let (rso, bso) = try p.opByteS(p1: bsi1, p2: bsi2) + try test(bso.count == 4) + try test(bso[0] == 0x22) + try test(bso[1] == 0x12) + try test(bso[2] == 0x11) + try test(bso[3] == 0x01) + try test(rso.count == 8) + try test(rso[0] == 0x01) + try test(rso[1] == 0x11) + try test(rso[2] == 0x12) + try test(rso[3] == 0x22) + try test(rso[4] == 0xF1) + try test(rso[5] == 0xF2) + try test(rso[6] == 0xF3) + try test(rso[7] == 0xF4) + } + + do { + let bsi1: [Bool] = [true, true, false] + let bsi2: [Bool] = [false] + + let (rso, bso) = try p.opBoolS(p1: bsi1, p2: bsi2) + try test(bso.count == 4) + try test(bso[0]) + try test(bso[1]) + try test(!bso[2]) + try test(!bso[3]) + try test(rso.count == 3) + try test(!rso[0]) + try test(rso[1]) + try test(rso[2]) + } + + do { + let ssi: [Int16] = [1, 2, 3] + let isi: [Int32] = [5, 6, 7, 8] + let lsi: [Int64] = [10, 30, 20] + + let (rso, sso, iso, lso) = try p.opShortIntLongS(p1: ssi, p2: isi, p3: lsi) + try test(sso.count == 3) + try test(sso[0] == 1) + try test(sso[1] == 2) + try test(sso[2] == 3) + try test(iso.count == 4) + try test(iso[0] == 8) + try test(iso[1] == 7) + try test(iso[2] == 6) + try test(iso[3] == 5) + try test(lso.count == 6) + try test(lso[0] == 10) + try test(lso[1] == 30) + try test(lso[2] == 20) + try test(lso[3] == 10) + try test(lso[4] == 30) + try test(lso[5] == 20) + try test(rso.count == 3) + try test(rso[0] == 10) + try test(rso[1] == 30) + try test(rso[2] == 20) + } + + do { + let fsi: [Float] = [3.14, 1.11] + let dsi: [Double] = [1.1e10, 1.2e10, 1.3e10] + + let (rso, fso, dso) = try p.opFloatDoubleS(p1: fsi, p2: dsi) + try test(fso.count == 2) + try test(fso[0] == 3.14) + try test(fso[1] == 1.11) + try test(dso.count == 3) + try test(dso[0] == 1.3e10) + try test(dso[1] == 1.2e10) + try test(dso[2] == 1.1e10) + try test(rso.count == 5) + try test(rso[0] == 1.1e10) + try test(rso[1] == 1.2e10) + try test(rso[2] == 1.3e10) + try test(Float(rso[3]) == 3.14) + try test(Float(rso[4]) == 1.11) + } + + do { + let ssi1 = ["abc", "de", "fghi"] + let ssi2 = ["xyz"] + + let (rso, sso) = try p.opStringS(p1: ssi1, p2: ssi2) + try test(sso.count == 4) + try test(sso[0] == "abc") + try test(sso[1] == "de") + try test(sso[2] == "fghi") + try test(sso[3] == "xyz") + try test(rso.count == 3) + try test(rso[0] == "fghi") + try test(rso[1] == "de") + try test(rso[2] == "abc") + } + + do { + let s11 = ByteSeq([0x01, 0x11, 0x12]) + let s12 = ByteSeq([0xFF]) + let bsi1 = [s11, s12] + + let s21 = ByteSeq([0x0E]) + let s22 = ByteSeq([0xF2, 0xF1]) + let bsi2 = [s21, s22] + + let (rso, bso) = try p.opByteSS(p1: bsi1, p2: bsi2) + try test(bso.count == 2) + try test(bso[0].count == 1) + try test(bso[0][0] == 0xFF) + try test(bso[1].count == 3) + try test(bso[1][0] == 0x01) + try test(bso[1][1] == 0x11) + try test(bso[1][2] == 0x12) + try test(rso.count == 4) + try test(rso[0].count == 3) + try test(rso[0][0] == 0x01) + try test(rso[0][1] == 0x11) + try test(rso[0][2] == 0x12) + try test(rso[1].count == 1) + try test(rso[1][0] == 0xFF) + try test(rso[2].count == 1) + try test(rso[2][0] == 0x0E) + try test(rso[3].count == 2) + try test(rso[3][0] == 0xF2) + try test(rso[3][1] == 0xF1) + } + + do { + let s11 = [true] + let s12 = [false] + let s13 = [true, true] + let bsi1 = [s11, s12, s13] + + let s21 = [false, false, true] + let bsi2 = [s21] + + let (rso, bso) = try p.opBoolSS(p1: bsi1, p2: bsi2) + try test(bso.count == 4) + try test(bso[0].count == 1) + try test(bso[0][0]) + try test(bso[1].count == 1) + try test(!bso[1][0]) + try test(bso[2].count == 2) + try test(bso[2][0]) + try test(bso[2][1]) + try test(bso[3].count == 3) + try test(!bso[3][0]) + try test(!bso[3][1]) + try test(bso[3][2]) + try test(rso.count == 3) + try test(rso[0].count == 2) + try test(rso[0][0]) + try test(rso[0][1]) + try test(rso[1].count == 1) + try test(!rso[1][0]) + try test(rso[2].count == 1) + try test(rso[2][0]) + } + + do { + let s11: [Int16] = [1, 2, 5] + let s12: [Int16] = [13] + let s13: [Int16] = [] + let ssi = [s11, s12, s13] + + let i11: [Int32] = [24, 98] + let i12: [Int32] = [42] + let isi = [i11, i12] + + let l11: [Int64] = [496, 1729] + let lsi = [l11] + + let (rso, sso, iso, lso) = try p.opShortIntLongSS(p1: ssi, p2: isi, p3: lsi) + + try test(rso.count == 1) + try test(rso[0].count == 2) + try test(rso[0][0] == 496) + try test(rso[0][1] == 1729) + try test(sso.count == 3) + try test(sso[0].count == 3) + try test(sso[0][0] == 1) + try test(sso[0][1] == 2) + try test(sso[0][2] == 5) + try test(sso[1].count == 1) + try test(sso[1][0] == 13) + try test(sso[2].count == 0) + try test(iso.count == 2) + try test(iso[0].count == 1) + try test(iso[0][0] == 42) + try test(iso[1].count == 2) + try test(iso[1][0] == 24) + try test(iso[1][1] == 98) + try test(lso.count == 2) + try test(lso[0].count == 2) + try test(lso[0][0] == 496) + try test(lso[0][1] == 1729) + try test(lso[1].count == 2) + try test(lso[1][0] == 496) + try test(lso[1][1] == 1729) + } + + do { + let f11: [Float] = [3.14] + let f12: [Float] = [1.11] + let f13: [Float] = [] + let fsi = [f11, f12, f13] + + let d11: [Double] = [1.1e10, 1.2e10, 1.3e10] + let dsi = [d11] + + let (rso, fso, dso) = try p.opFloatDoubleSS(p1: fsi, p2: dsi) + try test(fso.count == 3) + try test(fso[0].count == 1) + try test(fso[0][0] == 3.14) + try test(fso[1].count == 1) + try test(fso[1][0] == 1.11) + try test(fso[2].count == 0) + try test(dso.count == 1) + try test(dso[0].count == 3) + try test(dso[0][0] == 1.1e10) + try test(dso[0][1] == 1.2e10) + try test(dso[0][2] == 1.3e10) + try test(rso.count == 2) + try test(rso[0].count == 3) + try test(rso[0][0] == 1.1e10) + try test(rso[0][1] == 1.2e10) + try test(rso[0][2] == 1.3e10) + try test(rso[1].count == 3) + try test(rso[1][0] == 1.1e10) + try test(rso[1][1] == 1.2e10) + try test(rso[1][2] == 1.3e10) + } + + do { + let s11: [String] = ["abc"] + let s12: [String] = ["de", "fghi"] + let ssi1 = [s11, s12] + + let s21: [String] = [] + let s22: [String] = [] + let s23: [String] = ["xyz"] + let ssi2 = [s21, s22, s23] + + let (rso, sso) = try p.opStringSS(p1: ssi1, p2: ssi2) + try test(sso.count == 5) + try test(sso[0].count == 1) + try test(sso[0][0] == "abc") + try test(sso[1].count == 2) + try test(sso[1][0] == "de") + try test(sso[1][1] == "fghi") + try test(sso[2].count == 0) + try test(sso[3].count == 0) + try test(sso[4].count == 1) + try test(sso[4][0] == "xyz") + try test(rso.count == 3) + try test(rso[0].count == 1) + try test(rso[0][0] == "xyz") + try test(rso[1].count == 0) + try test(rso[2].count == 0) + } + + do { + let s111 = ["abc", "de"] + let s112 = ["xyz"] + let ss11 = [s111, s112] + let s121 = ["hello"] + let ss12 = [s121] + let sssi1 = [ss11, ss12] + + let s211 = ["", ""] + let s212 = ["abcd"] + let ss21 = [s211, s212] + let s221 = [""] + let ss22 = [s221] + let ss23 = [[String]]() + let sssi2 = [ss21, ss22, ss23] + + let (rsso, ssso) = try p.opStringSSS(p1: sssi1, p2: sssi2) + try test(ssso.count == 5) + try test(ssso[0].count == 2) + try test(ssso[0][0].count == 2) + try test(ssso[0][1].count == 1) + try test(ssso[1].count == 1) + try test(ssso[1][0].count == 1) + try test(ssso[2].count == 2) + try test(ssso[2][0].count == 2) + try test(ssso[2][1].count == 1) + try test(ssso[3].count == 1) + try test(ssso[3][0].count == 1) + try test(ssso[4].count == 0) + try test(ssso[0][0][0] == "abc") + try test(ssso[0][0][1] == "de") + try test(ssso[0][1][0] == "xyz") + try test(ssso[1][0][0] == "hello") + try test(ssso[2][0][0] == "") + try test(ssso[2][0][1] == "") + try test(ssso[2][1][0] == "abcd") + try test(ssso[3][0][0] == "") + + try test(rsso.count == 3) + try test(rsso[0].count == 0) + try test(rsso[1].count == 1) + try test(rsso[1][0].count == 1) + try test(rsso[2].count == 2) + try test(rsso[2][0].count == 2) + try test(rsso[2][1].count == 1) + try test(rsso[1][0][0] == "") + try test(rsso[2][0][0] == "") + try test(rsso[2][0][1] == "") + try test(rsso[2][1][0] == "abcd") + } + + do { + let di1: [UInt8: Bool] = [10: true, 100: false] + let di2: [UInt8: Bool] = [10: true, 11: false, 101: true] + let (ro, `do`) = try p.opByteBoolD(p1: di1, p2: di2) + + try test(`do` == di1) + try test(ro.count == 4) + try test(ro[10] == true) + try test(ro[11] == false) + try test(ro[100] == false) + try test(ro[101] == true) + } + + do { + let di1: [Int16: Int32] = [110: -1, 1100: 123_123] + let di2: [Int16: Int32] = [110: -1, 111: -100, 1101: 0] + let (ro, `do`) = try p.opShortIntD(p1: di1, p2: di2) + + try test(`do` == di1) + try test(ro.count == 4) + try test(ro[110] == -1) + try test(ro[111] == -100) + try test(ro[1100] == 123_123) + try test(ro[1101] == 0) + } + + do { + let di1: [Int64: Float] = [999_999_110: -1.1, 999_999_111: 123_123.2] + let di2: [Int64: Float] = [999_999_110: -1.1, 999_999_120: -100.4, 999_999_130: 0.5] + let (ro, `do`) = try p.opLongFloatD(p1: di1, p2: di2) + + try test(`do` == di1) + try test(ro.count == 4) + try test(ro[999_999_110] == -1.1) + try test(ro[999_999_120] == -100.4) + try test(ro[999_999_111] == 123_123.2) + try test(ro[999_999_130] == 0.5) + } + + do { + let di1 = ["foo": "abc -1.1", "bar": "abc 123123.2"] + let di2 = ["foo": "abc -1.1", "FOO": "abc -100.4", "BAR": "abc 0.5"] + let (ro, `do`) = try p.opStringStringD(p1: di1, p2: di2) + + try test(`do` == di1) + try test(ro.count == 4) + try test(ro["foo"] == "abc -1.1") + try test(ro["FOO"] == "abc -100.4") + try test(ro["bar"] == "abc 123123.2") + try test(ro["BAR"] == "abc 0.5") + } + + do { + let di1 = ["abc": MyEnum.enum1, "": MyEnum.enum2] + let di2 = ["abc": MyEnum.enum1, "qwerty": MyEnum.enum3, "Hello!!": MyEnum.enum2] + let (ro, `do`) = try p.opStringMyEnumD(p1: di1, p2: di2) + + try test(`do` == di1) + try test(ro.count == 4) + try test(ro["abc"] == MyEnum.enum1) + try test(ro["qwerty"] == MyEnum.enum3) + try test(ro[""] == MyEnum.enum2) + try test(ro["Hello!!"] == MyEnum.enum2) + } + + do { + let di1 = [MyEnum.enum1: "abc"] + let di2 = [MyEnum.enum2: "Hello!!", MyEnum.enum3: "qwerty"] + let (ro, `do`) = try p.opMyEnumStringD(p1: di1, p2: di2) + + try test(`do` == di1) + try test(ro.count == 3) + try test(ro[MyEnum.enum1] == "abc") + try test(ro[MyEnum.enum2] == "Hello!!") + try test(ro[MyEnum.enum3] == "qwerty") + } + + do { + let s11 = MyStruct(i: 1, j: 1) + let s12 = MyStruct(i: 1, j: 2) + let di1 = [s11: MyEnum.enum1, s12: MyEnum.enum2] + + let s22 = MyStruct(i: 2, j: 2) + let s23 = MyStruct(i: 2, j: 3) + let di2 = [s11: MyEnum.enum1, s22: MyEnum.enum3, s23: MyEnum.enum2] + + let (ro, `do`) = try p.opMyStructMyEnumD(p1: di1, p2: di2) + + try test(`do` == di1) + try test(ro.count == 4) + try test(ro[s11] == MyEnum.enum1) + try test(ro[s12] == MyEnum.enum2) + try test(ro[s22] == MyEnum.enum3) + try test(ro[s23] == MyEnum.enum2) + } + + do { + let di1: [UInt8: Bool] = [10: true, 100: false] + let di2: [UInt8: Bool] = [10: true, 11: false, 101: true] + let di3: [UInt8: Bool] = [100: false, 101: false] + + let dsi1 = [di1, di2] + let dsi2 = [di3] + + let (ro, `do`) = try p.opByteBoolDS(p1: dsi1, p2: dsi2) + + try test(ro.count == 2) + try test(ro[0].count == 3) + try test(ro[0][10]!) + try test(!ro[0][11]!) + try test(ro[0][101]!) + try test(ro[1].count == 2) + try test(ro[1][10]!) + try test(!ro[1][100]!) + + try test(`do`.count == 3) + try test(`do`[0].count == 2) + try test(!`do`[0][100]!) + try test(!`do`[0][101]!) + try test(`do`[1].count == 2) + try test(`do`[1][10]!) + try test(!`do`[1][100]!) + try test(`do`[2].count == 3) + try test(`do`[2][10]!) + try test(!`do`[2][11]!) + try test(`do`[2][101]!) + } + + do { + let di1: [Int16: Int32] = [110: -1, 1100: 123_123] + let di2: [Int16: Int32] = [110: -1, 111: -100, 1101: 0] + let di3: [Int16: Int32] = [100: -1001] + + let dsi1 = [di1, di2] + let dsi2 = [di3] + + let (ro, `do`) = try p.opShortIntDS(p1: dsi1, p2: dsi2) + + try test(ro.count == 2) + try test(ro[0].count == 3) + try test(ro[0][110] == -1) + try test(ro[0][111] == -100) + try test(ro[0][1101] == 0) + try test(ro[1].count == 2) + try test(ro[1][110] == -1) + try test(ro[1][1100] == 123_123) + + try test(`do`.count == 3) + try test(`do`[0].count == 1) + try test(`do`[0][100] == -1001) + try test(`do`[1].count == 2) + try test(`do`[1][110] == -1) + try test(`do`[1][1100] == 123_123) + try test(`do`[2].count == 3) + try test(`do`[2][110] == -1) + try test(`do`[2][111] == -100) + try test(`do`[2][1101] == 0) + } + + do { + let di1: [Int64: Float] = [999_999_110: -1.1, 999_999_111: 123_123.2] + let di2: [Int64: Float] = [999_999_110: -1.1, 999_999_120: -100.4, 999_999_130: 0.5] + let di3: [Int64: Float] = [999_999_140: 3.14] + + let dsi1 = [di1, di2] + let dsi2 = [di3] + + let (ro, `do`) = try p.opLongFloatDS(p1: dsi1, p2: dsi2) + + try test(ro.count == 2) + try test(ro[0].count == 3) + try test(ro[0][999_999_110] == -1.1) + try test(ro[0][999_999_120] == -100.4) + try test(ro[0][999_999_130] == 0.5) + try test(ro[1].count == 2) + try test(ro[1][999_999_110] == -1.1) + try test(ro[1][999_999_111] == 123_123.2) + + try test(`do`.count == 3) + try test(`do`[0].count == 1) + try test(`do`[0][999_999_140] == 3.14) + try test(`do`[1].count == 2) + try test(`do`[1][999_999_110] == -1.1) + try test(`do`[1][999_999_111] == 123_123.2) + try test(`do`[2].count == 3) + try test(`do`[2][999_999_110] == -1.1) + try test(`do`[2][999_999_120] == -100.4) + try test(`do`[2][999_999_130] == 0.5) + } + + do { + let di1 = ["foo": "abc -1.1", "bar": "abc 123123.2"] + let di2 = ["foo": "abc -1.1", "FOO": "abc -100.4", "BAR": "abc 0.5"] + let di3 = ["f00": "ABC -3.14"] + + let dsi1 = [di1, di2] + let dsi2 = [di3] + + let (ro, `do`) = try p.opStringStringDS(p1: dsi1, p2: dsi2) + + try test(ro.count == 2) + try test(ro[0].count == 3) + try test(ro[0]["foo"] == "abc -1.1") + try test(ro[0]["FOO"] == "abc -100.4") + try test(ro[0]["BAR"] == "abc 0.5") + try test(ro[1].count == 2) + try test(ro[1]["foo"] == "abc -1.1") + try test(ro[1]["bar"] == "abc 123123.2") + + try test(`do`.count == 3) + try test(`do`[0].count == 1) + try test(`do`[0]["f00"] == "ABC -3.14") + try test(`do`[1].count == 2) + try test(`do`[1]["foo"] == "abc -1.1") + try test(`do`[1]["bar"] == "abc 123123.2") + try test(`do`[2].count == 3) + try test(`do`[2]["foo"] == "abc -1.1") + try test(`do`[2]["FOO"] == "abc -100.4") + try test(`do`[2]["BAR"] == "abc 0.5") + } + + do { + let di1 = ["abc": MyEnum.enum1, "": MyEnum.enum2] + let di2 = ["abc": MyEnum.enum1, "qwerty": MyEnum.enum3, "Hello!!": MyEnum.enum2] + let di3 = ["Goodbye": MyEnum.enum1] + + let dsi1 = [di1, di2] + let dsi2 = [di3] + + let (ro, `do`) = try p.opStringMyEnumDS(p1: dsi1, p2: dsi2) + + try test(ro.count == 2) + try test(ro[0].count == 3) + try test(ro[0]["abc"] == MyEnum.enum1) + try test(ro[0]["qwerty"] == MyEnum.enum3) + try test(ro[0]["Hello!!"] == MyEnum.enum2) + try test(ro[1].count == 2) + try test(ro[1]["abc"] == MyEnum.enum1) + try test(ro[1][""] == MyEnum.enum2) + + try test(`do`.count == 3) + try test(`do`[0].count == 1) + try test(`do`[0]["Goodbye"] == MyEnum.enum1) + try test(`do`[1].count == 2) + try test(`do`[1]["abc"] == MyEnum.enum1) + try test(`do`[1][""] == MyEnum.enum2) + try test(`do`[2].count == 3) + try test(`do`[2]["abc"] == MyEnum.enum1) + try test(`do`[2]["qwerty"] == MyEnum.enum3) + try test(`do`[2]["Hello!!"] == MyEnum.enum2) + } + + do { + let di1 = [MyEnum.enum1: "abc"] + let di2 = [MyEnum.enum2: "Hello!!", MyEnum.enum3: "qwerty"] + let di3 = [MyEnum.enum1: "Goodbye"] + + let dsi1 = [di1, di2] + let dsi2 = [di3] + + let (ro, `do`) = try p.opMyEnumStringDS(p1: dsi1, p2: dsi2) + + try test(ro.count == 2) + try test(ro[0].count == 2) + try test(ro[0][MyEnum.enum2] == "Hello!!") + try test(ro[0][MyEnum.enum3] == "qwerty") + try test(ro[1].count == 1) + try test(ro[1][MyEnum.enum1] == "abc") + + try test(`do`.count == 3) + try test(`do`[0].count == 1) + try test(`do`[0][MyEnum.enum1] == "Goodbye") + try test(`do`[1].count == 1) + try test(`do`[1][MyEnum.enum1] == "abc") + try test(`do`[2].count == 2) + try test(`do`[2][MyEnum.enum2] == "Hello!!") + try test(`do`[2][MyEnum.enum3] == "qwerty") + } + + do { + let s11 = MyStruct(i: 1, j: 1) + let s12 = MyStruct(i: 1, j: 2) + let di1 = [s11: MyEnum.enum1, s12: MyEnum.enum2] + + let s22 = MyStruct(i: 2, j: 2) + let s23 = MyStruct(i: 2, j: 3) + let di2 = [s11: MyEnum.enum1, s22: MyEnum.enum3, s23: MyEnum.enum2] + + let di3 = [s23: MyEnum.enum3] + + let dsi1 = [di1, di2] + let dsi2 = [di3] + + let (ro, `do`) = try p.opMyStructMyEnumDS(p1: dsi1, p2: dsi2) + + try test(ro.count == 2) + try test(ro[0].count == 3) + try test(ro[0][s11] == MyEnum.enum1) + try test(ro[0][s22] == MyEnum.enum3) + try test(ro[0][s23] == MyEnum.enum2) + try test(ro[1].count == 2) + try test(ro[1][s11] == MyEnum.enum1) + try test(ro[1][s12] == MyEnum.enum2) + + try test(`do`.count == 3) + try test(`do`[0].count == 1) + try test(`do`[0][s23] == MyEnum.enum3) + try test(`do`[1].count == 2) + try test(`do`[1][s11] == MyEnum.enum1) + try test(`do`[1][s12] == MyEnum.enum2) + try test(`do`[2].count == 3) + try test(`do`[2][s11] == MyEnum.enum1) + try test(`do`[2][s22] == MyEnum.enum3) + try test(`do`[2][s23] == MyEnum.enum2) + } + + do { + let si1 = ByteSeq([0x01, 0x11]) + let si2 = ByteSeq([0x12]) + let si3 = ByteSeq([0xF2, 0xF3]) + + let sdi1: [UInt8: ByteSeq] = [0x01: si1, 0x22: si2] + let sdi2: [UInt8: ByteSeq] = [0xF1: si3] + + let (ro, `do`) = try p.opByteByteSD(p1: sdi1, p2: sdi2) + + try test(`do`.count == 1) + try test(`do`[0xF1]!.count == 2) + try test(`do`[0xF1]![0] == 0xF2) + try test(`do`[0xF1]![1] == 0xF3) + + try test(ro.count == 3) + try test(ro[0x01]!.count == 2) + try test(ro[0x01]![0] == 0x01) + try test(ro[0x01]![1] == 0x11) + try test(ro[0x22]!.count == 1) + try test(ro[0x22]![0] == 0x12) + try test(ro[0xF1]!.count == 2) + try test(ro[0xF1]![0] == 0xF2) + try test(ro[0xF1]![1] == 0xF3) + } + + do { + let si1 = [true, false] + let si2 = [false, true, true] + + let sdi1 = [false: si1, true: si2] + let sdi2 = [false: si1] + + let (ro, `do`) = try p.opBoolBoolSD(p1: sdi1, p2: sdi2) + + try test(`do`.count == 1) + try test(`do`[false]!.count == 2) + try test(`do`[false]![0]) + try test(!`do`[false]![1]) + try test(ro.count == 2) + try test(ro[false]!.count == 2) + try test(ro[false]![0]) + try test(!ro[false]![1]) + try test(ro[true]!.count == 3) + try test(!ro[true]![0]) + try test(ro[true]![1]) + try test(ro[true]![2]) + } + + do { + let si1: [Int16] = [1, 2, 3] + let si2: [Int16] = [4, 5] + let si3: [Int16] = [6, 7] + + let sdi1: [Int16: [Int16]] = [1: si1, 2: si2] + let sdi2: [Int16: [Int16]] = [4: si3] + + let (ro, `do`) = try p.opShortShortSD(p1: sdi1, p2: sdi2) + + try test(`do`.count == 1) + try test(`do`[4]!.count == 2) + try test(`do`[4]![0] == 6) + try test(`do`[4]![1] == 7) + + try test(ro.count == 3) + try test(ro[1]!.count == 3) + try test(ro[1]![0] == 1) + try test(ro[1]![1] == 2) + try test(ro[1]![2] == 3) + try test(ro[2]!.count == 2) + try test(ro[2]![0] == 4) + try test(ro[2]![1] == 5) + try test(ro[4]!.count == 2) + try test(ro[4]![0] == 6) + try test(ro[4]![1] == 7) + } + + do { + let si1: [Int32] = [100, 200, 300] + let si2: [Int32] = [400, 500] + let si3: [Int32] = [600, 700] + + let sdi1: [Int32: [Int32]] = [100: si1, 200: si2] + let sdi2: [Int32: [Int32]] = [400: si3] + + let (ro, `do`) = try p.opIntIntSD(p1: sdi1, p2: sdi2) + + try test(`do`.count == 1) + try test(`do`[400]!.count == 2) + try test(`do`[400]![0] == 600) + try test(`do`[400]![1] == 700) + + try test(ro.count == 3) + try test(ro[100]!.count == 3) + try test(ro[100]![0] == 100) + try test(ro[100]![1] == 200) + try test(ro[100]![2] == 300) + try test(ro[200]!.count == 2) + try test(ro[200]![0] == 400) + try test(ro[200]![1] == 500) + try test(ro[400]!.count == 2) + try test(ro[400]![0] == 600) + try test(ro[400]![1] == 700) + } + + do { + let si1: [Int64] = [999_999_110, 999_999_111, 999_999_110] + let si2: [Int64] = [999_999_120, 999_999_130] + let si3: [Int64] = [999_999_110, 999_999_120] + + let sdi1: [Int64: [Int64]] = [999_999_990: si1, 999_999_991: si2] + let sdi2: [Int64: [Int64]] = [999_999_992: si3] + + let (ro, `do`) = try p.opLongLongSD(p1: sdi1, p2: sdi2) + + try test(`do`.count == 1) + try test(`do`[999_999_992]!.count == 2) + try test(`do`[999_999_992]![0] == 999_999_110) + try test(`do`[999_999_992]![1] == 999_999_120) + try test(ro.count == 3) + try test(ro[999_999_990]!.count == 3) + try test(ro[999_999_990]![0] == 999_999_110) + try test(ro[999_999_990]![1] == 999_999_111) + try test(ro[999_999_990]![2] == 999_999_110) + try test(ro[999_999_991]!.count == 2) + try test(ro[999_999_991]![0] == 999_999_120) + try test(ro[999_999_991]![1] == 999_999_130) + try test(ro[999_999_992]!.count == 2) + try test(ro[999_999_992]![0] == 999_999_110) + try test(ro[999_999_992]![1] == 999_999_120) + } + + do { + let si1: [Float] = [-1.1, 123_123.2, 100.0] + let si2: [Float] = [42.24, -1.61] + let si3: [Float] = [-3.14, 3.14] + + let sdi1 = ["abc": si1, "ABC": si2] + let sdi2 = ["aBc": si3] + + let (ro, `do`) = try p.opStringFloatSD(p1: sdi1, p2: sdi2) + + try test(`do`.count == 1) + try test(`do`["aBc"]!.count == 2) + try test(`do`["aBc"]![0] == -3.14) + try test(`do`["aBc"]![1] == 3.14) + + try test(ro.count == 3) + try test(ro["abc"]!.count == 3) + try test(ro["abc"]![0] == -1.1) + try test(ro["abc"]![1] == 123_123.2) + try test(ro["abc"]![2] == 100.0) + try test(ro["ABC"]!.count == 2) + try test(ro["ABC"]![0] == 42.24) + try test(ro["ABC"]![1] == -1.61) + try test(ro["aBc"]!.count == 2) + try test(ro["aBc"]![0] == -3.14) + try test(ro["aBc"]![1] == 3.14) + } + + do { + let si1: [Double] = [1.1e10, 1.2e10, 1.3e10] + let si2: [Double] = [1.4e10, 1.5e10] + let si3: [Double] = [1.6e10, 1.7e10] + + let sdi1 = ["Hello!!": si1, "Goodbye": si2] + let sdi2 = ["": si3] + + let (ro, `do`) = try p.opStringDoubleSD(p1: sdi1, p2: sdi2) + + try test(`do`.count == 1) + try test(`do`[""]!.count == 2) + try test(`do`[""]![0] == 1.6e10) + try test(`do`[""]![1] == 1.7e10) + try test(ro.count == 3) + try test(ro["Hello!!"]!.count == 3) + try test(ro["Hello!!"]![0] == 1.1e10) + try test(ro["Hello!!"]![1] == 1.2e10) + try test(ro["Hello!!"]![2] == 1.3e10) + try test(ro["Goodbye"]!.count == 2) + try test(ro["Goodbye"]![0] == 1.4e10) + try test(ro["Goodbye"]![1] == 1.5e10) + try test(ro[""]!.count == 2) + try test(ro[""]![0] == 1.6e10) + try test(ro[""]![1] == 1.7e10) + } + + do { + let si1 = ["abc", "de", "fghi"] + let si2 = ["xyz", "or"] + let si3 = ["and", "xor"] + + let sdi1 = ["abc": si1, "def": si2] + let sdi2 = ["ghi": si3] + + let (ro, `do`) = try p.opStringStringSD(p1: sdi1, p2: sdi2) + + try test(`do`.count == 1) + try test(`do`["ghi"]!.count == 2) + try test(`do`["ghi"]![0] == "and") + try test(`do`["ghi"]![1] == "xor") + + try test(ro.count == 3) + try test(ro["abc"]!.count == 3) + try test(ro["abc"]![0] == "abc") + try test(ro["abc"]![1] == "de") + try test(ro["abc"]![2] == "fghi") + try test(ro["def"]!.count == 2) + try test(ro["def"]![0] == "xyz") + try test(ro["def"]![1] == "or") + try test(ro["ghi"]!.count == 2) + try test(ro["ghi"]![0] == "and") + try test(ro["ghi"]![1] == "xor") + } + + do { + let si1 = [MyEnum.enum1, MyEnum.enum1, MyEnum.enum2] + let si2 = [MyEnum.enum1, MyEnum.enum2] + let si3 = [MyEnum.enum3, MyEnum.enum3] + + let sdi1 = [MyEnum.enum3: si1, MyEnum.enum2: si2] + let sdi2 = [MyEnum.enum1: si3] + + let (ro, `do`) = try p.opMyEnumMyEnumSD(p1: sdi1, p2: sdi2) + + try test(`do`.count == 1) + try test(`do`[MyEnum.enum1]!.count == 2) + try test(`do`[MyEnum.enum1]![0] == MyEnum.enum3) + try test(`do`[MyEnum.enum1]![1] == MyEnum.enum3) + try test(ro.count == 3) + try test(ro[MyEnum.enum3]!.count == 3) + try test(ro[MyEnum.enum3]![0] == MyEnum.enum1) + try test(ro[MyEnum.enum3]![1] == MyEnum.enum1) + try test(ro[MyEnum.enum3]![2] == MyEnum.enum2) + try test(ro[MyEnum.enum2]!.count == 2) + try test(ro[MyEnum.enum2]![0] == MyEnum.enum1) + try test(ro[MyEnum.enum2]![1] == MyEnum.enum2) + try test(ro[MyEnum.enum1]!.count == 2) + try test(ro[MyEnum.enum1]![0] == MyEnum.enum3) + try test(ro[MyEnum.enum1]![1] == MyEnum.enum3) + } + + do { + let lengths: [Int32] = [0, 1, 2, 126, 127, 128, 129, 253, 254, 255, 256, 257, 1000] + + for l in 0 ..< lengths.count { + var s: [Int32] = [Int32]() + for i in 0 ..< lengths[l] { + s.append(i) + } + + let r = try p.opIntS(s) + try test(r.count == lengths[l]) + for j in 0 ..< r.count { + try test(r[j] == -j) + } + } + } + + do { + let ctx = ["one": "ONE", "two": "TWO", "three": "THREE"] + do { + try test(p.ice_getContext().count == 0) + let r = try p.opContext() + try test(r != ctx) + } + + do { + let r = try p.opContext(context: ctx) + try test(p.ice_getContext().count == 0) + try test(r == ctx) + } + + do { + let p2 = try checkedCast(prx: p.ice_context(ctx), type: MyClassPrx.self)! + try test(p2.ice_getContext() == ctx) + var r = try p2.opContext() + try test(r == ctx) + r = try p2.opContext(context: ctx) + try test(r == ctx) + } + } + + let conn = try p.ice_getConnection() + if conn != nil { + // + // Test implicit context propagation + // + var initData = Ice.InitializationData() + let properties = communicator.getProperties().clone() + properties.setProperty(key: "Ice.ImplicitContext", value: "Shared") + initData.properties = properties + + let ic = try helper.initialize(initData) + + var ctx = ["one": "ONE", "two": "TWO", "three": "THREE"] + + var p3 = try uncheckedCast(prx: ic.stringToProxy("test:\(helper.getTestEndpoint(num: 0))")!, + type: MyClassPrx.self) + + ic.getImplicitContext().setContext(ctx) + try test(ic.getImplicitContext().getContext() == ctx) + try test(p3.opContext() == ctx) + + try test(ic.getImplicitContext().containsKey("zero") == false) + let r = ic.getImplicitContext().put(key: "zero", value: "ZERO") + try test(r == "") + try test(ic.getImplicitContext().get("zero") == "ZERO") + + ctx = ic.getImplicitContext().getContext() + try test(p3.opContext() == ctx) + + let prxContext = ["one": "UN", "four": "QUATRE"] + + var combined = prxContext + for (key, value) in ctx where combined[key] == nil { + combined[key] = value + } + try test(combined["one"] == "UN") + + p3 = uncheckedCast(prx: p3.ice_context(prxContext), type: MyClassPrx.self) + + ic.getImplicitContext().setContext(Ice.Context()) + try test(p3.opContext() == prxContext) + + ic.getImplicitContext().setContext(ctx) + try test(p3.opContext() == combined) + + ic.destroy() + } + + do { + try p.opIdempotent() + } + + do { + try p.opNonmutating() + } + + do { + try test(p.opByte1(0xFF) == 0xFF) + try test(p.opShort1(0x7FFF) == 0x7FFF) + try test(p.opInt1(0x7FFF_FFFF) == 0x7FFF_FFFF) + try test(p.opLong1(0x7FFF_FFFF_FFFF_FFFF) == 0x7FFF_FFFF_FFFF_FFFF) + try test(p.opFloat1(1.0) == 1.0) + try test(p.opDouble1(1.0) == 1.0) + try test(p.opString1("opString1") == "opString1") + try test(p.opStringS1([]).count == 0) + try test(p.opByteBoolD1([:]).count == 0) + try test(p.opStringS2([]).count == 0) + try test(p.opByteBoolD2([:]).count == 0) + + let d = uncheckedCast(prx: p, type: MyDerivedClassPrx.self) + var s = MyStruct1() + s.tesT = "MyStruct1.s" + s.myClass = nil + s.myStruct1 = "MyStruct1.myStruct1" + s = try d.opMyStruct1(s) + try test(s.tesT == "MyStruct1.s") + try test(s.myClass == nil) + try test(s.myStruct1 == "MyStruct1.myStruct1") + var c = MyClass1() + c.tesT = "MyClass1.testT" + c.myClass = nil + c.myClass1 = "MyClass1.myClass1" + c = try d.opMyClass1(c)! + try test(c.tesT == "MyClass1.testT") + try test(c.myClass == nil) + try test(c.myClass1 == "MyClass1.myClass1") + } + + do { + try bprx.opB() + try bprx.opIntf() + } +} diff --git a/swift/test/Ice/operations/TwowaysAMI.swift b/swift/test/Ice/operations/TwowaysAMI.swift new file mode 100644 index 00000000000..57357246be2 --- /dev/null +++ b/swift/test/Ice/operations/TwowaysAMI.swift @@ -0,0 +1,754 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import PromiseKit +import TestCommon + +func twowaysAMI(_ helper: TestHelper, _ p: MyClassPrx) throws { + func test(_ value: Bool, file: String = #file, line: Int = #line) throws { + try helper.test(value, file: file, line: line) + } + + let communicator = helper.communicator() + + try firstly { + p.ice_pingAsync() + }.wait() + + try firstly { + p.ice_isAAsync(id: ice_staticId(MyClassPrx.self)) + }.done { ret in + try test(ret) + }.wait() + + try firstly { + p.ice_idsAsync() + }.done { ids in + try test(ids.count == 3) + }.wait() + + try firstly { + p.ice_idAsync() + }.done { ret in + try test(ret == ice_staticId(MyDerivedClassPrx.self)) + }.wait() + + try firstly { + p.opVoidAsync() + }.wait() + + try firstly { + p.opByteAsync(p1: 0xFF, p2: 0x0F) + }.done { returnValue, p3 in + try test(returnValue == 0xFF) + try test(p3 == 0xF0) + }.wait() + + try firstly { + p.opBoolAsync(p1: true, p2: false) + }.done { returnValue, p3 in + try test(!returnValue) + try test(p3) + }.wait() + + try firstly { + p.opShortIntLongAsync(p1: 10, p2: 11, p3: 12) + }.done { returnValue, p4, p5, p6 in + try test(p4 == 10) + try test(p5 == 11) + try test(p6 == 12) + try test(returnValue == 12) + }.wait() + + try firstly { + p.opFloatDoubleAsync(p1: 3.14, p2: 1.1e10) + }.done { returnValue, p3, p4 in + try test(p3 == 3.14) + try test(p4 == 1.1e10) + try test(returnValue == 1.1e10) + }.wait() + + try firstly { + p.opStringAsync(p1: "hello", p2: "world") + }.done { returnValue, p3 in + try test(p3 == "world hello") + try test(returnValue == "hello world") + }.wait() + + try firstly { + p.opMyEnumAsync(MyEnum.enum2) + }.done { returnValue, p2 in + try test(p2 == MyEnum.enum2) + try test(returnValue == MyEnum.enum3) + }.wait() + + try firstly { + p.opMyClassAsync(p) + }.done { returnValue, p2, p3 in + try test(p2!.ice_getIdentity() == Ice.stringToIdentity("test")) + try test(p3!.ice_getIdentity() == Ice.stringToIdentity("noSuchIdentity")) + try test(returnValue!.ice_getIdentity() == Ice.stringToIdentity("test")) + + // + // We can't do the callbacks below in connection serialization mode. + // + if communicator.getProperties().getPropertyAsInt("Ice.ThreadPool.Client.Serialize") == 0 { + try returnValue!.opVoid() + try p2!.opVoid() + do { + try p3!.opVoid() + try test(false) + } catch is Ice.ObjectNotExistException {} + } + }.wait() + + try firstly { + p.opStructAsync(p1: Structure(p: p, e: MyEnum.enum3, s: AnotherStruct(s: "abc")), + p2: Structure(p: nil, e: MyEnum.enum2, s: AnotherStruct(s: "def"))) + }.done { returnValue, p3 in + try test(returnValue.p == nil) + try test(returnValue.e == MyEnum.enum2) + try test(returnValue.s.s == "def") + try test(p3.e == MyEnum.enum3) + try test(p3.s.s == "a new string") + // + // We can't do the callbacks below in connection serialization mode. + // + if communicator.getProperties().getPropertyAsInt("Ice.ThreadPool.Client.Serialize") == 0 { + try p3.p!.opVoid() + } + }.wait() + + try firstly { + p.opByteSAsync(p1: ByteSeq([0x01, 0x11, 0x12, 0x22]), + p2: ByteSeq([0xF1, 0xF2, 0xF3, 0xF4])) + }.done { returnValue, p3 in + try test(p3.count == 4) + try test(p3[0] == 0x22) + try test(p3[1] == 0x12) + try test(p3[2] == 0x11) + try test(p3[3] == 0x01) + try test(returnValue.count == 8) + try test(returnValue[0] == 0x01) + try test(returnValue[1] == 0x11) + try test(returnValue[2] == 0x12) + try test(returnValue[3] == 0x22) + try test(returnValue[4] == 0xF1) + try test(returnValue[5] == 0xF2) + try test(returnValue[6] == 0xF3) + try test(returnValue[7] == 0xF4) + }.wait() + + try firstly { + p.opBoolSAsync(p1: [true, true, false], p2: [false]) + }.done { returnValue, p3 in + try test(p3.count == 4) + try test(p3[0]) + try test(p3[1]) + try test(!p3[2]) + try test(!p3[3]) + try test(returnValue.count == 3) + try test(!returnValue[0]) + try test(returnValue[1]) + try test(returnValue[2]) + }.wait() + + try firstly { + p.opShortIntLongSAsync(p1: [1, 2, 3], + p2: [5, 6, 7, 8], + p3: [10, 30, 20]) + }.done { returnValue, p4, p5, p6 in + try test(p4.count == 3) + try test(p4[0] == 1) + try test(p4[1] == 2) + try test(p4[2] == 3) + try test(p5.count == 4) + try test(p5[0] == 8) + try test(p5[1] == 7) + try test(p5[2] == 6) + try test(p5[3] == 5) + try test(p6.count == 6) + try test(p6[0] == 10) + try test(p6[1] == 30) + try test(p6[2] == 20) + try test(p6[3] == 10) + try test(p6[4] == 30) + try test(p6[5] == 20) + try test(returnValue.count == 3) + try test(returnValue[0] == 10) + try test(returnValue[1] == 30) + try test(returnValue[2] == 20) + }.wait() + + try firstly { + p.opFloatDoubleSAsync(p1: [3.14, 1.11], + p2: [1.1e10, 1.2e10, 1.3e10]) + }.done { returnValue, p3, p4 in + try test(p3.count == 2) + try test(p3[0] == 3.14) + try test(p3[1] == 1.11) + try test(p4.count == 3) + try test(p4[0] == 1.3e10) + try test(p4[1] == 1.2e10) + try test(p4[2] == 1.1e10) + try test(returnValue.count == 5) + try test(returnValue[0] == 1.1e10) + try test(returnValue[1] == 1.2e10) + try test(returnValue[2] == 1.3e10) + try test(Float(returnValue[3]) == 3.14) + try test(Float(returnValue[4]) == 1.11) + }.wait() + + try firstly { + p.opStringSAsync(p1: ["abc", "de", "fghi"], + p2: ["xyz"]) + }.done { returnValue, p3 in + try test(p3.count == 4) + try test(p3[0] == "abc") + try test(p3[1] == "de") + try test(p3[2] == "fghi") + try test(p3[3] == "xyz") + try test(returnValue.count == 3) + try test(returnValue[0] == "fghi") + try test(returnValue[1] == "de") + try test(returnValue[2] == "abc") + }.wait() + + try firstly { + p.opByteSSAsync(p1: [ByteSeq([0x01, 0x11, 0x12]), ByteSeq([0xFF])], + p2: [ByteSeq([0x0E]), ByteSeq([0xF2, 0xF1])]) + }.done { returnValue, p3 in + try test(p3.count == 2) + try test(p3[0].count == 1) + try test(p3[0][0] == 0xFF) + try test(p3[1].count == 3) + try test(p3[1][0] == 0x01) + try test(p3[1][1] == 0x11) + try test(p3[1][2] == 0x12) + try test(returnValue.count == 4) + try test(returnValue[0].count == 3) + try test(returnValue[0][0] == 0x01) + try test(returnValue[0][1] == 0x11) + try test(returnValue[0][2] == 0x12) + try test(returnValue[1].count == 1) + try test(returnValue[1][0] == 0xFF) + try test(returnValue[2].count == 1) + try test(returnValue[2][0] == 0x0E) + try test(returnValue[3].count == 2) + try test(returnValue[3][0] == 0xF2) + try test(returnValue[3][1] == 0xF1) + }.wait() + + try firstly { + p.opBoolSSAsync(p1: [[true], [false], [true, true]], + p2: [[false, false, true]]) + }.done { returnValue, p3 in + try test(p3.count == 4) + try test(p3[0].count == 1) + try test(p3[0][0]) + try test(p3[1].count == 1) + try test(!p3[1][0]) + try test(p3[2].count == 2) + try test(p3[2][0]) + try test(p3[2][1]) + try test(p3[3].count == 3) + try test(!p3[3][0]) + try test(!p3[3][1]) + try test(p3[3][2]) + try test(returnValue.count == 3) + try test(returnValue[0].count == 2) + try test(returnValue[0][0]) + try test(returnValue[0][1]) + try test(returnValue[1].count == 1) + try test(!returnValue[1][0]) + try test(returnValue[2].count == 1) + try test(returnValue[2][0]) + }.wait() + + try firstly { + p.opShortIntLongSSAsync(p1: [[1, 2, 5], [13], []], + p2: [[24, 98], [42]], + p3: [[496, 1729]]) + }.done { returnValue, p4, p5, p6 in + try test(returnValue.count == 1) + try test(returnValue[0].count == 2) + try test(returnValue[0][0] == 496) + try test(returnValue[0][1] == 1729) + try test(p4.count == 3) + try test(p4[0].count == 3) + try test(p4[0][0] == 1) + try test(p4[0][1] == 2) + try test(p4[0][2] == 5) + try test(p4[1].count == 1) + try test(p4[1][0] == 13) + try test(p4[2].count == 0) + try test(p5.count == 2) + try test(p5[0].count == 1) + try test(p5[0][0] == 42) + try test(p5[1].count == 2) + try test(p5[1][0] == 24) + try test(p5[1][1] == 98) + try test(p6.count == 2) + try test(p6[0].count == 2) + try test(p6[0][0] == 496) + try test(p6[0][1] == 1729) + try test(p6[1].count == 2) + try test(p6[1][0] == 496) + try test(p6[1][1] == 1729) + }.wait() + + try firstly { + p.opFloatDoubleSSAsync(p1: [[3.14], [1.11], []], + p2: [[1.1e10, 1.2e10, 1.3e10]]) + }.done { returnValue, p3, p4 in + try test(p3.count == 3) + try test(p3[0].count == 1) + try test(p3[0][0] == 3.14) + try test(p3[1].count == 1) + try test(p3[1][0] == 1.11) + try test(p3[2].count == 0) + try test(p4.count == 1) + try test(p4[0].count == 3) + try test(p4[0][0] == 1.1e10) + try test(p4[0][1] == 1.2e10) + try test(p4[0][2] == 1.3e10) + try test(returnValue.count == 2) + try test(returnValue[0].count == 3) + try test(returnValue[0][0] == 1.1e10) + try test(returnValue[0][1] == 1.2e10) + try test(returnValue[0][2] == 1.3e10) + try test(returnValue[1].count == 3) + try test(returnValue[1][0] == 1.1e10) + try test(returnValue[1][1] == 1.2e10) + try test(returnValue[1][2] == 1.3e10) + }.wait() + + try firstly { + p.opStringSSAsync(p1: [["abc"], ["de", "fghi"]], + p2: [[], [], ["xyz"]]) + }.done { returnValue, p3 in + try test(p3.count == 5) + try test(p3[0].count == 1) + try test(p3[0][0] == "abc") + try test(p3[1].count == 2) + try test(p3[1][0] == "de") + try test(p3[1][1] == "fghi") + try test(p3[2].count == 0) + try test(p3[3].count == 0) + try test(p3[4].count == 1) + try test(p3[4][0] == "xyz") + try test(returnValue.count == 3) + try test(returnValue[0].count == 1) + try test(returnValue[0][0] == "xyz") + try test(returnValue[1].count == 0) + try test(returnValue[2].count == 0) + }.wait() + + try firstly { + p.opStringSSSAsync(p1: [[["abc", "de"], ["xyz"]], [["hello"]]], + p2: [[["", ""], ["abcd"]], [[""]], []]) + }.done { returnValue, p3 in + + try test(p3.count == 5) + try test(p3[0].count == 2) + try test(p3[0][0].count == 2) + try test(p3[0][1].count == 1) + try test(p3[1].count == 1) + try test(p3[1][0].count == 1) + try test(p3[2].count == 2) + try test(p3[2][0].count == 2) + try test(p3[2][1].count == 1) + try test(p3[3].count == 1) + try test(p3[3][0].count == 1) + try test(p3[4].count == 0) + try test(p3[0][0][0] == "abc") + try test(p3[0][0][1] == "de") + try test(p3[0][1][0] == "xyz") + try test(p3[1][0][0] == "hello") + try test(p3[2][0][0] == "") + try test(p3[2][0][1] == "") + try test(p3[2][1][0] == "abcd") + try test(p3[3][0][0] == "") + + try test(returnValue.count == 3) + try test(returnValue[0].count == 0) + try test(returnValue[1].count == 1) + try test(returnValue[1][0].count == 1) + try test(returnValue[2].count == 2) + try test(returnValue[2][0].count == 2) + try test(returnValue[2][1].count == 1) + try test(returnValue[1][0][0] == "") + try test(returnValue[2][0][0] == "") + try test(returnValue[2][0][1] == "") + try test(returnValue[2][1][0] == "abcd") + }.wait() + + try firstly { + p.opByteBoolDAsync(p1: [10: true, 100: false], + p2: [10: true, 11: false, 101: true]) + }.done { returnValue, p3 in + try test(p3 == [10: true, 100: false]) + try test(returnValue == [10: true, 11: false, 100: false, 101: true]) + }.wait() + + try firstly { + p.opShortIntDAsync(p1: [110: -1, 1100: 123_123], + p2: [110: -1, 111: -100, 1101: 0]) + }.done { returnValue, p3 in + try test(p3 == [110: -1, 1100: 123_123]) + try test(returnValue == [110: -1, 111: -100, 1100: 123_123, 1101: 0]) + }.wait() + + try firstly { + p.opLongFloatDAsync(p1: [999_999_110: -1.1, 999_999_111: 123_123.2], + p2: [999_999_110: -1.1, 999_999_120: -100.4, 999_999_130: 0.5]) + }.done { returnValue, p3 in + try test(p3 == [999_999_110: -1.1, 999_999_111: 123_123.2]) + try test(returnValue == [999_999_110: -1.1, 999_999_120: -100.4, 999_999_111: 123_123.2, 999_999_130: 0.5]) + }.wait() + + try firstly { + p.opStringStringDAsync(p1: ["foo": "abc -1.1", "bar": "abc 123123.2"], + p2: ["foo": "abc -1.1", "FOO": "abc -100.4", "BAR": "abc 0.5"]) + }.done { returnValue, p3 in + try test(p3 == ["foo": "abc -1.1", "bar": "abc 123123.2"]) + try test(returnValue == ["foo": "abc -1.1", + "FOO": "abc -100.4", + "bar": "abc 123123.2", + "BAR": "abc 0.5"]) + }.wait() + + try firstly { + p.opStringMyEnumDAsync(p1: ["abc": MyEnum.enum1, "": MyEnum.enum2], + p2: ["abc": MyEnum.enum1, "qwerty": MyEnum.enum3, "Hello!!": MyEnum.enum2]) + }.done { returnValue, p3 in + try test(p3 == ["abc": MyEnum.enum1, "": MyEnum.enum2]) + try test(returnValue == ["abc": MyEnum.enum1, + "qwerty": MyEnum.enum3, + "": MyEnum.enum2, + "Hello!!": MyEnum.enum2]) + }.wait() + + try firstly { + p.opMyEnumStringDAsync(p1: [MyEnum.enum1: "abc"], + p2: [MyEnum.enum2: "Hello!!", MyEnum.enum3: "qwerty"]) + }.done { returnValue, p3 in + try test(p3 == [MyEnum.enum1: "abc"]) + try test(returnValue == [MyEnum.enum1: "abc", + MyEnum.enum2: "Hello!!", + MyEnum.enum3: "qwerty"]) + }.wait() + + try firstly { + p.opMyStructMyEnumDAsync(p1: [MyStruct(i: 1, j: 1): MyEnum.enum1, + MyStruct(i: 1, j: 2): MyEnum.enum2], + p2: [MyStruct(i: 1, j: 1): MyEnum.enum1, + MyStruct(i: 2, j: 2): MyEnum.enum3, + MyStruct(i: 2, j: 3): MyEnum.enum2]) + }.done { returnValue, p3 in + try test(p3 == [MyStruct(i: 1, j: 1): MyEnum.enum1, + MyStruct(i: 1, j: 2): MyEnum.enum2]) + + try test(returnValue == [MyStruct(i: 1, j: 1): MyEnum.enum1, + MyStruct(i: 1, j: 2): MyEnum.enum2, + MyStruct(i: 2, j: 2): MyEnum.enum3, + MyStruct(i: 2, j: 3): MyEnum.enum2]) + }.wait() + + try firstly { + p.opByteBoolDSAsync(p1: [[10: true, 100: false], [10: true, 11: false, 101: true]], + p2: [[100: false, 101: false]]) + }.done { returnValue, p3 in + try test(returnValue == [[10: true, 11: false, 101: true], + [10: true, 100: false]]) + try test(p3 == [[100: false, 101: false], + [10: true, 100: false], + [10: true, 11: false, 101: true]]) + }.wait() + + try firstly { + p.opShortIntDSAsync(p1: [[110: -1, 1100: 123_123], [110: -1, 111: -100, 1101: 0]], + p2: [[100: -1001]]) + }.done { returnValue, p3 in + try test(returnValue == [[110: -1, 111: -100, 1101: 0], [110: -1, 1100: 123_123]]) + try test(p3 == [[100: -1001], + [110: -1, 1100: 123_123], + [110: -1, 111: -100, 1101: 0]]) + }.wait() + + try firstly { + p.opLongFloatDSAsync(p1: [[999_999_110: -1.1, 999_999_111: 123_123.2], + [999_999_110: -1.1, 999_999_120: -100.4, 999_999_130: 0.5]], + p2: [[999_999_140: 3.14]]) + }.done { returnValue, p3 in + try test(returnValue == [[999_999_110: -1.1, 999_999_120: -100.4, 999_999_130: 0.5], + [999_999_110: -1.1, 999_999_111: 123_123.2]]) + try test(p3 == [[999_999_140: 3.14], + [999_999_110: -1.1, 999_999_111: 123_123.2], + [999_999_110: -1.1, 999_999_120: -100.4, 999_999_130: 0.5]]) + }.wait() + + try firstly { + p.opStringStringDSAsync(p1: [["foo": "abc -1.1", "bar": "abc 123123.2"], + ["foo": "abc -1.1", "FOO": "abc -100.4", "BAR": "abc 0.5"]], + p2: [["f00": "ABC -3.14"]]) + }.done { returnValue, p3 in + try test(returnValue == [["foo": "abc -1.1", "FOO": "abc -100.4", "BAR": "abc 0.5"], + ["foo": "abc -1.1", "bar": "abc 123123.2"]]) + try test(p3 == [["f00": "ABC -3.14"], + ["foo": "abc -1.1", "bar": "abc 123123.2"], + ["foo": "abc -1.1", "FOO": "abc -100.4", "BAR": "abc 0.5"]]) + }.wait() + + try firstly { + p.opStringMyEnumDSAsync(p1: [["abc": MyEnum.enum1, "": MyEnum.enum2], + ["abc": MyEnum.enum1, "qwerty": MyEnum.enum3, "Hello!!": MyEnum.enum2]], + p2: [["Goodbye": MyEnum.enum1]]) + + }.done { returnValue, p3 in + try test(returnValue == [["abc": MyEnum.enum1, "qwerty": MyEnum.enum3, "Hello!!": MyEnum.enum2], + ["abc": MyEnum.enum1, "": MyEnum.enum2]]) + try test(p3 == [["Goodbye": MyEnum.enum1], + ["abc": MyEnum.enum1, "": MyEnum.enum2], + ["abc": MyEnum.enum1, "qwerty": MyEnum.enum3, "Hello!!": MyEnum.enum2]]) + }.wait() + + try firstly { + p.opMyEnumStringDSAsync(p1: [[MyEnum.enum1: "abc"], [MyEnum.enum2: "Hello!!", MyEnum.enum3: "qwerty"]], + p2: [[MyEnum.enum1: "Goodbye"]]) + }.done { returnValue, p3 in + try test(returnValue == [[MyEnum.enum2: "Hello!!", MyEnum.enum3: "qwerty"], + [MyEnum.enum1: "abc"]]) + + try test(p3 == [[MyEnum.enum1: "Goodbye"], + [MyEnum.enum1: "abc"], + [MyEnum.enum2: "Hello!!", MyEnum.enum3: "qwerty"]]) + }.wait() + + try firstly { + p.opMyStructMyEnumDSAsync(p1: [[MyStruct(i: 1, j: 1): MyEnum.enum1, + MyStruct(i: 1, j: 2): MyEnum.enum2], + [MyStruct(i: 1, j: 1): MyEnum.enum1, + MyStruct(i: 2, j: 2): MyEnum.enum3, + MyStruct(i: 2, j: 3): MyEnum.enum2]], + p2: [[MyStruct(i: 2, j: 3): MyEnum.enum3]]) + }.done { returnValue, p3 in + + try test(returnValue == [[MyStruct(i: 1, j: 1): MyEnum.enum1, + MyStruct(i: 2, j: 2): MyEnum.enum3, + MyStruct(i: 2, j: 3): MyEnum.enum2], + [MyStruct(i: 1, j: 1): MyEnum.enum1, + MyStruct(i: 1, j: 2): MyEnum.enum2]]) + + try test(p3 == [[MyStruct(i: 2, j: 3): MyEnum.enum3], + [MyStruct(i: 1, j: 1): MyEnum.enum1, + MyStruct(i: 1, j: 2): MyEnum.enum2], + [MyStruct(i: 1, j: 1): MyEnum.enum1, + MyStruct(i: 2, j: 2): MyEnum.enum3, + MyStruct(i: 2, j: 3): MyEnum.enum2]]) + }.wait() + + try firstly { + p.opByteByteSDAsync(p1: [0x01: ByteSeq([0x01, 0x11]), + 0x22: ByteSeq([0x12])], + p2: [0xF1: ByteSeq([0xF2, 0xF3])]) + }.done { returnValue, p3 in + + try test(p3 == [0xF1: ByteSeq([0xF2, 0xF3])]) + try test(returnValue == [0x01: ByteSeq([0x01, 0x11]), + 0x22: ByteSeq([0x12]), + 0xF1: ByteSeq([0xF2, 0xF3])]) + }.wait() + + try firstly { + p.opBoolBoolSDAsync(p1: [false: [true, false], true: [false, true, true]], + p2: [false: [true, false]]) + }.done { returnValue, p3 in + try test(p3 == [false: [true, false]]) + try test(returnValue == [false: [true, false], true: [false, true, true]]) + }.wait() + + try firstly { + p.opShortShortSDAsync(p1: [1: [1, 2, 3], 2: [4, 5]], + p2: [4: [6, 7]]) + }.done { returnValue, p3 in + try test(p3 == [4: [6, 7]]) + try test(returnValue == [1: [1, 2, 3], 2: [4, 5], 4: [6, 7]]) + }.wait() + + try firstly { + p.opIntIntSDAsync(p1: [100: [100, 200, 300], 200: [400, 500]], + p2: [400: [600, 700]]) + }.done { returnValue, p3 in + try test(p3 == [400: [600, 700]]) + try test(returnValue == [100: [100, 200, 300], 200: [400, 500], 400: [600, 700]]) + }.wait() + + try firstly { + p.opLongLongSDAsync(p1: [999_999_990: [999_999_110, 999_999_111, 999_999_110], + 999_999_991: [999_999_120, 999_999_130]], + p2: [999_999_992: [999_999_110, 999_999_120]]) + }.done { returnValue, p3 in + try test(p3 == [999_999_992: [999_999_110, 999_999_120]]) + try test(returnValue == [999_999_990: [999_999_110, 999_999_111, 999_999_110], + 999_999_991: [999_999_120, 999_999_130], + 999_999_992: [999_999_110, 999_999_120]]) + }.wait() + + try firstly { + p.opStringFloatSDAsync(p1: ["abc": [-1.1, 123_123.2, 100.0], + "ABC": [42.24, -1.61]], + p2: ["aBc": [-3.14, 3.14]]) + }.done { returnValue, p3 in + try test(p3 == ["aBc": [-3.14, 3.14]]) + try test(returnValue == ["abc": [-1.1, 123_123.2, 100.0], + "ABC": [42.24, -1.61], + "aBc": [-3.14, 3.14]]) + }.wait() + + try firstly { + p.opStringDoubleSDAsync(p1: ["Hello!!": [1.1e10, 1.2e10, 1.3e10], + "Goodbye": [1.4e10, 1.5e10]], + p2: ["": [1.6e10, 1.7e10]]) + }.done { returnValue, p3 in + try test(p3 == ["": [1.6e10, 1.7e10]]) + try test(returnValue == ["Hello!!": [1.1e10, 1.2e10, 1.3e10], + "Goodbye": [1.4e10, 1.5e10], + "": [1.6e10, 1.7e10]]) + }.wait() + + try firstly { + p.opStringStringSDAsync(p1: ["abc": ["abc", "de", "fghi"], + "def": ["xyz", "or"]], + p2: ["ghi": ["and", "xor"]]) + }.done { returnValue, p3 in + try test(p3 == ["ghi": ["and", "xor"]]) + try test(returnValue == ["abc": ["abc", "de", "fghi"], + "def": ["xyz", "or"], + "ghi": ["and", "xor"]]) + }.wait() + + try firstly { + p.opMyEnumMyEnumSDAsync(p1: [MyEnum.enum3: [MyEnum.enum1, MyEnum.enum1, MyEnum.enum2], + MyEnum.enum2: [MyEnum.enum1, MyEnum.enum2]], + p2: [MyEnum.enum1: [MyEnum.enum3, MyEnum.enum3]]) + }.done { returnValue, p3 in + try test(p3 == [MyEnum.enum1: [MyEnum.enum3, MyEnum.enum3]]) + try test(returnValue == [MyEnum.enum3: [MyEnum.enum1, MyEnum.enum1, MyEnum.enum2], + MyEnum.enum2: [MyEnum.enum1, MyEnum.enum2], + MyEnum.enum1: [MyEnum.enum3, MyEnum.enum3]]) + + }.wait() + + do { + let lengths: [Int32] = [0, 1, 2, 126, 127, 128, 129, 253, 254, 255, 256, 257, 1000] + + for i in 0 ..< lengths.count { + var s = [Int32]() + for j in 0 ..< lengths[i] { + s.append(j) + } + + try firstly { + p.opIntSAsync(s) + }.done { r in + for j in 0 ..< r.count { + try test(r[j] == -j) + } + }.wait() + } + } + + do { + let ctx = ["one": "ONE", "two": "TWO", "three": "THREE"] + try test(p.ice_getContext().count == 0) + + try firstly { + p.opContextAsync() + }.done { r in + try test(r != ctx) + }.wait() + + try test(p.ice_getContext().count == 0) + try firstly { + p.opContextAsync(context: ctx) + }.done { r in + try test(r == ctx) + }.wait() + + var p2 = try checkedCast(prx: p.ice_context(ctx), type: MyClassPrx.self)! + try test(p2.ice_getContext() == ctx) + try firstly { + p2.opContextAsync() + }.done { r in + try test(r == ctx) + }.wait() + + p2 = try checkedCast(prx: p.ice_context(ctx), type: MyClassPrx.self)! + try firstly { + p2.opContextAsync(context: ctx) + }.done { r in + try test(r == ctx) + }.wait() + } + + // + // Test implicit context propagation with async result + // + let conn = try p.ice_getConnection() + if conn != nil { + var initData = Ice.InitializationData() + let properties = communicator.getProperties().clone() + properties.setProperty(key: "Ice.ImplicitContext", value: "Shared") + initData.properties = properties + let ic = try helper.initialize(initData) + + var ctx = ["one": "ONE", "two": "TWO", "three": "THREE"] + + var p3 = try uncheckedCast(prx: ic.stringToProxy("test:\(helper.getTestEndpoint(num: 0))")!, + type: MyClassPrx.self) + + ic.getImplicitContext().setContext(ctx) + try test(ic.getImplicitContext().getContext() == ctx) + + try firstly { + p3.opContextAsync() + }.done { r in + try test(r == ctx) + }.wait() + + _ = ic.getImplicitContext().put(key: "zero", value: "ZERO") + ctx = ic.getImplicitContext().getContext() + try firstly { + p3.opContextAsync() + }.done { r in + try test(r == ctx) + }.wait() + + let prxContext = ["one": "UN", "four": "QUATRE"] + var combined = prxContext + for (key, value) in ctx where combined[key] == nil { + combined[key] = value + } + try test(combined["one"] == "UN") + + p3 = uncheckedCast(prx: p3.ice_context(prxContext), type: MyClassPrx.self) + + ic.getImplicitContext().setContext(Ice.Context()) + try firstly { + p3.opContextAsync() + }.done { r in + try test(r == prxContext) + }.wait() + + ic.getImplicitContext().setContext(ctx) + try firstly { + p3.opContextAsync() + }.done { r in + try test(r == combined) + }.wait() + ic.destroy() + } +} diff --git a/swift/test/Ice/optional/AllTests.swift b/swift/test/Ice/optional/AllTests.swift new file mode 100644 index 00000000000..2550f38a8aa --- /dev/null +++ b/swift/test/Ice/optional/AllTests.swift @@ -0,0 +1,3316 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import PromiseKit +import TestCommon + +class TestValueReader: Ice.Value { + public override func _iceRead(from istr: Ice.InputStream) throws { + istr.startValue() + _ = try istr.startSlice() + try istr.endSlice() + _ = try istr.endValue(preserve: false) + } +} + +class BValueReader: Ice.Value { + public override func _iceRead(from istr: Ice.InputStream) throws { + istr.startValue() + // ::Test::B + _ = try istr.startSlice() + _ = try istr.read() as Int32 + try istr.endSlice() + // ::Test::A + _ = try istr.startSlice() + _ = try istr.read() as Int32 + try istr.endSlice() + _ = try istr.endValue(preserve: false) + } +} + +class CValueReader: Ice.Value { + public override func _iceRead(from istr: Ice.InputStream) throws { + istr.startValue() + // ::Test::C + _ = try istr.startSlice() + try istr.skipSlice() + // ::Test::B + _ = try istr.startSlice() + _ = try istr.read() as Int32 + try istr.endSlice() + // ::Test::A + _ = try istr.startSlice() + _ = try istr.read() as Int32 + try istr.endSlice() + _ = try istr.endValue(preserve: false) + } +} + +class DValueWriter: Ice.Value { + public override func _iceWrite(to ostr: Ice.OutputStream) { + ostr.startValue(data: nil) + // ::Test::D + ostr.startSlice(typeId: "::Test::D", compactId: -1, last: false) + let s = "test" + ostr.write(s) + _ = ostr.writeOptional(tag: 1, format: .FSize) + let o = ["test1", "test2", "test3", "test4"] + let pos = ostr.startSize() + ostr.write(o) + ostr.endSize(position: pos) + let a = A() + a.mc = 18 + _ = ostr.writeOptional(tag: 1000, format: .Class) + ostr.write(a) + ostr.endSlice() + // ::Test::B + ostr.startSlice(typeId: B.ice_staticId(), compactId: -1, last: false) + let v: Int32 = 14 + ostr.write(v) + ostr.endSlice() + // ::Test::A + ostr.startSlice(typeId: A.ice_staticId(), compactId: -1, last: true) + ostr.write(v) + ostr.endSlice() + ostr.endValue() + } +} + +class DValueReader: Ice.Value { + var a: A? + var helper: TestHelper? + + required init() { + super.init() + } + + init(helper: TestHelper) { + self.helper = helper + } + + public override func _iceRead(from istr: Ice.InputStream) throws { + istr.startValue() + // ::Test::D + _ = try istr.startSlice() + let s: String = try istr.read() + try helper!.test(s == "test") + try helper!.test(istr.readOptional(tag: 1, expectedFormat: .FSize)) + try istr.skip(4) + let o: [String] = try istr.read() + try helper!.test(o.count == 4 && + o[0] == "test1" && + o[1] == "test2" && + o[2] == "test3" && + o[3] == "test4") + try istr.read(tag: 1000, value: A.self) { self.a = $0 } + try istr.endSlice() + // ::Test::B + _ = try istr.startSlice() + _ = try istr.read() as Int32 + try istr.endSlice() + // ::Test::A + _ = try istr.startSlice() + _ = try istr.read() as Int32 + try istr.endSlice() + _ = try istr.endValue(preserve: false) + } + + func check() throws { + try helper!.test(a!.mc == 18) + } +} + +class FValueReader: Ice.Value { + public required init() { + _f = F() + super.init() + } + + public override func _iceRead(from istr: Ice.InputStream) throws { + _f = F() + _ = istr.startValue() + _ = try istr.startSlice() + // Don't read af on purpose + // in.read(1, _f.af); + try istr.endSlice() + _ = try istr.startSlice() + try istr.read(A.self) { self._f.ae = $0 } + try istr.endSlice() + _ = try istr.endValue(preserve: false) + } + + public func getF() -> F? { + return _f + } + + var _f: F +} + +class FactoryI { + init(helper: TestHelper) { + _enabled = false + _helper = helper + } + + func create(_ typeId: String) -> Ice.Value? { + guard _enabled else { + return nil + } + switch typeId { + case OneOptional.ice_staticId(): + return TestValueReader() + case MultiOptional.ice_staticId(): + return TestValueReader() + case B.ice_staticId(): + return BValueReader() + case C.ice_staticId(): + return CValueReader() + case "::Test::D": + return DValueReader(helper: _helper) + case "::Test::F": + return FValueReader() + default: + return nil + } + } + + func setEnabled(enabled: Bool) { + _enabled = enabled + } + + var _enabled: Bool + let _helper: TestHelper +} + +func allTests(_ helper: TestHelper) throws -> InitialPrx { + func test(_ value: Bool, file: String = #file, line: Int = #line) throws { + try helper.test(value, file: file, line: line) + } + + let communicator = helper.communicator() + let factory = FactoryI(helper: helper) + try communicator.getValueFactoryManager().add(factory: { id in factory.create(id) }, id: "") + + let output = helper.getWriter() + output.write("testing stringToProxy... ") + let ref = "initial:\(helper.getTestEndpoint(num: 0))" + let base = try communicator.stringToProxy(ref)! + output.writeLine("ok") + + output.write("testing checked cast... ") + let initial = try checkedCast(prx: base, type: InitialPrx.self)! + try test(initial == base) + output.writeLine("ok") + + output.write("testing optional data members... ") + + let oo1 = OneOptional() + try test(oo1.a == nil) + oo1.a = 15 + try test(oo1.a! == 15) + + let oo2 = OneOptional(a: 16) + try test(oo2.a! == 16) + + let mo1 = MultiOptional() + mo1.a = 15 + mo1.b = true + mo1.c = 19 + mo1.d = 78 + mo1.e = 99 + mo1.f = 5.5 + mo1.g = 1.0 + mo1.h = "test" + mo1.i = .MyEnumMember + mo1.j = try communicator.stringToProxy("test") + mo1.k = mo1 + mo1.bs = ByteSeq([5]) + mo1.ss = ["test", "test2"] + mo1.iid = [4: 3] + mo1.sid = ["test": 10] + var fs = FixedStruct() + fs.m = 78 + mo1.fs = fs + var vs = VarStruct() + vs.m = "hello" + mo1.vs = vs + + mo1.shs = [1] + mo1.es = [.MyEnumMember, .MyEnumMember] + mo1.fss = [fs] + mo1.vss = [vs] + mo1.oos = [oo1] + mo1.oops = [try communicator.stringToProxy("test")] + + mo1.ied = [4: .MyEnumMember] + mo1.ifsd = [4: fs] + mo1.ivsd = [5: vs] + mo1.iood = [5: OneOptional(a: 15)] + mo1.ioopd = [5: try communicator.stringToProxy("test")] + + mo1.bos = [false, true, false] + + try test(mo1.a! == 15) + try test(mo1.b!) + try test(mo1.c! == 19) + try test(mo1.d! == 78) + try test(mo1.e! == 99) + try test(mo1.f! == 5.5) + try test(mo1.g! == 1.0) + try test(mo1.h! == "test") + try test(mo1.i! == .MyEnumMember) + try test(mo1.j! == communicator.stringToProxy("test")) + try test(mo1.k! === mo1) + try test(mo1.bs! == ByteSeq([5])) + try test(mo1.ss! == ["test", "test2"]) + try test(mo1.iid![4]! == 3) + try test(mo1.sid!["test"]! == 10) + try test(mo1.fs! == FixedStruct(m: 78)) + try test(mo1.vs! == VarStruct(m: "hello")) + + try test(mo1.shs![0] == 1) + try test(mo1.es![0] == .MyEnumMember && + mo1.es![1] == .MyEnumMember) + + try test(mo1.fss![0] == FixedStruct(m: 78)) + try test(mo1.vss![0] == VarStruct(m: "hello")) + try test(mo1.oos![0] === oo1) + try test(mo1.oops![0] == communicator.stringToProxy("test")) + + try test(mo1.ied![4] == .MyEnumMember) + try test(mo1.ifsd![4] == FixedStruct(m: 78)) + try test(mo1.ivsd![5] == VarStruct(m: "hello")) + try test(mo1.iood![5]!!.a! == 15) + try test(mo1.ioopd![5]! == communicator.stringToProxy("test")) + + try test(mo1.bos == [false, true, false]) + + output.writeLine("ok") + + output.write("testing marshaling... ") + + if let oo4 = try initial.pingPong(OneOptional()) as? OneOptional { + try test(oo4.a == nil) + } else { + try test(false) + } + + if let oo5 = try initial.pingPong(oo1) as? OneOptional { + try test(oo1.a == oo5.a) + } else { + try test(false) + } + + if let mo4 = try initial.pingPong(MultiOptional()) as? MultiOptional { + try test(mo4.a == nil) + try test(mo4.b == nil) + try test(mo4.c == nil) + try test(mo4.d == nil) + try test(mo4.e == nil) + try test(mo4.f == nil) + try test(mo4.g == nil) + try test(mo4.h == nil) + try test(mo4.i == nil) + try test(mo4.j == nil) + try test(mo4.k == nil) + try test(mo4.bs == nil) + try test(mo4.ss == nil) + try test(mo4.iid == nil) + try test(mo4.sid == nil) + try test(mo4.fs == nil) + try test(mo4.vs == nil) + + try test(mo4.shs == nil) + try test(mo4.es == nil) + try test(mo4.fss == nil) + try test(mo4.vss == nil) + try test(mo4.oos == nil) + try test(mo4.oops == nil) + + try test(mo4.ied == nil) + try test(mo4.ifsd == nil) + try test(mo4.ivsd == nil) + try test(mo4.iood == nil) + try test(mo4.ioopd == nil) + + try test(mo4.bos == nil) + + try test(mo4.ser == nil) + } else { + try test(false) + } + + let mo6 = MultiOptional() + let mo8 = MultiOptional() + + if let mo5 = try initial.pingPong(mo1) as? MultiOptional { + try test(mo5.a == mo1.a) + try test(mo5.b == mo1.b) + try test(mo5.c == mo1.c) + try test(mo5.d == mo1.d) + try test(mo5.e == mo1.e) + try test(mo5.f == mo1.f) + try test(mo5.g == mo1.g) + try test(mo5.h == mo1.h) + try test(mo5.i == mo1.i) + try test(mo5.j == mo1.j) + try test(mo5.k === mo5) + try test(mo5.bs == mo1.bs) + try test(mo5.ss == mo1.ss) + try test(mo5.iid![4] == 3) + try test(mo5.sid!["test"] == 10) + try test(mo5.fs == mo1.fs) + try test(mo5.vs == mo1.vs) + try test(mo5.shs == mo1.shs) + try test(mo5.es![0] == .MyEnumMember && + mo1.es![1] == .MyEnumMember) + try test(mo5.fss![0] == FixedStruct(m: 78)) + try test(mo5.vss![0] == VarStruct(m: "hello")) + try test(mo5.oos![0]!.a! == 15) + try test(mo5.oops![0] == communicator.stringToProxy("test")) + + try test(mo5.ied![4] == .MyEnumMember) + try test(mo5.ifsd![4] == FixedStruct(m: 78)) + try test(mo5.ivsd![5] == VarStruct(m: "hello")) + try test(mo5.iood![5]!!.a == 15) + try test(mo5.ioopd![5]! == communicator.stringToProxy("test")) + + try test(mo5.bos == [false, true, false]) + + // Clear the first half of the optional members + mo6.b = mo5.b + mo6.d = mo5.d + mo6.f = mo5.f + mo6.h = mo5.h + mo6.j = mo5.j + mo6.bs = mo5.bs + mo6.iid = mo5.iid + mo6.fs = mo5.fs + mo6.shs = mo5.shs + mo6.fss = mo5.fss + mo6.oos = mo5.oos + mo6.ifsd = mo5.ifsd + mo6.iood = mo5.iood + mo6.bos = mo5.bos + + // Clear the second half of the optional members + mo8.a = mo5.a + mo8.c = mo5.c + mo8.e = mo5.e + mo8.g = mo5.g + mo8.i = mo5.i + mo8.k = mo8 + mo8.ss = mo5.ss + mo8.sid = mo5.sid + mo8.vs = mo5.vs + + mo8.es = mo5.es + mo8.vss = mo5.vss + mo8.oops = mo5.oops + + mo8.ied = mo5.ied + mo8.ivsd = mo5.ivsd + mo8.ioopd = mo5.ioopd + } else { + try test(false) + } + + if let mo7 = try initial.pingPong(mo6) as? MultiOptional { + try test(mo7.a == nil) + try test(mo7.b == mo1.b) + try test(mo7.c == nil) + try test(mo7.d == mo1.d) + try test(mo7.e == nil) + try test(mo7.f == mo1.f) + try test(mo7.g == nil) + try test(mo7.h == mo1.h) + try test(mo7.i == nil) + try test(mo7.j == mo1.j) + try test(mo7.k == nil) + try test(mo7.bs == mo1.bs) + try test(mo7.ss == nil) + try test(mo7.iid![4] == 3) + try test(mo7.sid == nil) + try test(mo7.fs == mo1.fs) + try test(mo7.vs == nil) + + try test(mo7.shs == mo1.shs) + try test(mo7.es == nil) + try test(mo7.fss![0] == FixedStruct(m: 78)) + try test(mo7.vss == nil) + try test(mo7.oos![0]!.a == 15) + try test(mo7.oops == nil) + + try test(mo7.ied == nil) + try test(mo7.ifsd![4] == FixedStruct(m: 78)) + try test(mo7.ivsd == nil) + try test(mo7.iood![5]!!.a == 15) + try test(mo7.ioopd == nil) + + try test(mo7.bos == [false, true, false]) + try test(mo7.ser == nil) + } else { + try test(false) + } + + if let mo9 = try initial.pingPong(mo8) as? MultiOptional { + try test(mo9.a == mo1.a) + try test(mo9.b == nil) + try test(mo9.c == mo1.c) + try test(mo9.d == nil) + try test(mo9.e == mo1.e) + try test(mo9.f == nil) + try test(mo9.g == mo1.g) + try test(mo9.h == nil) + try test(mo9.i == mo1.i) + try test(mo9.j == nil) + try test(mo9.k === mo9) + try test(mo9.bs == nil) + try test(mo9.ss == mo1.ss) + try test(mo9.iid == nil) + try test(mo9.sid!["test"] == 10) + try test(mo9.fs == nil) + try test(mo9.vs == mo1.vs) + + try test(mo9.shs == nil) + try test(mo9.es![0] == .MyEnumMember && + mo9.es![1] == .MyEnumMember) + try test(mo9.fss == nil) + try test(mo9.vss![0] == VarStruct(m: "hello")) + try test(mo9.oos == nil) + try test(mo9.oops![0] == communicator.stringToProxy("test")) + + try test(mo9.ied![4] == .MyEnumMember) + try test(mo9.ifsd == nil) + try test(mo9.ivsd![5] == VarStruct(m: "hello")) + try test(mo9.iood == nil) + try test(mo9.ioopd![5]! == communicator.stringToProxy("test")) + + try test(mo9.bos == nil) + } else { + try test(false) + } + + do { + let owc1 = OptionalWithCustom() + owc1.l = [SmallStruct(m: 5), SmallStruct(m: 6), SmallStruct(m: 7)] + owc1.s = ClassVarStruct(a: 5) + if let owc2 = try initial.pingPong(owc1) as? OptionalWithCustom { + try test(owc2.l != nil) + try test(owc1.l == owc2.l) + try test(owc2.s != nil) + try test(owc2.s!.a == 5) + } else { + try test(false) + } + } + + // + // Send a request using blobjects. Upon receival, we don't read + // any of the optional members. This ensures the optional members + // are skipped even if the receiver knows nothing about them. + // + factory.setEnabled(enabled: true) + do { + let ostr = Ice.OutputStream(communicator: communicator) + ostr.startEncapsulation() + ostr.write(oo1) + ostr.endEncapsulation() + let inEncaps = ostr.finished() + let result = try initial.ice_invoke(operation: "pingPong", + mode: Ice.OperationMode.Normal, + inEncaps: inEncaps) + try test(result.ok) + + let istr = InputStream(communicator: communicator, bytes: result.outEncaps) + _ = try istr.startEncapsulation() + + var v: Ice.Value? + try istr.read { v = $0 } + try istr.endEncapsulation() + try test(v != nil && v is TestValueReader) + } + + do { + let ostr = Ice.OutputStream(communicator: communicator) + ostr.startEncapsulation() + ostr.write(mo1) + ostr.endEncapsulation() + let inEncaps = ostr.finished() + let result = try initial.ice_invoke(operation: "pingPong", + mode: .Normal, + inEncaps: inEncaps) + try test(result.ok) + let istr = Ice.InputStream(communicator: communicator, bytes: result.outEncaps) + _ = try istr.startEncapsulation() + var v: Ice.Value? + try istr.read { v = $0 } + try istr.endEncapsulation() + try test(v != nil && v is TestValueReader) + } + factory.setEnabled(enabled: false) + + // + // Use the 1.0 encoding with operations whose only class parameters are optional. + // + do { + var oo: OneOptional? = OneOptional(a: 53) + try initial.sendOptionalClass(req: true, o: oo) + let initial2 = initial.ice_encodingVersion(Ice.Encoding_1_0) + try initial2.sendOptionalClass(req: true, o: oo) + + oo = try initial.returnOptionalClass(true) + try test(oo != nil) + oo = try initial2.returnOptionalClass(true) + try test(oo == nil) + + let recursive1 = [Recursive()] + let recursive2 = [Recursive()] + recursive1[0].value = recursive2 + let outer = Recursive() + outer.value = recursive1 + _ = try initial.pingPong(outer) + + var g: G! = G() + g.gg1Opt = G1(a: "gg1Opt") + g.gg2 = G2(a: 10) + g.gg2Opt = G2(a: 20) + g.gg1 = G1(a: "gg1") + g = try initial.opG(g) + try test(g.gg1Opt!.a == "gg1Opt") + try test(g.gg2!.a == 10) + try test(g.gg2Opt!.a == 20) + try test(g.gg1!.a == "gg1") + + try initial.opVoid() + + let ostr = OutputStream(communicator: communicator) + ostr.startEncapsulation() + _ = ostr.writeOptional(tag: 1, format: .F4) + ostr.write(Int32(15)) + _ = ostr.writeOptional(tag: 1, format: .VSize) + ostr.write("test") + ostr.endEncapsulation() + let inEncaps = ostr.finished() + let result = try initial.ice_invoke(operation: "opVoid", mode: .Normal, inEncaps: inEncaps) + try test(result.ok) + } + output.writeLine("ok") + + output.write("testing marshaling of large containers with fixed size elements... ") + do { + var mc = MultiOptional() + + mc.bs = Ice.ByteSeq(repeating: 0, count: 1000) + mc.shs = Ice.ShortSeq(repeating: 0, count: 300) + mc.fss = FixedStructSeq(repeating: FixedStruct(), count: 300) + + mc.ifsd = IntFixedStructDict() + for i: Int32 in 0 ..< 300 { + mc.ifsd![i] = FixedStruct() + } + + mc = try initial.pingPong(mc) as! MultiOptional + try test(mc.bs?.count == 1000) + try test(mc.shs?.count == 300) + try test(mc.fss?.count == 300) + try test(mc.ifsd?.count == 300) + + factory.setEnabled(enabled: true) + let ostr = Ice.OutputStream(communicator: communicator) + ostr.startEncapsulation() + ostr.write(mc) + ostr.endEncapsulation() + let inEncaps = ostr.finished() + let result = try initial.ice_invoke(operation: "pingPong", mode: .Normal, inEncaps: inEncaps) + try test(result.ok) + let istr = Ice.InputStream(communicator: communicator, bytes: result.outEncaps) + _ = try istr.startEncapsulation() + var v: Value? + try istr.read { v = $0 } + try istr.endEncapsulation() + try test(v != nil && v is TestValueReader) + factory.setEnabled(enabled: false) + } + output.writeLine("ok") + + output.write("testing tag marshaling... ") + do { + let b = B() + var b2 = try initial.pingPong(b) as! B + try test(b2.ma == nil) + try test(b2.mb == nil) + try test(b2.mc == nil) + + b.ma = 10 + b.mb = 11 + b.mc = 12 + b.md = 13 + + b2 = try initial.pingPong(b) as! B + try test(b2.ma! == 10) + try test(b2.mb! == 11) + try test(b2.mc! == 12) + try test(b2.md! == 13) + + factory.setEnabled(enabled: true) + let ostr = Ice.OutputStream(communicator: communicator) + _ = ostr.startEncapsulation() + ostr.write(b) + ostr.endEncapsulation() + let inEncaps = ostr.finished() + let result = try initial.ice_invoke(operation: "pingPong", mode: .Normal, inEncaps: inEncaps) + try test(result.ok) + let istr = Ice.InputStream(communicator: communicator, bytes: result.outEncaps) + _ = try istr.startEncapsulation() + var v: Value? + try istr.read { v = $0 } + try istr.endEncapsulation() + try test(v != nil) + factory.setEnabled(enabled: false) + } + output.writeLine("ok") + + output.write("testing marshalling of objects with optional objects...") + do { + let f = F() + + f.af = A() + f.ae = f.af + + var rf = try initial.pingPong(f) as! F + try test(rf.ae === rf.af) + + factory.setEnabled(enabled: true) + let ostr = Ice.OutputStream(communicator: communicator) + ostr.startEncapsulation() + ostr.write(f) + ostr.endEncapsulation() + let inEncaps = ostr.finished() + let istr = Ice.InputStream(communicator: communicator, bytes: inEncaps) + _ = try istr.startEncapsulation() + var v: Value? + try istr.read { v = $0 } + try istr.endEncapsulation() + factory.setEnabled(enabled: false) + rf = (v as! FValueReader).getF()! + try test(rf.ae != nil && rf.af == nil) + } + output.writeLine("ok") + + output.write("testing optional with default values... ") + do { + var wd = try initial.pingPong(WD()) as! WD + try test(wd.a == 5) + try test(wd.s == "test") + wd.a = nil + wd.s = nil + wd = try initial.pingPong(wd) as! WD + try test(wd.a == nil) + try test(wd.s == nil) + } + output.writeLine("ok") + + if communicator.getProperties().getPropertyAsInt("Ice.Default.SlicedFormat") > 0 { + output.write("testing marshaling with unknown class slices... ") + do { + let c = C() + c.ss = "test" + c.ms = "testms" + var ostr = Ice.OutputStream(communicator: communicator) + ostr.startEncapsulation() + ostr.write(c) + ostr.endEncapsulation() + var inEncaps = ostr.finished() + factory.setEnabled(enabled: true) + var result = try initial.ice_invoke(operation: "pingPong", mode: .Normal, inEncaps: inEncaps) + try test(result.ok) + var istr = Ice.InputStream(communicator: communicator, bytes: result.outEncaps) + _ = try istr.startEncapsulation() + var v: Ice.Value? + try istr.read { v = $0 } + try istr.endEncapsulation() + try test(v != nil && v is CValueReader) + factory.setEnabled(enabled: false) + + factory.setEnabled(enabled: true) + ostr = Ice.OutputStream(communicator: communicator) + ostr.startEncapsulation() + let d = DValueWriter() + ostr.write(d) + ostr.endEncapsulation() + inEncaps = ostr.finished() + result = try initial.ice_invoke(operation: "pingPong", mode: .Normal, inEncaps: inEncaps) + try test(result.ok) + istr = Ice.InputStream(communicator: communicator, bytes: result.outEncaps) + _ = try istr.startEncapsulation() + v = nil + try istr.read { v = $0 } + try istr.endEncapsulation() + try test(v != nil && v is DValueReader) + try (v as! DValueReader).check() + factory.setEnabled(enabled: false) + } + output.writeLine("ok") + + output.write("testing optionals with unknown classes...") + do { + let a = A() + + let ostr = Ice.OutputStream(communicator: communicator) + ostr.startEncapsulation() + ostr.write(a) + _ = ostr.writeOptional(tag: 1, format: .Class) + ostr.write(DValueWriter()) + ostr.endEncapsulation() + let inEncaps = ostr.finished() + let result = try initial.ice_invoke(operation: "opClassAndUnknownOptional", + mode: .Normal, + inEncaps: inEncaps) + try test(result.ok) + + let istr = Ice.InputStream(communicator: communicator, bytes: result.outEncaps) + _ = try istr.startEncapsulation() + try istr.endEncapsulation() + } + output.writeLine("ok") + } + + output.write("testing optional parameters... ") + do { + var p1: UInt8? + var p2: UInt8? + var p3: UInt8? + + (p2, p3) = try initial.opByte(p1) + try test(p2 == nil && p3 == nil) + + (p2, p3) = try initial.opByte(nil) + try test(p2 == nil && p3 == nil) + + (p2, p3) = try initial.opByte() + try test(p2 == nil && p3 == nil) + + try Promise<Void> { seal in + firstly { + initial.opByteAsync(nil) + }.done { p2, p3 in + try test(p2 == nil && p3 == nil) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + try Promise<Void> { seal in + firstly { + initial.opByteAsync() + }.done { p2, p3 in + try test(p2 == nil && p3 == nil) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + p1 = 56 + (p2, p3) = try initial.opByte(p1) + try test(p2 == 56 && p3 == 56) + + try Promise<Void> { seal in + firstly { + initial.opByteAsync(p1) + }.done { p2, p3 in + try test(p2 == 56 && p3 == 56) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + (p2, p3) = try initial.opByte(56) + try test(p2 == 56 && p3 == 56) + + try Promise<Void> { seal in + firstly { + initial.opByteAsync(56) + }.done { p2, p3 in + try test(p2 == 56 && p3 == 56) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + (p2, p3) = try initial.opByte(nil) + try test(p2 == nil && p3 == nil) // Ensure out parameter is cleared. + + let ostr = Ice.OutputStream(communicator: communicator) + ostr.startEncapsulation() + ostr.write(tag: 2, value: p1) + ostr.endEncapsulation() + let inEncaps = ostr.finished() + let result = try initial.ice_invoke(operation: "opByte", mode: .Normal, inEncaps: inEncaps) + var istr = Ice.InputStream(communicator: communicator, bytes: result.outEncaps) + _ = try istr.startEncapsulation() + try test(istr.readOptional(tag: 1, expectedFormat: .F1)) + try test(istr.read() as UInt8 == 56) + try test(istr.readOptional(tag: 3, expectedFormat: .F1)) + try test(istr.read() as UInt8 == 56) + try istr.endEncapsulation() + + istr = Ice.InputStream(communicator: communicator, bytes: result.outEncaps) + _ = try istr.startEncapsulation() + try istr.endEncapsulation() + } + + do { + var p1: Bool? + var p3: Bool? + var p2: Bool? + + (p2, p3) = try initial.opBool(p1) + try test(p2 == nil && p3 == nil) + + (p2, p3) = try initial.opBool(nil) + try test(p2 == nil && p3 == nil) + + (p2, p3) = try initial.opBool() + try test(p2 == nil && p3 == nil) + + try Promise<Void> { seal in + firstly { + initial.opBoolAsync(nil) + }.done { p2, p3 in + try test(p2 == nil && p3 == nil) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + try Promise<Void> { seal in + firstly { + initial.opBoolAsync() + }.done { p2, p3 in + try test(p2 == nil && p3 == nil) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + p1 = true + (p2, p3) = try initial.opBool(p1) + try test(p2 == true && p3 == true) + + try Promise<Void> { seal in + firstly { + initial.opBoolAsync(p1) + }.done { p2, p3 in + try test(p2 == true && p3 == true) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + (p2, p3) = try initial.opBool(true) + try test(p2 == true && p3 == true) + + try Promise<Void> { seal in + firstly { + initial.opBoolAsync(true) + }.done { p2, p3 in + try test(p2 == true && p3 == true) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + (p2, p3) = try initial.opBool(nil) + try test(p2 == nil && p3 == nil) // Ensure out parameter is cleared. + + let ostr = Ice.OutputStream(communicator: communicator) + ostr.startEncapsulation() + ostr.write(tag: 2, value: p1) + ostr.endEncapsulation() + let inEncaps = ostr.finished() + let result = try initial.ice_invoke(operation: "opBool", mode: .Normal, inEncaps: inEncaps) + var istr = Ice.InputStream(communicator: communicator, bytes: result.outEncaps) + _ = try istr.startEncapsulation() + try test(istr.readOptional(tag: 1, expectedFormat: .F1)) + try test(istr.read() as Bool == true) + try test(istr.readOptional(tag: 3, expectedFormat: .F1)) + try test(istr.read() as Bool == true) + try istr.endEncapsulation() + + istr = Ice.InputStream(communicator: communicator, bytes: result.outEncaps) + _ = try istr.startEncapsulation() + try istr.endEncapsulation() + } + + do { + var p1: Int16? + var p2: Int16? + var p3: Int16? + + (p2, p3) = try initial.opShort(p1) + try test(p2 == nil && p3 == nil) + + (p2, p3) = try initial.opShort(nil) + try test(p2 == nil && p3 == nil) + + (p2, p3) = try initial.opShort() + try test(p2 == nil && p3 == nil) + + try Promise<Void> { seal in + firstly { + initial.opShortAsync(nil) + }.done { p2, p3 in + try test(p2 == nil && p3 == nil) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + try Promise<Void> { seal in + firstly { + initial.opShortAsync() + }.done { p2, p3 in + try test(p2 == nil && p3 == nil) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + p1 = 56 + (p2, p3) = try initial.opShort(p1) + try test(p2 == 56 && p3 == 56) + + try Promise<Void> { seal in + firstly { + initial.opShortAsync(p1) + }.done { p2, p3 in + try test(p2 == 56 && p3 == 56) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + (p2, p3) = try initial.opShort(p1) + try test(p2 == 56 && p3 == 56) + + try Promise<Void> { seal in + firstly { + initial.opShortAsync(p1) + }.done { p2, p3 in + try test(p2 == 56 && p3 == 56) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + (p2, p3) = try initial.opShort(nil) + try test(p2 == nil && p3 == nil) // Ensure out parameter is cleared. + + let ostr = Ice.OutputStream(communicator: communicator) + ostr.startEncapsulation() + ostr.write(tag: 2, value: p1) + ostr.endEncapsulation() + let inEncaps = ostr.finished() + let result = try initial.ice_invoke(operation: "opShort", mode: .Normal, inEncaps: inEncaps) + var istr = Ice.InputStream(communicator: communicator, bytes: result.outEncaps) + _ = try istr.startEncapsulation() + try test(istr.readOptional(tag: 1, expectedFormat: .F2)) + try test(istr.read() as Int16 == 56) + try test(istr.readOptional(tag: 3, expectedFormat: .F2)) + try test(istr.read() as Int16 == 56) + try istr.endEncapsulation() + + istr = Ice.InputStream(communicator: communicator, bytes: result.outEncaps) + _ = try istr.startEncapsulation() + try istr.endEncapsulation() + } + + do { + var p1: Int32? + var p2: Int32? + var p3: Int32? + + (p2, p3) = try initial.opInt(p1) + try test(p2 == nil && p3 == nil) + + (p2, p3) = try initial.opInt(nil) + try test(p2 == nil && p3 == nil) + + (p2, p3) = try initial.opInt() + try test(p2 == nil && p3 == nil) + + try Promise<Void> { seal in + firstly { + initial.opIntAsync(nil) + }.done { p2, p3 in + try test(p2 == nil && p3 == nil) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + try Promise<Void> { seal in + firstly { + initial.opIntAsync() + }.done { p2, p3 in + try test(p2 == nil && p3 == nil) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + p1 = 56 + (p2, p3) = try initial.opInt(p1) + try test(p2 == 56 && p3 == 56) + + try Promise<Void> { seal in + firstly { + initial.opIntAsync(p1) + }.done { p2, p3 in + try test(p2 == 56 && p3 == 56) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + (p2, p3) = try initial.opInt(56) + try test(p2 == 56 && p3 == 56) + + try Promise<Void> { seal in + firstly { + initial.opIntAsync(56) + }.done { p2, p3 in + try test(p2 == 56 && p3 == 56) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + (p2, p3) = try initial.opInt(nil) + try test(p2 == nil && p3 == nil) // Ensure out parameter is cleared. + + let ostr = Ice.OutputStream(communicator: communicator) + ostr.startEncapsulation() + ostr.write(tag: 2, value: p1) + ostr.endEncapsulation() + let inEncaps = ostr.finished() + let result = try initial.ice_invoke(operation: "opInt", mode: Ice.OperationMode.Normal, inEncaps: inEncaps) + var istr = Ice.InputStream(communicator: communicator, bytes: result.outEncaps) + _ = try istr.startEncapsulation() + try test(istr.readOptional(tag: 1, expectedFormat: .F4)) + try test(istr.read() as Int32 == 56) + try test(istr.readOptional(tag: 3, expectedFormat: .F4)) + try test(istr.read() as Int32 == 56) + try istr.endEncapsulation() + + istr = Ice.InputStream(communicator: communicator, bytes: inEncaps) + _ = try istr.startEncapsulation() + try istr.endEncapsulation() + } + + do { + var p1: Int64? + var p2: Int64? + var p3: Int64? + + (p2, p3) = try initial.opLong(p1) + try test(p2 == nil && p3 == nil) + + (p2, p3) = try initial.opLong(nil) + try test(p2 == nil && p3 == nil) + + (p2, p3) = try initial.opLong() + try test(p2 == nil && p3 == nil) + + try Promise<Void> { seal in + firstly { + initial.opLongAsync(nil) + }.done { p2, p3 in + try test(p2 == nil && p3 == nil) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + try Promise<Void> { seal in + firstly { + initial.opLongAsync() + }.done { p2, p3 in + try test(p2 == nil && p3 == nil) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + p1 = 56 + (p2, p3) = try initial.opLong(p1) + try test(p2 == 56 && p3 == 56) + + try Promise<Void> { seal in + firstly { + initial.opLongAsync(p1) + }.done { p2, p3 in + try test(p2 == 56 && p3 == 56) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + (p2, p3) = try initial.opLong(56) + try test(p2 == 56 && p3 == 56) + + try Promise<Void> { seal in + firstly { + initial.opLongAsync(56) + }.done { p2, p3 in + try test(p2 == 56 && p3 == 56) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + (p2, p3) = try initial.opLong(nil) + try test(p2 == nil && p3 == nil) // Ensure out parameter is cleared. + + let ostr = Ice.OutputStream(communicator: communicator) + ostr.startEncapsulation() + ostr.write(tag: 1, value: p1) + ostr.endEncapsulation() + let inEncaps = ostr.finished() + let result = try initial.ice_invoke(operation: "opLong", mode: .Normal, inEncaps: inEncaps) + var istr = Ice.InputStream(communicator: communicator, bytes: result.outEncaps) + _ = try istr.startEncapsulation() + try test(istr.readOptional(tag: 2, expectedFormat: .F8)) + try test(istr.read() as Int64 == 56) + try test(istr.readOptional(tag: 3, expectedFormat: .F8)) + try test(istr.read() as Int64 == 56) + try istr.endEncapsulation() + + istr = Ice.InputStream(communicator: communicator, bytes: inEncaps) + _ = try istr.startEncapsulation() + try istr.endEncapsulation() + } + + do { + var p1: Float? + var p2: Float? + var p3: Float? + + (p2, p3) = try initial.opFloat(p1) + try test(p2 == nil && p3 == nil) + + (p2, p3) = try initial.opFloat(nil) + try test(p2 == nil && p3 == nil) + + (p2, p3) = try initial.opFloat() + try test(p2 == nil && p3 == nil) + + try Promise<Void> { seal in + firstly { + initial.opFloatAsync(nil) + }.done { p2, p3 in + try test(p2 == nil && p3 == nil) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + try Promise<Void> { seal in + firstly { + initial.opFloatAsync() + }.done { p2, p3 in + try test(p2 == nil && p3 == nil) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + p1 = 1.0 + (p2, p3) = try initial.opFloat(p1) + try test(p2 == 1.0 && p3 == 1.0) + + try Promise<Void> { seal in + firstly { + initial.opFloatAsync(p1) + }.done { p2, p3 in + try test(p2 == 1.0 && p3 == 1.0) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + (p2, p3) = try initial.opFloat(1.0) + try test(p2 == 1.0 && p3 == 1.0) + + try Promise<Void> { seal in + firstly { + initial.opFloatAsync(1.0) + }.done { p2, p3 in + try test(p2 == 1.0 && p3 == 1.0) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + (p2, p3) = try initial.opFloat(nil) + try test(p2 == nil && p3 == nil) // Ensure out parameter is cleared. + + let ostr = Ice.OutputStream(communicator: communicator) + ostr.startEncapsulation() + ostr.write(tag: 2, value: p1) + ostr.endEncapsulation() + let inEncaps = ostr.finished() + let result = try initial.ice_invoke(operation: "opFloat", mode: .Normal, inEncaps: inEncaps) + var istr = Ice.InputStream(communicator: communicator, bytes: result.outEncaps) + _ = try istr.startEncapsulation() + try test(istr.readOptional(tag: 1, expectedFormat: .F4)) + try test(istr.read() as Float == 1.0) + try test(istr.readOptional(tag: 3, expectedFormat: .F4)) + try test(istr.read() as Float == 1.0) + try istr.endEncapsulation() + + istr = Ice.InputStream(communicator: communicator, bytes: inEncaps) + _ = try istr.startEncapsulation() + try istr.endEncapsulation() + } + + do { + var p1: Double? + var p2: Double? + var p3: Double? + (p2, p3) = try initial.opDouble(p1) + try test(p2 == nil && p3 == nil) + + (p2, p3) = try initial.opDouble(nil) + try test(p2 == nil && p3 == nil) + + (p2, p3) = try initial.opDouble() + try test(p2 == nil && p3 == nil) + + try Promise<Void> { seal in + firstly { + initial.opDoubleAsync(nil) + }.done { p2, p3 in + try test(p2 == nil && p3 == nil) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + try Promise<Void> { seal in + firstly { + initial.opDoubleAsync() + }.done { p2, p3 in + try test(p2 == nil && p3 == nil) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + p1 = 1.0 + (p2, p3) = try initial.opDouble(p1) + try test(p2 == 1.0 && p3 == 1.0) + + try Promise<Void> { seal in + firstly { + initial.opDoubleAsync(p1) + }.done { p2, p3 in + try test(p2 == 1.0 && p3 == 1.0) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + (p2, p3) = try initial.opDouble(1.0) + try test(p2 == 1.0 && p3 == 1.0) + + try Promise<Void> { seal in + firstly { + initial.opDoubleAsync(1.0) + }.done { p2, p3 in + try test(p2 == 1.0 && p3 == 1.0) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + (p2, p3) = try initial.opDouble(nil) + try test(p2 == nil && p3 == nil) // Ensure out parameter is cleared. + + let ostr = Ice.OutputStream(communicator: communicator) + ostr.startEncapsulation() + ostr.write(tag: 2, value: p1) + ostr.endEncapsulation() + let inEncaps = ostr.finished() + let result = try initial.ice_invoke(operation: "opDouble", mode: .Normal, inEncaps: inEncaps) + var istr = Ice.InputStream(communicator: communicator, bytes: result.outEncaps) + _ = try istr.startEncapsulation() + try test(istr.readOptional(tag: 1, expectedFormat: .F8)) + try test(istr.read() as Double == 1.0) + try test(istr.readOptional(tag: 3, expectedFormat: .F8)) + try test(istr.read() as Double == 1.0) + try istr.endEncapsulation() + + istr = Ice.InputStream(communicator: communicator, bytes: inEncaps) + _ = try istr.startEncapsulation() + try istr.endEncapsulation() + } + + do { + var p1: String? + var p2: String? + var p3: String? + (p2, p3) = try initial.opString(p1) + try test(p2 == nil && p3 == nil) + + (p2, p3) = try initial.opString(nil) + try test(p2 == nil && p3 == nil) + + (p2, p3) = try initial.opString() + try test(p2 == nil && p3 == nil) + + try Promise<Void> { seal in + firstly { + initial.opStringAsync(nil) + }.done { p2, p3 in + try test(p2 == nil && p3 == nil) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + try Promise<Void> { seal in + firstly { + initial.opStringAsync() + }.done { p2, p3 in + try test(p2 == nil && p3 == nil) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + p1 = "test" + (p2, p3) = try initial.opString(p1) + try test(p2 == "test" && p3 == "test") + + try Promise<Void> { seal in + firstly { + initial.opStringAsync(p1) + }.done { p2, p3 in + try test(p2 == "test" && p3 == "test") + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + (p2, p3) = try initial.opString(p1) + try test(p2 == "test" && p3 == "test") + + try Promise<Void> { seal in + firstly { + initial.opStringAsync(p1) + }.done { p2, p3 in + try test(p2 == "test" && p3 == "test") + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + (p2, p3) = try initial.opString(nil) + try test(p2 == nil && p3 == nil) // Ensure out parameter is cleared. + + let ostr = Ice.OutputStream(communicator: communicator) + ostr.startEncapsulation() + ostr.write(tag: 2, value: p1) + ostr.endEncapsulation() + let inEncaps = ostr.finished() + let result = try initial.ice_invoke(operation: "opString", + mode: .Normal, + inEncaps: inEncaps) + var istr = Ice.InputStream(communicator: communicator, bytes: result.outEncaps) + _ = try istr.startEncapsulation() + try test(istr.readOptional(tag: 1, expectedFormat: .VSize)) + try test(istr.read() as String == "test") + try test(istr.readOptional(tag: 3, expectedFormat: .VSize)) + try test(istr.read() as String == "test") + try istr.endEncapsulation() + + istr = Ice.InputStream(communicator: communicator, bytes: result.outEncaps) + _ = try istr.startEncapsulation() + try istr.endEncapsulation() + } + + do { + var p1: MyEnum? + var p2: MyEnum? + var p3: MyEnum? + + (p2, p3) = try initial.opMyEnum(p1) + try test(p2 == nil && p3 == nil) + + (p2, p3) = try initial.opMyEnum(nil) + try test(p2 == nil && p3 == nil) + + (p2, p3) = try initial.opMyEnum() + try test(p2 == nil && p3 == nil) + + try Promise<Void> { seal in + firstly { + initial.opMyEnumAsync(nil) + }.done { p2, p3 in + try test(p2 == nil && p3 == nil) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + try Promise<Void> { seal in + firstly { + initial.opMyEnumAsync() + }.done { p2, p3 in + try test(p2 == nil && p3 == nil) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + p1 = .MyEnumMember + (p2, p3) = try initial.opMyEnum(p1) + try test(p2 == .MyEnumMember && p3 == .MyEnumMember) + + try Promise<Void> { seal in + firstly { + initial.opMyEnumAsync(p1) + }.done { p2, p3 in + try test(p2 == .MyEnumMember && p3 == .MyEnumMember) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + (p2, p3) = try initial.opMyEnum(p1) + try test(p2 == .MyEnumMember && p3 == .MyEnumMember) + + try Promise<Void> { seal in + firstly { + initial.opMyEnumAsync(.MyEnumMember) + }.done { p2, p3 in + try test(p2 == .MyEnumMember && p3 == .MyEnumMember) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + (p2, p3) = try initial.opMyEnum(nil) + try test(p2 == nil && p3 == nil) // Ensure out parameter is cleared. + + let ostr = Ice.OutputStream(communicator: communicator) + ostr.startEncapsulation() + ostr.write(tag: 2, value: p1) + ostr.endEncapsulation() + let inEncaps = ostr.finished() + let result = try initial.ice_invoke(operation: "opMyEnum", mode: .Normal, inEncaps: inEncaps) + var istr = Ice.InputStream(communicator: communicator, bytes: result.outEncaps) + _ = try istr.startEncapsulation() + try test(istr.readOptional(tag: 1, expectedFormat: .Size)) + try test(istr.read() as MyEnum == .MyEnumMember) + try test(istr.readOptional(tag: 3, expectedFormat: .Size)) + try test(istr.read() as MyEnum == .MyEnumMember) + try istr.endEncapsulation() + + istr = Ice.InputStream(communicator: communicator, bytes: result.outEncaps) + _ = try istr.startEncapsulation() + try istr.endEncapsulation() + } + + do { + var p1: SmallStruct? + var p2: SmallStruct? + var p3: SmallStruct? + (p2, p3) = try initial.opSmallStruct(p1) + try test(p2 == nil && p3 == nil) + + (p2, p3) = try initial.opSmallStruct(nil) + try test(p2 == nil && p3 == nil) + + (p2, p3) = try initial.opSmallStruct() + try test(p2 == nil && p3 == nil) + + try Promise<Void> { seal in + firstly { + initial.opSmallStructAsync(nil) + }.done { p2, p3 in + try test(p2 == nil && p3 == nil) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + try Promise<Void> { seal in + firstly { + initial.opSmallStructAsync() + }.done { p2, p3 in + try test(p2 == nil && p3 == nil) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + p1 = SmallStruct(m: 56) + (p2, p3) = try initial.opSmallStruct(p1) + try test(p2!.m == 56 && p3!.m == 56) + + try Promise<Void> { seal in + firstly { + initial.opSmallStructAsync(p1) + }.done { p2, p3 in + try test(p2!.m == 56 && p3!.m == 56) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + (p2, p3) = try initial.opSmallStruct(SmallStruct(m: 56)) + try test(p2!.m == 56 && p3!.m == 56) + + try Promise<Void> { seal in + firstly { + initial.opSmallStructAsync(SmallStruct(m: 56)) + }.done { p2, p3 in + try test(p2!.m == 56 && p3!.m == 56) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + (p2, p3) = try initial.opSmallStruct(nil) + try test(p2 == nil && p3 == nil) // Ensure out parameter is cleared. + + let ostr = Ice.OutputStream(communicator: communicator) + ostr.startEncapsulation() + ostr.write(tag: 2, value: p1) + ostr.endEncapsulation() + let inEncaps = ostr.finished() + let result = try initial.ice_invoke(operation: "opSmallStruct", mode: .Normal, inEncaps: inEncaps) + var istr = Ice.InputStream(communicator: communicator, bytes: result.outEncaps) + _ = try istr.startEncapsulation() + var s: SmallStruct = try istr.read(tag: 1)! + try test(s.m == 56) + s = try istr.read(tag: 3)! + try test(s.m == 56) + try istr.endEncapsulation() + + istr = Ice.InputStream(communicator: communicator, bytes: result.outEncaps) + _ = try istr.startEncapsulation() + try istr.endEncapsulation() + } + + do { + var p1: FixedStruct? + var p2: FixedStruct? + var p3: FixedStruct? + + (p2, p3) = try initial.opFixedStruct(p1) + try test(p2 == nil && p3 == nil) + + (p2, p3) = try initial.opFixedStruct(nil) + try test(p2 == nil && p3 == nil) + + (p2, p3) = try initial.opFixedStruct() + try test(p2 == nil && p3 == nil) + + try Promise<Void> { seal in + firstly { + initial.opFixedStructAsync(nil) + }.done { p2, p3 in + try test(p2 == nil && p3 == nil) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + try Promise<Void> { seal in + firstly { + initial.opFixedStructAsync() + }.done { p2, p3 in + try test(p2 == nil && p3 == nil) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + p1 = FixedStruct(m: 56) + (p2, p3) = try initial.opFixedStruct(p1) + try test(p2!.m == 56 && p3!.m == 56) + + try Promise<Void> { seal in + firstly { + initial.opFixedStructAsync(p1) + }.done { p2, p3 in + try test(p2!.m == 56 && p3!.m == 56) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + (p2, p3) = try initial.opFixedStruct(FixedStruct(m: 56)) + try test(p2!.m == 56 && p3!.m == 56) + + try Promise<Void> { seal in + firstly { + initial.opFixedStructAsync(FixedStruct(m: 56)) + }.done { p2, p3 in + try test(p2!.m == 56 && p3!.m == 56) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + (p2, p3) = try initial.opFixedStruct(nil) + try test(p2 == nil && p3 == nil) // Ensure out parameter is cleared. + + let ostr = Ice.OutputStream(communicator: communicator) + ostr.startEncapsulation() + ostr.write(tag: 2, value: p1) + ostr.endEncapsulation() + let inEncaps = ostr.finished() + let result = try initial.ice_invoke(operation: "opFixedStruct", mode: .Normal, inEncaps: inEncaps) + + var istr = Ice.InputStream(communicator: communicator, bytes: result.outEncaps) + _ = try istr.startEncapsulation() + var s: FixedStruct = try istr.read(tag: 1)! + try test(s.m == 56) + s = try istr.read(tag: 3)! + try istr.endEncapsulation() + + istr = Ice.InputStream(communicator: communicator, bytes: result.outEncaps) + _ = try istr.startEncapsulation() + try istr.endEncapsulation() + } + + do { + var p1: VarStruct? + var p2: VarStruct? + var p3: VarStruct? + + (p2, p3) = try initial.opVarStruct(p1) + try test(p2 == nil && p3 == nil) + + (p2, p3) = try initial.opVarStruct(nil) + try test(p2 == nil && p3 == nil) + + (p2, p3) = try initial.opVarStruct() + try test(p2 == nil && p3 == nil) + + try Promise<Void> { seal in + firstly { + initial.opVarStructAsync(nil) + }.done { p2, p3 in + try test(p2 == nil && p3 == nil) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + try Promise<Void> { seal in + firstly { + initial.opVarStructAsync() + }.done { p2, p3 in + try test(p2 == nil && p3 == nil) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + p1 = VarStruct(m: "test") + (p2, p3) = try initial.opVarStruct(p1) + try test(p2!.m == "test" && p3!.m == "test") + + // Test null struct + (p2, p3) = try initial.opVarStruct(nil) + try test(p2 == nil && p3 == nil) + + try Promise<Void> { seal in + firstly { + initial.opVarStructAsync(p1) + }.done { p2, p3 in + try test(p2!.m == "test" && p3!.m == "test") + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + (p2, p3) = try initial.opVarStruct(VarStruct(m: "test")) + try test(p2!.m == "test" && p3!.m == "test") + + try Promise<Void> { seal in + firstly { + initial.opVarStructAsync(VarStruct(m: "test")) + }.done { p2, p3 in + try test(p2!.m == "test" && p3!.m == "test") + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + (p2, p3) = try initial.opVarStruct(nil) + try test(p2 == nil && p3 == nil) // Ensure out parameter is cleared. + + let ostr = Ice.OutputStream(communicator: communicator) + ostr.startEncapsulation() + ostr.write(tag: 2, value: p1) + ostr.endEncapsulation() + let inEncaps = ostr.finished() + let result = try initial.ice_invoke(operation: "opVarStruct", mode: .Normal, inEncaps: inEncaps) + var istr = Ice.InputStream(communicator: communicator, bytes: result.outEncaps) + _ = try istr.startEncapsulation() + var v: VarStruct = try istr.read(tag: 1)! + try test(v.m == "test") + v = try istr.read(tag: 3)! + try test(v.m == "test") + try istr.endEncapsulation() + + istr = Ice.InputStream(communicator: communicator, bytes: result.outEncaps) + _ = try istr.startEncapsulation() + try istr.endEncapsulation() + } + + do { + var p1: OneOptional? + var p2: OneOptional? + var p3: OneOptional? + + (p2, p3) = try initial.opOneOptional(p1) + try test(p2 == nil && p3 == nil) + + (p2, p3) = try initial.opOneOptional(nil) + try test(p2 == nil && p3 == nil) + + (p2, p3) = try initial.opOneOptional() + try test(p2 == nil && p3 == nil) + + try Promise<Void> { seal in + firstly { + initial.opOneOptionalAsync(nil) + }.done { p2, p3 in + try test(p2 == nil && p3 == nil) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + try Promise<Void> { seal in + firstly { + initial.opOneOptionalAsync() + }.done { p2, p3 in + try test(p2 == nil && p3 == nil) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + p1 = OneOptional(a: 58) + (p2, p3) = try initial.opOneOptional(p1) + try test(p2!.a! == 58 && p3!.a! == 58) + + try Promise<Void> { seal in + firstly { + initial.opOneOptionalAsync(p1) + }.done { p2, p3 in + try test(p2!.a! == 58 && p3!.a! == 58) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + (p2, p3) = try initial.opOneOptional(OneOptional(a: 58)) + try test(p2!.a! == 58 && p3!.a! == 58) + + try Promise<Void> { seal in + firstly { + initial.opOneOptionalAsync(OneOptional(a: 58)) + }.done { p2, p3 in + try test(p2!.a! == 58 && p3!.a! == 58) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + (p2, p3) = try initial.opOneOptional(nil) + try test(p2 == nil && p3 == nil) // Ensure out parameter is cleared. + + let ostr = Ice.OutputStream(communicator: communicator) + ostr.startEncapsulation() + ostr.write(tag: 2, value: p1) + ostr.endEncapsulation() + let inEncaps = ostr.finished() + let result = try initial.ice_invoke(operation: "opOneOptional", mode: .Normal, inEncaps: inEncaps) + var istr = Ice.InputStream(communicator: communicator, bytes: result.outEncaps) + _ = try istr.startEncapsulation() + try test(istr.readOptional(tag: 1, expectedFormat: .Class)) + var v1: Ice.Value? + try istr.read { v1 = $0 } + try test(istr.readOptional(tag: 3, expectedFormat: .Class)) + var v2: Ice.Value? + try istr.read { v2 = $0 } + try istr.endEncapsulation() + try test((v1 as! OneOptional).a! == 58 && (v2 as! OneOptional).a == 58) + + istr = Ice.InputStream(communicator: communicator, bytes: result.outEncaps) + _ = try istr.startEncapsulation() + try istr.endEncapsulation() + } + + do { + var p1: Ice.ObjectPrx? + var p2: Ice.ObjectPrx? + var p3: Ice.ObjectPrx? + (p2, p3) = try initial.opOneOptionalProxy(p1) + try test(p2 == nil && p3 == nil) + + (p2, p3) = try initial.opOneOptionalProxy(nil) + try test(p2 == nil && p3 == nil) + + (p2, p3) = try initial.opOneOptionalProxy() + try test(p2 == nil && p3 == nil) + + try Promise<Void> { seal in + firstly { + initial.opOneOptionalProxyAsync(nil) + }.done { p2, p3 in + try test(p2 == nil && p3 == nil) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + try Promise<Void> { seal in + firstly { + initial.opOneOptionalProxyAsync() + }.done { p2, p3 in + try test(p2 == nil && p3 == nil) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + p1 = try communicator.stringToProxy("test") + (p2, p3) = try initial.opOneOptionalProxy(p1) + try test(p2 == p1 && p3 == p1) + + try Promise<Void> { seal in + firstly { + initial.opOneOptionalProxyAsync(p1) + }.done { p2, p3 in + try test(p2 == p1 && p3 == p1) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + (p2, p3) = try initial.opOneOptionalProxy(nil) + try test(p2 == nil && p3 == nil) // Ensure out parameter is cleared. + + let ostr = Ice.OutputStream(communicator: communicator) + _ = ostr.startEncapsulation() + ostr.write(tag: 2, value: p1) + ostr.endEncapsulation() + let inEncaps = ostr.finished() + let result = try initial.ice_invoke(operation: "opOneOptionalProxy", mode: .Normal, inEncaps: inEncaps) + var istr = Ice.InputStream(communicator: communicator, bytes: result.outEncaps) + _ = try istr.startEncapsulation() + p2 = try istr.read(tag: 1) + try test(p2 == p1) + p3 = try istr.read(tag: 3) + try test(p3 == p1) + try istr.endEncapsulation() + + istr = Ice.InputStream(communicator: communicator, bytes: result.outEncaps) + _ = try istr.startEncapsulation() + try istr.endEncapsulation() + } + + do { + var p1: ByteSeq? + var p2: ByteSeq? + var p3: ByteSeq? + + (p2, p3) = try initial.opByteSeq(p1) + try test(p2 == nil && p3 == nil) + + (p2, p3) = try initial.opByteSeq(nil) + try test(p2 == nil && p3 == nil) + + (p2, p3) = try initial.opByteSeq() + try test(p2 == nil && p3 == nil) + + try Promise<Void> { seal in + firstly { + initial.opByteSeqAsync(nil) + }.done { p2, p3 in + try test(p2 == nil && p3 == nil) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + try Promise<Void> { seal in + firstly { + initial.opByteSeqAsync() + }.done { p2, p3 in + try test(p2 == nil && p3 == nil) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + p1 = ByteSeq(repeating: 56, count: 100) + (p2, p3) = try initial.opByteSeq(p1) + try test(p2 == p1 && p3 == p1) + + try Promise<Void> { seal in + firstly { + initial.opByteSeqAsync(p1) + }.done { p2, p3 in + try test(p2 == p1 && p3 == p1) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + (p2, p3) = try initial.opByteSeq(ByteSeq(repeating: 56, count: 100)) + try test(p2 == p1 && p3 == p1) + + try Promise<Void> { seal in + firstly { + initial.opByteSeqAsync(ByteSeq(repeating: 56, count: 100)) + }.done { p2, p3 in + try test(p2 == p1 && p3 == p1) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + (p2, p3) = try initial.opByteSeq(nil) + try test(p2 == nil && p3 == nil) // Ensure out parameter is cleared. + + let ostr = Ice.OutputStream(communicator: communicator) + ostr.startEncapsulation() + ostr.write(tag: 2, value: p1) + ostr.endEncapsulation() + let inEncaps = ostr.finished() + let result = try initial.ice_invoke(operation: "opByteSeq", mode: .Normal, inEncaps: inEncaps) + var istr = Ice.InputStream(communicator: communicator, bytes: result.outEncaps) + _ = try istr.startEncapsulation() + try test(istr.read(tag: 1) == p1) + try test(istr.read(tag: 3) == p1) + try istr.endEncapsulation() + + istr = Ice.InputStream(communicator: communicator, bytes: result.outEncaps) + _ = try istr.startEncapsulation() + try istr.endEncapsulation() + } + + do { + var p1: [Bool]? + var p2: [Bool]? + var p3: [Bool]? + + (p2, p3) = try initial.opBoolSeq(p1) + try test(p2 == nil && p3 == nil) + + (p2, p3) = try initial.opBoolSeq(nil) + try test(p2 == nil && p3 == nil) + + (p2, p3) = try initial.opBoolSeq() + try test(p2 == nil && p3 == nil) + + try Promise<Void> { seal in + firstly { + initial.opBoolSeqAsync(nil) + }.done { p2, p3 in + try test(p2 == nil && p3 == nil) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + try Promise<Void> { seal in + firstly { + initial.opBoolSeqAsync() + }.done { p2, p3 in + try test(p2 == nil && p3 == nil) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + p1 = [Bool](repeating: true, count: 100) + (p2, p3) = try initial.opBoolSeq(p1) + try test(p2 == p1 && p3 == p1) + + try Promise<Void> { seal in + firstly { + initial.opBoolSeqAsync(p1) + }.done { p2, p3 in + try test(p2 == p1 && p3 == p1) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + (p2, p3) = try initial.opBoolSeq([Bool](repeating: true, count: 100)) + try test(p2 == p1 && p3 == p1) + + try Promise<Void> { seal in + firstly { + initial.opBoolSeqAsync([Bool](repeating: true, count: 100)) + }.done { p2, p3 in + try test(p2 == p1 && p3 == p1) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + (p2, p3) = try initial.opBoolSeq(nil) + try test(p2 == nil && p3 == nil) // Ensure out parameter is cleared. + + let ostr = Ice.OutputStream(communicator: communicator) + ostr.startEncapsulation() + ostr.write(tag: 2, value: p1) + ostr.endEncapsulation() + let inEncaps = ostr.finished() + let result = try initial.ice_invoke(operation: "opBoolSeq", mode: .Normal, inEncaps: inEncaps) + var istr = Ice.InputStream(communicator: communicator, bytes: result.outEncaps) + _ = try istr.startEncapsulation() + try test(istr.read(tag: 1) == p1) + try test(istr.read(tag: 3) == p1) + try istr.endEncapsulation() + + istr = Ice.InputStream(communicator: communicator, bytes: result.outEncaps) + _ = try istr.startEncapsulation() + try istr.endEncapsulation() + } + + do { + var p1: [Int16]? + var p2: [Int16]? + var p3: [Int16]? + + (p2, p3) = try initial.opShortSeq(p1) + try test(p2 == nil && p3 == nil) + + (p2, p3) = try initial.opShortSeq(nil) + try test(p2 == nil && p3 == nil) + + (p2, p3) = try initial.opShortSeq() + try test(p2 == nil && p3 == nil) + + try Promise<Void> { seal in + firstly { + initial.opShortSeqAsync(nil) + }.done { p2, p3 in + try test(p2 == nil && p3 == nil) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + try Promise<Void> { seal in + firstly { + initial.opShortSeqAsync() + }.done { p2, p3 in + try test(p2 == nil && p3 == nil) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + p1 = [Int16](repeating: 56, count: 100) + (p2, p3) = try initial.opShortSeq(p1) + try test(p2 == p1 && p3 == p1) + + try Promise<Void> { seal in + firstly { + initial.opShortSeqAsync(p1) + }.done { p2, p3 in + try test(p2 == p1 && p3 == p1) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + (p2, p3) = try initial.opShortSeq([Int16](repeating: 56, count: 100)) + try test(p2 == p1 && p3 == p1) + + try Promise<Void> { seal in + firstly { + initial.opShortSeqAsync([Int16](repeating: 56, count: 100)) + }.done { p2, p3 in + try test(p2 == p1 && p3 == p1) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + (p2, p3) = try initial.opShortSeq(nil) + try test(p2 == nil && p3 == nil) // Ensure out parameter is cleared. + + let ostr = Ice.OutputStream(communicator: communicator) + ostr.startEncapsulation() + ostr.write(tag: 2, value: p1) + ostr.endEncapsulation() + let inEncaps = ostr.finished() + let result = try initial.ice_invoke(operation: "opShortSeq", mode: .Normal, inEncaps: inEncaps) + var istr = Ice.InputStream(communicator: communicator, bytes: result.outEncaps) + _ = try istr.startEncapsulation() + try test(istr.read(tag: 1) == p1) + try test(istr.read(tag: 3) == p1) + try istr.endEncapsulation() + + istr = Ice.InputStream(communicator: communicator, bytes: result.outEncaps) + _ = try istr.startEncapsulation() + try istr.endEncapsulation() + } + + do { + var p1: [Int32]? + var p2: [Int32]? + var p3: [Int32]? + + (p2, p3) = try initial.opIntSeq(p1) + try test(p2 == nil && p3 == nil) + + (p2, p3) = try initial.opIntSeq(nil) + try test(p2 == nil && p3 == nil) + + (p2, p3) = try initial.opIntSeq() + try test(p2 == nil && p3 == nil) + + try Promise<Void> { seal in + firstly { + initial.opIntSeqAsync(nil) + }.done { p2, p3 in + try test(p2 == nil && p3 == nil) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + try Promise<Void> { seal in + firstly { + initial.opIntSeqAsync() + }.done { p2, p3 in + try test(p2 == nil && p3 == nil) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + p1 = [Int32](repeating: 56, count: 100) + (p2, p3) = try initial.opIntSeq(p1) + try test(p2 == p1 && p3 == p1) + + try Promise<Void> { seal in + firstly { + initial.opIntSeqAsync(p1) + }.done { p2, p3 in + try test(p2 == p1 && p3 == p1) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + (p2, p3) = try initial.opIntSeq([Int32](repeating: 56, count: 100)) + try test(p2 == p1 && p3 == p1) + + try Promise<Void> { seal in + firstly { + initial.opIntSeqAsync([Int32](repeating: 56, count: 100)) + }.done { p2, p3 in + try test(p2 == p1 && p3 == p1) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + (p2, p3) = try initial.opIntSeq(nil) + try test(p2 == nil && p3 == nil) // Ensure out parameter is cleared. + + let ostr = Ice.OutputStream(communicator: communicator) + ostr.startEncapsulation() + ostr.write(tag: 2, value: p1) + ostr.endEncapsulation() + let inEncaps = ostr.finished() + let result = try initial.ice_invoke(operation: "opIntSeq", mode: .Normal, inEncaps: inEncaps) + var istr = Ice.InputStream(communicator: communicator, bytes: result.outEncaps) + _ = try istr.startEncapsulation() + try test(istr.read(tag: 1) == p1) + try test(istr.read(tag: 3) == p1) + try istr.endEncapsulation() + + istr = Ice.InputStream(communicator: communicator, bytes: result.outEncaps) + _ = try istr.startEncapsulation() + try istr.endEncapsulation() + } + + do { + var p1: [Int64]? + var p2: [Int64]? + var p3: [Int64]? + + (p2, p3) = try initial.opLongSeq(p1) + try test(p2 == nil && p3 == nil) + + (p2, p3) = try initial.opLongSeq(nil) + try test(p2 == nil && p3 == nil) + + (p2, p3) = try initial.opLongSeq() + try test(p2 == nil && p3 == nil) + + try Promise<Void> { seal in + firstly { + initial.opLongSeqAsync(nil) + }.done { p2, p3 in + try test(p2 == nil && p3 == nil) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + try Promise<Void> { seal in + firstly { + initial.opLongSeqAsync() + }.done { p2, p3 in + try test(p2 == nil && p3 == nil) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + p1 = [Int64](repeating: 56, count: 100) + (p2, p3) = try initial.opLongSeq(p1) + try test(p2 == p1 && p3 == p1) + + try Promise<Void> { seal in + firstly { + initial.opLongSeqAsync(p1) + }.done { p2, p3 in + try test(p2 == p1 && p3 == p1) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + (p2, p3) = try initial.opLongSeq([Int64](repeating: 56, count: 100)) + try test(p2 == p1 && p3 == p1) + + try Promise<Void> { seal in + firstly { + initial.opLongSeqAsync([Int64](repeating: 56, count: 100)) + }.done { p2, p3 in + try test(p2 == p1 && p3 == p1) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + (p2, p3) = try initial.opLongSeq(nil) + try test(p2 == nil && p3 == nil) // Ensure out parameter is cleared. + + let ostr = Ice.OutputStream(communicator: communicator) + ostr.startEncapsulation() + ostr.write(tag: 2, value: p1) + ostr.endEncapsulation() + let inEncaps = ostr.finished() + let result = try initial.ice_invoke(operation: "opLongSeq", mode: .Normal, inEncaps: inEncaps) + var istr = Ice.InputStream(communicator: communicator, bytes: result.outEncaps) + _ = try istr.startEncapsulation() + try test(istr.read(tag: 1) == p1) + try test(istr.read(tag: 3) == p1) + try istr.endEncapsulation() + + istr = Ice.InputStream(communicator: communicator, bytes: result.outEncaps) + _ = try istr.startEncapsulation() + try istr.endEncapsulation() + } + + do { + var p1: [Float]? + var p2: [Float]? + var p3: [Float]? + + (p2, p3) = try initial.opFloatSeq(p1) + try test(p2 == nil && p3 == nil) + + (p2, p3) = try initial.opFloatSeq(nil) + try test(p2 == nil && p3 == nil) + + (p2, p3) = try initial.opFloatSeq() + try test(p2 == nil && p3 == nil) + + try Promise<Void> { seal in + firstly { + initial.opFloatSeqAsync(nil) + }.done { p2, p3 in + try test(p2 == nil && p3 == nil) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + try Promise<Void> { seal in + firstly { + initial.opFloatSeqAsync() + }.done { p2, p3 in + try test(p2 == nil && p3 == nil) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + p1 = [Float](repeating: 1.0, count: 100) + (p2, p3) = try initial.opFloatSeq(p1) + try test(p2 == p1 && p3 == p1) + + try Promise<Void> { seal in + firstly { + initial.opFloatSeqAsync(p1) + }.done { p2, p3 in + try test(p2 == p1 && p3 == p1) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + (p2, p3) = try initial.opFloatSeq([Float](repeating: 1.0, count: 100)) + try test(p2 == p1 && p3 == p1) + + try Promise<Void> { seal in + firstly { + initial.opFloatSeqAsync([Float](repeating: 1.0, count: 100)) + }.done { p2, p3 in + try test(p2 == p1 && p3 == p1) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + (p2, p3) = try initial.opFloatSeq(nil) + try test(p2 == nil && p3 == nil) // Ensure out parameter is cleared. + + let ostr = Ice.OutputStream(communicator: communicator) + ostr.startEncapsulation() + ostr.write(tag: 2, value: p1) + ostr.endEncapsulation() + let inEncaps = ostr.finished() + let result = try initial.ice_invoke(operation: "opFloatSeq", mode: .Normal, inEncaps: inEncaps) + var istr = Ice.InputStream(communicator: communicator, bytes: result.outEncaps) + _ = try istr.startEncapsulation() + try test(istr.read(tag: 1) == p1) + try test(istr.read(tag: 3) == p1) + try istr.endEncapsulation() + + istr = Ice.InputStream(communicator: communicator, bytes: result.outEncaps) + _ = try istr.startEncapsulation() + try istr.endEncapsulation() + } + + do { + var p1: [Double]? + var p2: [Double]? + var p3: [Double]? + + (p2, p3) = try initial.opDoubleSeq(p1) + try test(p2 == nil && p3 == nil) + + (p2, p3) = try initial.opDoubleSeq(nil) + try test(p2 == nil && p3 == nil) + + (p2, p3) = try initial.opDoubleSeq() + try test(p2 == nil && p3 == nil) + + try Promise<Void> { seal in + firstly { + initial.opDoubleSeqAsync(nil) + }.done { p2, p3 in + try test(p2 == nil && p3 == nil) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + try Promise<Void> { seal in + firstly { + initial.opDoubleSeqAsync() + }.done { p2, p3 in + try test(p2 == nil && p3 == nil) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + p1 = [Double](repeating: 1.0, count: 100) + (p2, p3) = try initial.opDoubleSeq(p1) + try test(p2 == p1 && p3 == p1) + + try Promise<Void> { seal in + firstly { + initial.opDoubleSeqAsync(p1) + }.done { p2, p3 in + try test(p2 == p1 && p3 == p1) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + (p2, p3) = try initial.opDoubleSeq([Double](repeating: 1.0, count: 100)) + try test(p2 == p1 && p3 == p1) + + try Promise<Void> { seal in + firstly { + initial.opDoubleSeqAsync([Double](repeating: 1.0, count: 100)) + }.done { p2, p3 in + try test(p2 == p1 && p3 == p1) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + (p2, p3) = try initial.opDoubleSeq(nil) + try test(p2 == nil && p3 == nil) // Ensure out parameter is cleared. + + let ostr = Ice.OutputStream(communicator: communicator) + ostr.startEncapsulation() + ostr.write(tag: 2, value: p1) + ostr.endEncapsulation() + let inEncaps = ostr.finished() + let result = try initial.ice_invoke(operation: "opDoubleSeq", mode: .Normal, inEncaps: inEncaps) + var istr = Ice.InputStream(communicator: communicator, bytes: result.outEncaps) + _ = try istr.startEncapsulation() + try test(istr.read(tag: 1) == p1) + try test(istr.read(tag: 3) == p1) + try istr.endEncapsulation() + + istr = Ice.InputStream(communicator: communicator, bytes: result.outEncaps) + _ = try istr.startEncapsulation() + try istr.endEncapsulation() + } + + do { + var p1: [String]? + var p2: [String]? + var p3: [String]? + + (p2, p3) = try initial.opStringSeq(p1) + try test(p2 == nil && p3 == nil) + + (p2, p3) = try initial.opStringSeq(nil) + try test(p2 == nil && p3 == nil) + + (p2, p3) = try initial.opStringSeq() + try test(p2 == nil && p3 == nil) + + try Promise<Void> { seal in + firstly { + initial.opStringSeqAsync(nil) + }.done { p2, p3 in + try test(p2 == nil && p3 == nil) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + try Promise<Void> { seal in + firstly { + initial.opStringSeqAsync() + }.done { p2, p3 in + try test(p2 == nil && p3 == nil) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + p1 = [String](repeating: "test", count: 100) + (p2, p3) = try initial.opStringSeq(p1) + try test(p2 == p1 && p3 == p1) + + try Promise<Void> { seal in + firstly { + initial.opStringSeqAsync(p1) + }.done { p2, p3 in + try test(p2 == p1 && p3 == p1) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + (p2, p3) = try initial.opStringSeq([String](repeating: "test", count: 100)) + try test(p2 == p1 && p3 == p1) + + try Promise<Void> { seal in + firstly { + initial.opStringSeqAsync([String](repeating: "test", count: 100)) + }.done { p2, p3 in + try test(p2 == p1 && p3 == p1) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + (p2, p3) = try initial.opStringSeq(nil) + try test(p2 == nil && p3 == nil) // Ensure out parameter is cleared. + + let ostr = Ice.OutputStream(communicator: communicator) + ostr.startEncapsulation() + ostr.write(tag: 2, value: p1) + ostr.endEncapsulation() + let inEncaps = ostr.finished() + let result = try initial.ice_invoke(operation: "opStringSeq", mode: .Normal, inEncaps: inEncaps) + var istr = Ice.InputStream(communicator: communicator, bytes: result.outEncaps) + _ = try istr.startEncapsulation() + try test(istr.read(tag: 1) == p1) + try test(istr.read(tag: 3) == p1) + try istr.endEncapsulation() + + istr = Ice.InputStream(communicator: communicator, bytes: result.outEncaps) + _ = try istr.startEncapsulation() + try istr.endEncapsulation() + } + + do { + var p1: SmallStructSeq? + var p2: SmallStructSeq? + var p3: SmallStructSeq? + + (p2, p3) = try initial.opSmallStructSeq(p1) + try test(p2 == nil && p3 == nil) + + (p2, p3) = try initial.opSmallStructSeq(nil) + try test(p2 == nil && p3 == nil) + + (p2, p3) = try initial.opSmallStructSeq() + try test(p2 == nil && p3 == nil) + + try Promise<Void> { seal in + firstly { + initial.opSmallStructSeqAsync(nil) + }.done { p2, p3 in + try test(p2 == nil && p3 == nil) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + try Promise<Void> { seal in + firstly { + initial.opSmallStructSeqAsync() + }.done { p2, p3 in + try test(p2 == nil && p3 == nil) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + p1 = SmallStructSeq(repeating: SmallStruct(), count: 100) + (p2, p3) = try initial.opSmallStructSeq(p1) + try test(p2 == p1 && p3 == p1) + + try Promise<Void> { seal in + firstly { + initial.opSmallStructSeqAsync(p1) + }.done { p2, p3 in + try test(p2 == p1 && p3 == p1) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + (p2, p3) = try initial.opSmallStructSeq(SmallStructSeq(repeating: SmallStruct(), count: 100)) + try test(p2 == p1 && p3 == p1) + + try Promise<Void> { seal in + firstly { + initial.opSmallStructSeqAsync(SmallStructSeq(repeating: SmallStruct(), count: 100)) + }.done { p2, p3 in + try test(p2 == p1 && p3 == p1) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + (p2, p3) = try initial.opSmallStructSeq(nil) + try test(p2 == nil && p3 == nil) // Ensure out parameter is cleared. + + let ostr = Ice.OutputStream(communicator: communicator) + ostr.startEncapsulation() + SmallStructSeqHelper.write(to: ostr, tag: 2, value: p1) + ostr.endEncapsulation() + let inEncaps = ostr.finished() + let result = try initial.ice_invoke(operation: "opSmallStructSeq", mode: .Normal, inEncaps: inEncaps) + var istr = Ice.InputStream(communicator: communicator, bytes: result.outEncaps) + _ = try istr.startEncapsulation() + try test(SmallStructSeqHelper.read(from: istr, tag: 1) == p1) + try test(SmallStructSeqHelper.read(from: istr, tag: 3) == p1) + try istr.endEncapsulation() + + istr = Ice.InputStream(communicator: communicator, bytes: result.outEncaps) + _ = try istr.startEncapsulation() + try istr.endEncapsulation() + } + + do { + var p1: FixedStructSeq? + var p2: FixedStructSeq? + var p3: FixedStructSeq? + + (p2, p3) = try initial.opFixedStructSeq(p1) + try test(p2 == nil && p3 == nil) + + (p2, p3) = try initial.opFixedStructSeq(nil) + try test(p2 == nil && p3 == nil) + + (p2, p3) = try initial.opFixedStructSeq() + try test(p2 == nil && p3 == nil) + + try Promise<Void> { seal in + firstly { + initial.opFixedStructSeqAsync(p1) + }.done { p2, p3 in + try test(p2 == nil && p3 == nil) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + p1 = FixedStructSeq(repeating: FixedStruct(), count: 100) + (p2, p3) = try initial.opFixedStructSeq(p1) + try test(p2 == p1 && p3 == p1) + + try Promise<Void> { seal in + firstly { + initial.opFixedStructSeqAsync(p1) + }.done { p2, p3 in + try test(p2 == p1 && p3 == p1) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + (p2, p3) = try initial.opFixedStructSeq(FixedStructSeq(repeating: FixedStruct(), count: 100)) + try test(p2 == p1 && p3 == p1) + + try Promise<Void> { seal in + firstly { + initial.opFixedStructSeqAsync(FixedStructSeq(repeating: FixedStruct(), count: 100)) + }.done { p2, p3 in + try test(p2 == p1 && p3 == p1) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + (p2, p3) = try initial.opFixedStructSeq(nil) + try test(p2 == nil && p3 == nil) // Ensure out parameter is cleared. + + let ostr = Ice.OutputStream(communicator: communicator) + ostr.startEncapsulation() + FixedStructSeqHelper.write(to: ostr, tag: 2, value: p1) + ostr.endEncapsulation() + let inEncaps = ostr.finished() + let result = try initial.ice_invoke(operation: "opFixedStructSeq", mode: .Normal, inEncaps: inEncaps) + var istr = Ice.InputStream(communicator: communicator, bytes: result.outEncaps) + _ = try istr.startEncapsulation() + try test(FixedStructSeqHelper.read(from: istr, tag: 1) == p1) + try test(FixedStructSeqHelper.read(from: istr, tag: 3) == p1) + try istr.endEncapsulation() + + istr = Ice.InputStream(communicator: communicator, bytes: result.outEncaps) + _ = try istr.startEncapsulation() + try istr.endEncapsulation() + } + + do { + var p1: VarStructSeq? + var p2: VarStructSeq? + var p3: VarStructSeq? + + (p2, p3) = try initial.opVarStructSeq(p1) + try test(p2 == nil && p3 == nil) + + (p2, p3) = try initial.opVarStructSeq(nil) + try test(p2 == nil && p3 == nil) + + (p2, p3) = try initial.opVarStructSeq() + try test(p2 == nil && p3 == nil) + + try Promise<Void> { seal in + firstly { + initial.opVarStructSeqAsync(nil) + }.done { p2, p3 in + try test(p2 == nil && p3 == nil) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + try Promise<Void> { seal in + firstly { + initial.opVarStructSeqAsync() + }.done { p2, p3 in + try test(p2 == nil && p3 == nil) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + p1 = VarStructSeq(repeating: VarStruct(), count: 100) + (p2, p3) = try initial.opVarStructSeq(p1) + try test(p2 == p1 && p3 == p1) + + try Promise<Void> { seal in + firstly { + initial.opVarStructSeqAsync(p1) + }.done { p2, p3 in + try test(p2 == p1 && p3 == p1) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + (p2, p3) = try initial.opVarStructSeq(VarStructSeq(repeating: VarStruct(), count: 100)) + try test(p2 == p1 && p3 == p1) + + try Promise<Void> { seal in + firstly { + initial.opVarStructSeqAsync(VarStructSeq(repeating: VarStruct(), count: 100)) + }.done { p2, p3 in + try test(p2 == p1 && p3 == p1) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + (p2, p3) = try initial.opVarStructSeq(nil) + try test(p2 == nil && p3 == nil) // Ensure out parameter is cleared. + + let ostr = Ice.OutputStream(communicator: communicator) + ostr.startEncapsulation() + VarStructSeqHelper.write(to: ostr, tag: 2, value: p1) + ostr.endEncapsulation() + let inEncaps = ostr.finished() + let result = try initial.ice_invoke(operation: "opVarStructSeq", mode: .Normal, inEncaps: inEncaps) + var istr = Ice.InputStream(communicator: communicator, bytes: result.outEncaps) + _ = try istr.startEncapsulation() + try test(VarStructSeqHelper.read(from: istr, tag: 1) == p1) + try test(VarStructSeqHelper.read(from: istr, tag: 3) == p1) + try istr.endEncapsulation() + + istr = Ice.InputStream(communicator: communicator, bytes: result.outEncaps) + _ = try istr.startEncapsulation() + try istr.endEncapsulation() + } + + do { + var p1: [Int32: Int32]? + var p2: [Int32: Int32]? + var p3: [Int32: Int32]? + + (p2, p3) = try initial.opIntIntDict(p1) + try test(p2 == nil && p3 == nil) + + (p2, p3) = try initial.opIntIntDict(nil) + try test(p2 == nil && p3 == nil) + + (p2, p3) = try initial.opIntIntDict() + try test(p2 == nil && p3 == nil) + + try Promise<Void> { seal in + firstly { + initial.opIntIntDictAsync(nil) + }.done { p2, p3 in + try test(p2 == nil && p3 == nil) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + try Promise<Void> { seal in + firstly { + initial.opIntIntDictAsync() + }.done { p2, p3 in + try test(p2 == nil && p3 == nil) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + p1 = [1: 2, 2: 3] + (p2, p3) = try initial.opIntIntDict(p1) + try test(p2 == p1 && p3 == p1) + + try Promise<Void> { seal in + firstly { + initial.opIntIntDictAsync(p1) + }.done { p2, p3 in + try test(p2 == p1 && p3 == p1) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + (p2, p3) = try initial.opIntIntDict([1: 2, 2: 3]) + try test(p2 == p1 && p3 == p1) + + try Promise<Void> { seal in + firstly { + initial.opIntIntDictAsync([1: 2, 2: 3]) + }.done { p2, p3 in + try test(p2 == p1 && p3 == p1) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + (p2, p3) = try initial.opIntIntDict(nil) + try test(p2 == nil && p3 == nil) // Ensure out parameter is cleared. + + let ostr = Ice.OutputStream(communicator: communicator) + ostr.startEncapsulation() + IntIntDictHelper.write(to: ostr, tag: 2, value: p1) + ostr.endEncapsulation() + let inEncaps = ostr.finished() + let result = try initial.ice_invoke(operation: "opIntIntDict", mode: .Normal, inEncaps: inEncaps) + var istr = Ice.InputStream(communicator: communicator, bytes: result.outEncaps) + _ = try istr.startEncapsulation() + try test(IntIntDictHelper.read(from: istr, tag: 1) == p1) + try test(IntIntDictHelper.read(from: istr, tag: 3) == p1) + try istr.endEncapsulation() + + istr = Ice.InputStream(communicator: communicator, bytes: result.outEncaps) + _ = try istr.startEncapsulation() + try istr.endEncapsulation() + } + + do { + var p1: [String: Int32]? + var p2: [String: Int32]? + var p3: [String: Int32]? + + (p2, p3) = try initial.opStringIntDict(p1) + try test(p2 == nil && p3 == nil) + + (p2, p3) = try initial.opStringIntDict(nil) + try test(p2 == nil && p3 == nil) + + (p2, p3) = try initial.opStringIntDict() + try test(p2 == nil && p3 == nil) + + try Promise<Void> { seal in + firstly { + initial.opStringIntDictAsync(nil) + }.done { p2, p3 in + try test(p2 == nil && p3 == nil) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + try Promise<Void> { seal in + firstly { + initial.opStringIntDictAsync() + }.done { p2, p3 in + try test(p2 == nil && p3 == nil) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + p1 = ["1": 1, "2": 2] + (p2, p3) = try initial.opStringIntDict(p1) + try test(p2 == p1 && p3 == p1) + + try Promise<Void> { seal in + firstly { + initial.opStringIntDictAsync(p1) + }.done { p2, p3 in + try test(p2 == p1 && p3 == p1) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + (p2, p3) = try initial.opStringIntDict(["1": 1, "2": 2]) + try test(p2 == p1 && p3 == p1) + + try Promise<Void> { seal in + firstly { + initial.opStringIntDictAsync(["1": 1, "2": 2]) + }.done { p2, p3 in + try test(p2 == p1 && p3 == p1) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + (p2, p3) = try initial.opStringIntDict(nil) + try test(p2 == nil && p3 == nil) // Ensure out parameter is cleared. + + var ostr = Ice.OutputStream(communicator: communicator) + ostr.startEncapsulation() + StringIntDictHelper.write(to: ostr, tag: 2, value: p1) + ostr.endEncapsulation() + var inEncaps = ostr.finished() + let result = try initial.ice_invoke(operation: "opStringIntDict", mode: .Normal, inEncaps: inEncaps) + var istr = Ice.InputStream(communicator: communicator, bytes: result.outEncaps) + _ = try istr.startEncapsulation() + try test(StringIntDictHelper.read(from: istr, tag: 1) == p1) + try test(StringIntDictHelper.read(from: istr, tag: 3) == p1) + try istr.endEncapsulation() + + istr = Ice.InputStream(communicator: communicator, bytes: result.outEncaps) + _ = try istr.startEncapsulation() + try istr.endEncapsulation() + + let f = F() + f.af = A() + f.af!.requiredA = 56 + f.ae = f.af + + ostr = Ice.OutputStream(communicator: communicator) + ostr.startEncapsulation() + ostr.write(tag: 1, value: f) + ostr.write(tag: 2, value: f.ae) + ostr.endEncapsulation() + inEncaps = ostr.finished() + + istr = Ice.InputStream(communicator: communicator, bytes: inEncaps) + _ = try istr.startEncapsulation() + var a: Value? + try istr.read(tag: 2) { a = $0 } + try istr.endEncapsulation() + try test(a != nil && (a as! A).requiredA == 56) + } + + do { + var p1: [Int32: OneOptional?]? + var p2: [Int32: OneOptional?]? + var p3: [Int32: OneOptional?]? + + (p2, p3) = try initial.opIntOneOptionalDict(p1) + try test(p2 == nil && p3 == nil) + + (p2, p3) = try initial.opIntOneOptionalDict(nil) + try test(p2 == nil && p3 == nil) + + (p2, p3) = try initial.opIntOneOptionalDict() + try test(p2 == nil && p3 == nil) + + try Promise<Void> { seal in + firstly { + initial.opIntOneOptionalDictAsync(nil) + }.done { p2, p3 in + try test(p2 == nil && p3 == nil) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + try Promise<Void> { seal in + firstly { + initial.opIntOneOptionalDictAsync(nil) + }.done { p2, p3 in + try test(p2 == nil && p3 == nil) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + p1 = [1: OneOptional(a: 58), 2: OneOptional(a: 59)] + (p2, p3) = try initial.opIntOneOptionalDict(p1) + try test(p2![1]!!.a == 58 && p3![1]!!.a == 58) + + try Promise<Void> { seal in + firstly { + initial.opIntOneOptionalDictAsync(p1) + }.done { p2, p3 in + try test(p2![1]!!.a == 58 && p3![1]!!.a == 58) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + (p2, p3) = try initial.opIntOneOptionalDict([1: OneOptional(a: 58), 2: OneOptional(a: 59)]) + try test(p2![1]!!.a == 58 && p3![1]!!.a == 58) + + try Promise<Void> { seal in + firstly { + initial.opIntOneOptionalDictAsync([1: OneOptional(a: 58), 2: OneOptional(a: 59)]) + }.done { p2, p3 in + try test(p2![1]!!.a == 58 && p3![1]!!.a == 58) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + (p2, p3) = try initial.opIntOneOptionalDict(nil) + try test(p2 == nil && p3 == nil) // Ensure out parameter is cleared. + + let ostr = Ice.OutputStream(communicator: communicator) + ostr.startEncapsulation() + IntOneOptionalDictHelper.write(to: ostr, tag: 2, value: p1) + ostr.endEncapsulation() + let inEncaps = ostr.finished() + let result = try initial.ice_invoke(operation: "opIntOneOptionalDict", mode: .Normal, inEncaps: inEncaps) + var istr = Ice.InputStream(communicator: communicator, bytes: result.outEncaps) + _ = try istr.startEncapsulation() + p2 = try IntOneOptionalDictHelper.read(from: istr, tag: 1) + try test(p2![1]!!.a == 58) + p3 = try IntOneOptionalDictHelper.read(from: istr, tag: 3) + try test(p3![1]!!.a == 58) + try istr.endEncapsulation() + + istr = Ice.InputStream(communicator: communicator, bytes: result.outEncaps) + _ = try istr.startEncapsulation() + try istr.endEncapsulation() + } + output.writeLine("ok") + + output.write("testing exception optionals... ") + do { + try initial.opOptionalException(a: nil, b: nil, o: nil) + } catch let ex as OptionalException { + try test(ex.a == nil) + try test(ex.b == nil) + try test(ex.o == nil) + } + + do { + try initial.opOptionalException(o: nil) + } catch let ex as OptionalException { + try test(ex.a == nil) + try test(ex.b == nil) + try test(ex.o == nil) + } + + do { + try initial.opOptionalException(b: nil) + } catch let ex as OptionalException { + try test(ex.a == nil) + try test(ex.b == nil) + try test(ex.o == nil) + } + + do { + try initial.opOptionalException() + } catch let ex as OptionalException { + try test(ex.a == nil) + try test(ex.b == nil) + try test(ex.o == nil) + } + + do { + try initial.opOptionalException(a: 30, b: "test", o: OneOptional(a: 53)) + } catch let ex as OptionalException { + try test(ex.a == 30) + try test(ex.b == "test") + try test(ex.o!.a == 53) + } + + do { + // + // Use the 1.0 encoding with an exception whose only class members are optional. + // + let initial2 = initial.ice_encodingVersion(Ice.Encoding_1_0) + try initial2.opOptionalException(a: 30, b: "test", o: OneOptional(a: 53)) + } catch let ex as OptionalException { + try test(ex.a == nil) + try test(ex.b == nil) + try test(ex.o == nil) + } + + do { + try initial.opDerivedException(a: nil, b: nil, o: nil) + } catch let ex as DerivedException { + try test(ex.a == nil) + try test(ex.b == nil) + try test(ex.o == nil) + try test(ex.ss == nil) + try test(ex.o2 == nil) + } + + do { + try initial.opDerivedException(a: 30, b: "test2", o: OneOptional(a: 53)) + } catch let ex as DerivedException { + try test(ex.a == 30) + try test(ex.b == "test2") + try test(ex.o!.a == 53) + try test(ex.ss == "test2") + try test(ex.o2!.a == 53) + } + + do { + try initial.opRequiredException(a: nil, b: nil, o: nil) + } catch let ex as RequiredException { + try test(ex.a == nil) + try test(ex.b == nil) + try test(ex.o == nil) + try test(ex.ss == "test") + try test(ex.o2 == nil) + } + + do { + try initial.opRequiredException(b: nil) + } catch let ex as RequiredException { + try test(ex.a == nil) + try test(ex.b == nil) + try test(ex.o == nil) + try test(ex.ss == "test") + try test(ex.o2 == nil) + } + + do { + try initial.opRequiredException(o: nil) + } catch let ex as RequiredException { + try test(ex.a == nil) + try test(ex.b == nil) + try test(ex.o == nil) + try test(ex.ss == "test") + try test(ex.o2 == nil) + } + + do { + try initial.opRequiredException() + } catch let ex as RequiredException { + try test(ex.a == nil) + try test(ex.b == nil) + try test(ex.o == nil) + try test(ex.ss == "test") + try test(ex.o2 == nil) + } + + do { + try initial.opRequiredException(a: 30, b: "test2", o: OneOptional(a: 53)) + } catch let ex as RequiredException { + try test(ex.a == 30) + try test(ex.b == "test2") + try test(ex.o!.a == 53) + try test(ex.ss == "test2") + try test(ex.o2!.a == 53) + } + output.writeLine("ok") + + return initial +} diff --git a/swift/test/Ice/optional/Client.swift b/swift/test/Ice/optional/Client.swift new file mode 100644 index 00000000000..0abdd0b94d3 --- /dev/null +++ b/swift/test/Ice/optional/Client.swift @@ -0,0 +1,21 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import TestCommon + +public class Client: TestHelperI { + public override func run(args: [String]) throws { + let properties = try createTestProperties(args) + var initData = Ice.InitializationData() + initData.properties = properties + initData.classResolverPrefix = ["IceOptional"] + let communicator = try initialize(initData) + defer { + communicator.destroy() + } + let initial = try allTests(self) + try initial.shutdown() + } +} diff --git a/swift/test/Ice/optional/Server.swift b/swift/test/Ice/optional/Server.swift new file mode 100644 index 00000000000..0aedb17b402 --- /dev/null +++ b/swift/test/Ice/optional/Server.swift @@ -0,0 +1,27 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import TestCommon + +class Server: TestHelperI { + public override func run(args: [String]) throws { + let properties = try createTestProperties(args) + + var initData = Ice.InitializationData() + initData.properties = properties + initData.classResolverPrefix = ["IceOptional"] + let communicator = try initialize(initData) + defer { + communicator.destroy() + } + + communicator.getProperties().setProperty(key: "TestAdapter.Endpoints", value: getTestEndpoint(num: 0)) + let adapter = try communicator.createObjectAdapter("TestAdapter") + try adapter.add(servant: InitialDisp(InitialI()), id: Ice.stringToIdentity("initial")) + try adapter.activate() + serverReady() + communicator.waitForShutdown() + } +} diff --git a/swift/test/Ice/optional/ServerAMD.swift b/swift/test/Ice/optional/ServerAMD.swift new file mode 100644 index 00000000000..39e8e1bfb90 --- /dev/null +++ b/swift/test/Ice/optional/ServerAMD.swift @@ -0,0 +1,27 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import TestCommon + +class ServerAMD: TestHelperI { + public override func run(args: [String]) throws { + let properties = try createTestProperties(args) + + var initData = Ice.InitializationData() + initData.properties = properties + initData.classResolverPrefix = ["IceOptionalAMD"] + let communicator = try initialize(initData) + defer { + communicator.destroy() + } + + communicator.getProperties().setProperty(key: "TestAdapter.Endpoints", value: getTestEndpoint(num: 0)) + let adapter = try communicator.createObjectAdapter("TestAdapter") + try adapter.add(servant: InitialDisp(InitialI()), id: Ice.stringToIdentity("initial")) + try adapter.activate() + serverReady() + communicator.waitForShutdown() + } +} diff --git a/swift/test/Ice/optional/Test.ice b/swift/test/Ice/optional/Test.ice new file mode 100644 index 00000000000..463798e1315 --- /dev/null +++ b/swift/test/Ice/optional/Test.ice @@ -0,0 +1,336 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#pragma once + +[["swift:class-resolver-prefix:IceOptional", + "suppress-warning:deprecated"]] + +module Test +{ + +class OneOptional +{ + optional(1) int a; +} + +enum MyEnum +{ + MyEnumMember +} + +struct SmallStruct +{ + byte m; +} + +struct FixedStruct +{ + int m; +} + +struct VarStruct +{ + string m; +} + +struct ClassVarStruct +{ + int a; +} + +sequence<byte> ByteSeq; +sequence<bool> BoolSeq; +sequence<short> ShortSeq; +sequence<int> IntSeq; +sequence<long> LongSeq; +sequence<float> FloatSeq; +sequence<double> DoubleSeq; +sequence<string> StringSeq; +sequence<MyEnum> MyEnumSeq; +sequence<SmallStruct> SmallStructSeq; +sequence<SmallStruct> SmallStructList; +sequence<FixedStruct> FixedStructSeq; +sequence<FixedStruct> FixedStructList; +sequence<VarStruct> VarStructSeq; +sequence<OneOptional> OneOptionalSeq; +sequence<OneOptional*> OneOptionalPrxSeq; + +sequence<byte> Serializable; + +dictionary<int, int> IntIntDict; +dictionary<string, int> StringIntDict; +dictionary<int, MyEnum> IntEnumDict; +dictionary<int, FixedStruct> IntFixedStructDict; +dictionary<int, VarStruct> IntVarStructDict; +dictionary<int, OneOptional> IntOneOptionalDict; +dictionary<int, OneOptional*> IntOneOptionalPrxDict; + +dictionary<int, string> IntStringDict; + +class MultiOptional +{ + optional(1) byte a; + optional(2) bool b; + optional(3) short c; + optional(4) int d; + optional(5) long e; + optional(6) float f; + optional(7) double g; + optional(8) string h; + optional(9) MyEnum i; + optional(10) MultiOptional* j; + optional(11) MultiOptional k; + optional(12) ByteSeq bs; + optional(13) StringSeq ss; + optional(14) IntIntDict iid; + optional(15) StringIntDict sid; + optional(16) FixedStruct fs; + optional(17) VarStruct vs; + + optional(18) ShortSeq shs; + optional(19) MyEnumSeq es; + optional(20) FixedStructSeq fss; + optional(21) VarStructSeq vss; + optional(22) OneOptionalSeq oos; + optional(23) OneOptionalPrxSeq oops; + + optional(24) IntEnumDict ied; + optional(25) IntFixedStructDict ifsd; + optional(26) IntVarStructDict ivsd; + optional(27) IntOneOptionalDict iood; + optional(28) IntOneOptionalPrxDict ioopd; + + optional(29) BoolSeq bos; + + optional(30) Serializable ser; +} + +class A +{ + int requiredA = 0; + optional(1) int ma; + optional(50) int mb; + optional(500) int mc; +} + +["preserve-slice"] +class B extends A +{ + int requiredB = 0; + optional(10) int md; +} + +class C extends B +{ + string ss; + optional(890) string ms; +} + +class WD +{ + optional(1) int a = 5; + optional(2) string s = "test"; +} + +exception OptionalException +{ + bool req = false; + optional(1) int a = 5; + optional(2) string b; + optional(50) OneOptional o; +} + +exception DerivedException extends OptionalException +{ + optional(600) string ss = "test"; + optional(601) OneOptional o2; +} + +exception RequiredException extends OptionalException +{ + string ss = "test"; + OneOptional o2; +} + +class OptionalWithCustom +{ + optional(1) SmallStructList l; + ["protected"] optional(2) SmallStructList lp; + optional(3) ClassVarStruct s; +} + +class E +{ + A ae; +} + +class F extends E +{ + optional(1) A af; +} + +class G1 +{ + string a; +} + +class G2 +{ + long a; +} + +class G +{ + optional(1) G1 gg1Opt; + G2 gg2; + optional(0) G2 gg2Opt; + G1 gg1; +} + +class Recursive; +sequence<Recursive> RecursiveSeq; + +class Recursive +{ + optional(0) RecursiveSeq value; +} + +interface Initial +{ + void shutdown(); + + ["marshaled-result"] Object pingPong(Object o); + + void opOptionalException(optional(1) int a, optional(2) string b, optional(3) OneOptional o) + throws OptionalException; + + void opDerivedException(optional(1) int a, optional(2) string b, optional(3) OneOptional o) + throws OptionalException; + + void opRequiredException(optional(1) int a, optional(2) string b, optional(3) OneOptional o) + throws OptionalException; + + optional(1) byte opByte(optional(2) byte p1, out optional(3) byte p3); + + optional(1) bool opBool(optional(2) bool p1, out optional(3) bool p3); + + optional(1) short opShort(optional(2) short p1, out optional(3) short p3); + + optional(1) int opInt(optional(2) int p1, out optional(3) int p3); + + optional(3) long opLong(optional(1) long p1, out optional(2) long p3); + + optional(1) float opFloat(optional(2) float p1, out optional(3) float p3); + + optional(1) double opDouble(optional(2) double p1, out optional(3) double p3); + + optional(1) string opString(optional(2) string p1, out optional(3) string p3); + + ["cpp:view-type:Util::string_view"] optional(1) string + opCustomString(["cpp:view-type:Util::string_view"] optional(2) string p1, + out ["cpp:view-type:Util::string_view"] optional(3) string p3); + + optional(1) MyEnum opMyEnum(optional(2) MyEnum p1, out optional(3) MyEnum p3); + + optional(1) SmallStruct opSmallStruct(optional(2) SmallStruct p1, out optional(3) SmallStruct p3); + + optional(1) FixedStruct opFixedStruct(optional(2) FixedStruct p1, out optional(3) FixedStruct p3); + + optional(1) VarStruct opVarStruct(optional(2) VarStruct p1, out optional(3) VarStruct p3); + + optional(1) OneOptional opOneOptional(optional(2) OneOptional p1, out optional(3) OneOptional p3); + + optional(1) OneOptional* opOneOptionalProxy(optional(2) OneOptional* p1, out optional(3) OneOptional* p3); + + // Custom mapping operations + ["cpp:array"] optional(1) ByteSeq opByteSeq(["cpp:array"] optional(2) ByteSeq p1, + out ["cpp:array"] optional(3) ByteSeq p3); + + ["cpp:array"] optional(1) BoolSeq opBoolSeq(["cpp:array"] optional(2) BoolSeq p1, + out ["cpp:array"] optional(3) BoolSeq p3); + + ["cpp:array"] optional(1) ShortSeq opShortSeq(["cpp:array"] optional(2) ShortSeq p1, + out ["cpp:array"] optional(3) ShortSeq p3); + + ["cpp:array"] optional(1) IntSeq opIntSeq(["cpp:array"] optional(2) IntSeq p1, + out ["cpp:array"] optional(3) IntSeq p3); + + ["cpp:array"] optional(1) LongSeq opLongSeq(["cpp:array"] optional(2) LongSeq p1, + out ["cpp:array"] optional(3) LongSeq p3); + + ["cpp:array"] optional(1) FloatSeq opFloatSeq(["cpp:array"] optional(2) FloatSeq p1, + out ["cpp:array"] optional(3) FloatSeq p3); + + ["cpp:array"] optional(1) DoubleSeq opDoubleSeq(["cpp:array"] optional(2) DoubleSeq p1, + out ["cpp:array"] optional(3) DoubleSeq p3); + + ["cpp:range"] optional(1) StringSeq opStringSeq(["cpp:range"] optional(2) StringSeq p1, + out ["cpp:range"] optional(3) StringSeq p3); + + ["cpp:array"] optional(1) SmallStructSeq opSmallStructSeq(["cpp:array"] optional(2) SmallStructSeq p1, + out ["cpp:array"] optional(3) SmallStructSeq p3); + + ["cpp:array"] optional(1) SmallStructList opSmallStructList(["cpp:array"] optional(2) SmallStructList p1, + out ["cpp:array"] optional(3) SmallStructList p3); + + ["cpp:array"] optional(1) FixedStructSeq opFixedStructSeq(["cpp:array"] optional(2) FixedStructSeq p1, + out ["cpp:array"] optional(3) FixedStructSeq p3); + + ["cpp:array"] optional(1) FixedStructList opFixedStructList(["cpp:array"] optional(2) FixedStructList p1, + out ["cpp:array"] optional(3) FixedStructList p3); + + ["cpp:range"] optional(1) VarStructSeq opVarStructSeq(["cpp:range"] optional(2) VarStructSeq p1, + out ["cpp:range"] optional(3) VarStructSeq p3); + + optional(1) Serializable opSerializable(optional(2) Serializable p1, out optional(3) Serializable p3); + + optional(1) IntIntDict opIntIntDict(optional(2) IntIntDict p1, out optional(3) IntIntDict p3); + + optional(1) StringIntDict opStringIntDict(optional(2) StringIntDict p1, out optional(3) StringIntDict p3); + + ["cpp:view-type:::std::map< ::Ice::Int, ::Util::string_view>", "cpp:type:::Test::CustomMap< ::Ice::Int, std::string>"] optional(1) IntStringDict + opCustomIntStringDict( + ["cpp:view-type:::std::map< ::Ice::Int, ::Util::string_view>", "cpp:type:::Test::CustomMap< ::Ice::Int, std::string>"] optional(2) IntStringDict p1, + out ["cpp:view-type:::std::map< ::Ice::Int, ::Util::string_view>", "cpp:type:::Test::CustomMap< ::Ice::Int, std::string>"] optional(3) IntStringDict p3); + + optional(1) IntOneOptionalDict opIntOneOptionalDict(optional(2) IntOneOptionalDict p1, out optional(3) IntOneOptionalDict p3); + + void opClassAndUnknownOptional(A p); + + void sendOptionalClass(bool req, optional(1) OneOptional o); + + void returnOptionalClass(bool req, out optional(1) OneOptional o); + + G opG(G g); + + void opVoid(); + + ["marshaled-result"] optional(1) SmallStruct opMStruct1(); + ["marshaled-result"] optional(1) SmallStruct opMStruct2(optional(2) SmallStruct p1, + out optional(3)SmallStruct p2); + + ["marshaled-result"] optional(1) StringSeq opMSeq1(); + ["marshaled-result"] optional(1) StringSeq opMSeq2(optional(2) StringSeq p1, + out optional(3) StringSeq p2); + + ["marshaled-result"] optional(1) StringIntDict opMDict1(); + ["marshaled-result"] optional(1) StringIntDict opMDict2(optional(2) StringIntDict p1, + out optional(3) StringIntDict p2); + + ["marshaled-result"] optional(1) G opMG1(); + ["marshaled-result"] optional(1) G opMG2(optional(2) G p1, out optional(3) G p2); + + bool supportsRequiredParams(); + + bool supportsJavaSerializable(); + + bool supportsCsharpSerializable(); + + bool supportsCppStringView(); + + bool supportsNullOptional(); +} + +} diff --git a/swift/test/Ice/optional/TestAMD.ice b/swift/test/Ice/optional/TestAMD.ice new file mode 100644 index 00000000000..fa28bfc08fc --- /dev/null +++ b/swift/test/Ice/optional/TestAMD.ice @@ -0,0 +1,315 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#pragma once + +[["swift:class-resolver-prefix:IceOptionalAMD", + "suppress-warning:deprecated"]] + +module Test +{ + +class OneOptional +{ + optional(1) int a; +} + +enum MyEnum +{ + MyEnumMember +} + +struct SmallStruct +{ + byte m; +} + +struct FixedStruct +{ + int m; +} + +struct VarStruct +{ + string m; +} + +["clr:class"] +struct ClassVarStruct +{ + int a; +} + +sequence<byte> ByteSeq; +sequence<bool> BoolSeq; +sequence<short> ShortSeq; +sequence<int> IntSeq; +sequence<long> LongSeq; +sequence<float> FloatSeq; +sequence<double> DoubleSeq; +sequence<string> StringSeq; +sequence<MyEnum> MyEnumSeq; +sequence<SmallStruct> SmallStructSeq; +["clr:generic:List"] sequence<SmallStruct> SmallStructList; +sequence<FixedStruct> FixedStructSeq; +["clr:generic:LinkedList"] sequence<FixedStruct> FixedStructList; +sequence<VarStruct> VarStructSeq; +sequence<OneOptional> OneOptionalSeq; +sequence<OneOptional*> OneOptionalPrxSeq; + +["clr:serializable:Ice.optional.Test.SerializableClass"] +sequence<byte> Serializable; + +dictionary<int, int> IntIntDict; +dictionary<string, int> StringIntDict; +dictionary<int, MyEnum> IntEnumDict; +dictionary<int, FixedStruct> IntFixedStructDict; +dictionary<int, VarStruct> IntVarStructDict; +dictionary<int, OneOptional> IntOneOptionalDict; +dictionary<int, OneOptional*> IntOneOptionalPrxDict; + +class MultiOptional +{ + optional(1) byte a; + optional(2) bool b; + optional(3) short c; + optional(4) int d; + optional(5) long e; + optional(6) float f; + optional(7) double g; + optional(8) string h; + optional(9) MyEnum i; + optional(10) MultiOptional* j; + optional(11) MultiOptional k; + optional(12) ByteSeq bs; + optional(13) StringSeq ss; + optional(14) IntIntDict iid; + optional(15) StringIntDict sid; + optional(16) FixedStruct fs; + optional(17) VarStruct vs; + + optional(18) ShortSeq shs; + optional(19) MyEnumSeq es; + optional(20) FixedStructSeq fss; + optional(21) VarStructSeq vss; + optional(22) OneOptionalSeq oos; + optional(23) OneOptionalPrxSeq oops; + + optional(24) IntEnumDict ied; + optional(25) IntFixedStructDict ifsd; + optional(26) IntVarStructDict ivsd; + optional(27) IntOneOptionalDict iood; + optional(28) IntOneOptionalPrxDict ioopd; + + optional(29) BoolSeq bos; + + optional(30) Serializable ser; +} + +class A +{ + int requiredA; + optional(1) int ma; + optional(50) int mb; + optional(500) int mc; +} + +["preserve-slice"] +class B extends A +{ + int requiredB; + optional(10) int md; +} + +class C extends B +{ + string ss; + optional(890) string ms; +} + +class WD +{ + optional(1) int a = 5; + optional(2) string s = "test"; +} + +exception OptionalException +{ + bool req = false; + optional(1) int a = 5; + optional(2) string b; + optional(50) OneOptional o; +} + +exception DerivedException extends OptionalException +{ + optional(600) string ss = "test"; + optional(601) OneOptional o2; +} + +exception RequiredException extends OptionalException +{ + string ss = "test"; + OneOptional o2; +} + +["clr:property"] +class OptionalWithCustom +{ + optional(1) SmallStructList l; + ["protected"] optional(2) SmallStructList lp; + optional(3) ClassVarStruct s; +} + +class E +{ + A ae; +} + +class F extends E +{ + optional(1) A af; +} + +class G1 +{ + string a; +} + +class G2 +{ + long a; +} + +class G +{ + optional(1) G1 gg1Opt; + G2 gg2; + optional(0) G2 gg2Opt; + G1 gg1; +} + +class Recursive; +sequence<Recursive> RecursiveSeq; + +class Recursive { + optional(0) RecursiveSeq value; +} + +["amd"] +interface Initial +{ + void shutdown(); + + Object pingPong(Object o); + + void opOptionalException(optional(1) int a, optional(2) string b, optional(3) OneOptional o) + throws OptionalException; + + void opDerivedException(optional(1) int a, optional(2) string b, optional(3) OneOptional o) + throws OptionalException; + + void opRequiredException(optional(1) int a, optional(2) string b, optional(3) OneOptional o) + throws OptionalException; + + optional(1) byte opByte(optional(2) byte p1, out optional(3) byte p3); + + optional(1) bool opBool(optional(2) bool p1, out optional(3) bool p3); + + optional(1) short opShort(optional(2) short p1, out optional(3) short p3); + + optional(1) int opInt(optional(2) int p1, out optional(3) int p3); + + optional(3) long opLong(optional(1) long p1, out optional(2) long p3); + + optional(1) float opFloat(optional(2) float p1, out optional(3) float p3); + + optional(1) double opDouble(optional(2) double p1, out optional(3) double p3); + + optional(1) string opString(optional(2) string p1, out optional(3) string p3); + + optional(1) MyEnum opMyEnum(optional(2) MyEnum p1, out optional(3) MyEnum p3); + + optional(1) SmallStruct opSmallStruct(optional(2) SmallStruct p1, out optional(3) SmallStruct p3); + + optional(1) FixedStruct opFixedStruct(optional(2) FixedStruct p1, out optional(3) FixedStruct p3); + + optional(1) VarStruct opVarStruct(optional(2) VarStruct p1, out optional(3) VarStruct p3); + + optional(1) OneOptional opOneOptional(optional(2) OneOptional p1, out optional(3) OneOptional p3); + + optional(1) OneOptional* opOneOptionalProxy(optional(2) OneOptional* p1, out optional(3) OneOptional* p3); + + optional(1) ByteSeq opByteSeq(optional(2) ByteSeq p1, out optional(3) ByteSeq p3); + + optional(1) BoolSeq opBoolSeq(optional(2) BoolSeq p1, out optional(3) BoolSeq p3); + + optional(1) ShortSeq opShortSeq(optional(2) ShortSeq p1, out optional(3) ShortSeq p3); + + optional(1) IntSeq opIntSeq(optional(2) IntSeq p1, out optional(3) IntSeq p3); + + optional(1) LongSeq opLongSeq(optional(2) LongSeq p1, out optional(3) LongSeq p3); + + optional(1) FloatSeq opFloatSeq(optional(2) FloatSeq p1, out optional(3) FloatSeq p3); + + optional(1) DoubleSeq opDoubleSeq(optional(2) DoubleSeq p1, out optional(3) DoubleSeq p3); + + optional(1) StringSeq opStringSeq(optional(2) StringSeq p1, out optional(3) StringSeq p3); + + optional(1) SmallStructSeq opSmallStructSeq(optional(2) SmallStructSeq p1, out optional(3) SmallStructSeq p3); + + optional(1) SmallStructList opSmallStructList(optional(2) SmallStructList p1, out optional(3) SmallStructList p3); + + optional(1) FixedStructSeq opFixedStructSeq(optional(2) FixedStructSeq p1, out optional(3) FixedStructSeq p3); + + optional(1) FixedStructList opFixedStructList(optional(2) FixedStructList p1, out optional(3) FixedStructList p3); + + optional(1) VarStructSeq opVarStructSeq(optional(2) VarStructSeq p1, out optional(3) VarStructSeq p3); + + optional(1) Serializable opSerializable(optional(2) Serializable p1, out optional(3) Serializable p3); + + optional(1) IntIntDict opIntIntDict(optional(2) IntIntDict p1, out optional(3) IntIntDict p3); + + optional(1) StringIntDict opStringIntDict(optional(2) StringIntDict p1, out optional(3) StringIntDict p3); + + optional(1) IntOneOptionalDict opIntOneOptionalDict(optional(2) IntOneOptionalDict p1, + out optional(3) IntOneOptionalDict p3); + + void opClassAndUnknownOptional(A p); + + void sendOptionalClass(bool req, optional(1) OneOptional o); + + void returnOptionalClass(bool req, out optional(1) OneOptional o); + + G opG(G g); + + void opVoid(); + + ["marshaled-result"] optional(1) SmallStruct opMStruct1(); + ["marshaled-result"] optional(1) SmallStruct opMStruct2(optional(2) SmallStruct p1, + out optional(3)SmallStruct p2); + + ["marshaled-result"] optional(1) StringSeq opMSeq1(); + ["marshaled-result"] optional(1) StringSeq opMSeq2(optional(2) StringSeq p1, + out optional(3) StringSeq p2); + + ["marshaled-result"] optional(1) StringIntDict opMDict1(); + ["marshaled-result"] optional(1) StringIntDict opMDict2(optional(2) StringIntDict p1, + out optional(3) StringIntDict p2); + + ["marshaled-result"] optional(1) G opMG1(); + ["marshaled-result"] optional(1) G opMG2(optional(2) G p1, out optional(3) G p2); + + bool supportsRequiredParams(); + + bool supportsJavaSerializable(); + + bool supportsCsharpSerializable(); + + bool supportsCppStringView(); + + bool supportsNullOptional(); +} + +} diff --git a/swift/test/Ice/optional/TestAMDI.swift b/swift/test/Ice/optional/TestAMDI.swift new file mode 100644 index 00000000000..677db51b09c --- /dev/null +++ b/swift/test/Ice/optional/TestAMDI.swift @@ -0,0 +1,260 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Foundation +import Ice +import PromiseKit +import TestCommon + +class InitialI: Initial { + func shutdownAsync(current: Current) -> Promise<Void> { + return Promise<Void> { seal in + current.adapter!.getCommunicator().shutdown() + seal.fulfill(()) + } + } + + func pingPongAsync(o: Value?, current _: Current) -> Promise<Value?> { + return Promise.value(o) + } + + func opOptionalExceptionAsync(a: Int32?, b: String?, o: OneOptional?, current _: Current) -> Promise<Void> { + return Promise { seal in + seal.reject(OptionalException(req: false, a: a, b: b, o: o)) + } + } + + func opDerivedExceptionAsync(a: Int32?, b: String?, o: OneOptional?, current _: Current) -> Promise<Void> { + return Promise { seal in + seal.reject(DerivedException(req: false, a: a, b: b, o: o, ss: b, o2: o)) + } + } + + func opRequiredExceptionAsync(a: Int32?, b: String?, o: OneOptional?, current _: Current) -> Promise<Void> { + return Promise { seal in + let e = RequiredException() + e.a = a + e.b = b + e.o = o + if let b = b { + e.ss = b + } + e.o2 = o + + seal.reject(e) + } + } + + func opByteAsync(p1: UInt8?, current _: Current) -> Promise<(returnValue: UInt8?, p3: UInt8?)> { + return Promise.value((p1, p1)) + } + + func opBoolAsync(p1: Bool?, current _: Current) -> Promise<(returnValue: Bool?, p3: Bool?)> { + return Promise.value((p1, p1)) + } + + func opShortAsync(p1: Int16?, current _: Current) -> Promise<(returnValue: Int16?, p3: Int16?)> { + return Promise.value((p1, p1)) + } + + func opIntAsync(p1: Int32?, current _: Current) -> Promise<(returnValue: Int32?, p3: Int32?)> { + return Promise.value((p1, p1)) + } + + func opLongAsync(p1: Int64?, current _: Current) -> Promise<(returnValue: Int64?, p3: Int64?)> { + return Promise.value((p1, p1)) + } + + func opFloatAsync(p1: Float?, current _: Current) -> Promise<(returnValue: Float?, p3: Float?)> { + return Promise.value((p1, p1)) + } + + func opDoubleAsync(p1: Double?, current _: Current) -> Promise<(returnValue: Double?, p3: Double?)> { + return Promise.value((p1, p1)) + } + + func opStringAsync(p1: String?, current _: Current) -> Promise<(returnValue: String?, p3: String?)> { + return Promise.value((p1, p1)) + } + + func opMyEnumAsync(p1: MyEnum?, current _: Current) -> Promise<(returnValue: MyEnum?, p3: MyEnum?)> { + return Promise.value((p1, p1)) + } + + func opSmallStructAsync(p1: SmallStruct?, + current _: Current) -> Promise<(returnValue: SmallStruct?, p3: SmallStruct?)> { + return Promise.value((p1, p1)) + } + + func opFixedStructAsync(p1: FixedStruct?, + current _: Current) -> Promise<(returnValue: FixedStruct?, p3: FixedStruct?)> { + return Promise.value((p1, p1)) + } + + func opVarStructAsync(p1: VarStruct?, current _: Current) -> Promise<(returnValue: VarStruct?, p3: VarStruct?)> { + return Promise.value((p1, p1)) + } + + func opOneOptionalAsync(p1: OneOptional?, + current _: Current) -> Promise<(returnValue: OneOptional?, p3: OneOptional?)> { + return Promise.value((p1, p1)) + } + + func opOneOptionalProxyAsync(p1: ObjectPrx?, + current _: Current) -> Promise<(returnValue: ObjectPrx?, p3: ObjectPrx?)> { + return Promise.value((p1, p1)) + } + + func opByteSeqAsync(p1: ByteSeq?, current _: Current) -> Promise<(returnValue: ByteSeq?, p3: ByteSeq?)> { + return Promise.value((p1, p1)) + } + + func opBoolSeqAsync(p1: BoolSeq?, current _: Current) -> Promise<(returnValue: BoolSeq?, p3: BoolSeq?)> { + return Promise.value((p1, p1)) + } + + func opShortSeqAsync(p1: ShortSeq?, current _: Current) -> Promise<(returnValue: ShortSeq?, p3: ShortSeq?)> { + return Promise.value((p1, p1)) + } + + func opIntSeqAsync(p1: IntSeq?, current _: Current) -> Promise<(returnValue: IntSeq?, p3: IntSeq?)> { + return Promise.value((p1, p1)) + } + + func opLongSeqAsync(p1: LongSeq?, current _: Current) -> Promise<(returnValue: LongSeq?, p3: LongSeq?)> { + return Promise.value((p1, p1)) + } + + func opFloatSeqAsync(p1: FloatSeq?, current _: Current) -> Promise<(returnValue: FloatSeq?, p3: FloatSeq?)> { + return Promise.value((p1, p1)) + } + + func opDoubleSeqAsync(p1: DoubleSeq?, current _: Current) -> Promise<(returnValue: DoubleSeq?, p3: DoubleSeq?)> { + return Promise.value((p1, p1)) + } + + func opStringSeqAsync(p1: StringSeq?, current _: Current) -> Promise<(returnValue: StringSeq?, p3: StringSeq?)> { + return Promise.value((p1, p1)) + } + + func opSmallStructSeqAsync(p1: SmallStructSeq?, + current _: Current) -> Promise<(returnValue: SmallStructSeq?, p3: SmallStructSeq?)> { + return Promise.value((p1, p1)) + } + + func opSmallStructListAsync(p1: SmallStructList?, + current _: Current) -> Promise<(returnValue: SmallStructList?, p3: SmallStructList?)> { + return Promise.value((p1, p1)) + } + + func opFixedStructSeqAsync(p1: FixedStructSeq?, + current _: Current) -> Promise<(returnValue: FixedStructSeq?, p3: FixedStructSeq?)> { + return Promise.value((p1, p1)) + } + + func opFixedStructListAsync(p1: FixedStructList?, + current _: Current) -> Promise<(returnValue: FixedStructList?, p3: FixedStructList?)> { + return Promise.value((p1, p1)) + } + + func opVarStructSeqAsync(p1: VarStructSeq?, + current _: Current) -> Promise<(returnValue: VarStructSeq?, p3: VarStructSeq?)> { + return Promise.value((p1, p1)) + } + + func opSerializableAsync(p1: Serializable?, + current _: Current) -> Promise<(returnValue: Serializable?, p3: Serializable?)> { + return Promise.value((p1, p1)) + } + + func opIntIntDictAsync(p1: IntIntDict?, current _: Current) -> Promise<(returnValue: IntIntDict?, + p3: IntIntDict?)> { + return Promise.value((p1, p1)) + } + + func opStringIntDictAsync(p1: StringIntDict?, + current _: Current) -> Promise<(returnValue: StringIntDict?, p3: StringIntDict?)> { + return Promise.value((p1, p1)) + } + + func opIntOneOptionalDictAsync(p1: IntOneOptionalDict?, + current _: Current) -> Promise<(returnValue: IntOneOptionalDict?, + p3: IntOneOptionalDict?)> { + return Promise.value((p1, p1)) + } + + func opClassAndUnknownOptionalAsync(p _: A?, current _: Current) -> Promise<Void> { + return Promise.value(()) + } + + func sendOptionalClassAsync(req _: Bool, o _: OneOptional?, current _: Current) -> Promise<Void> { + return Promise.value(()) + } + + func returnOptionalClassAsync(req _: Bool, current _: Current) -> Promise<OneOptional?> { + return Promise.value(OneOptional()) + } + + func opGAsync(g: G?, current _: Current) -> Promise<G?> { + return Promise.value(g) + } + + func opVoidAsync(current _: Current) -> Promise<Void> { + return Promise.value(()) + } + + func opMStruct1Async(current _: Current) -> Promise<SmallStruct?> { + return Promise.value(SmallStruct()) + } + + func opMStruct2Async(p1: SmallStruct?, current _: Current) -> Promise<(returnValue: SmallStruct?, + p2: SmallStruct?)> { + return Promise.value((p1, p1)) + } + + func opMSeq1Async(current _: Current) -> Promise<StringSeq?> { + return Promise.value([]) + } + + func opMSeq2Async(p1: StringSeq?, current _: Current) -> Promise<(returnValue: StringSeq?, p2: StringSeq?)> { + return Promise.value((p1, p1)) + } + + func opMDict1Async(current _: Current) -> Promise<StringIntDict?> { + return Promise.value([:]) + } + + func opMDict2Async(p1: StringIntDict?, + current _: Current) -> Promise<(returnValue: StringIntDict?, p2: StringIntDict?)> { + return Promise.value((p1, p1)) + } + + func opMG1Async(current _: Current) -> Promise<G?> { + return Promise.value(G()) + } + + func opMG2Async(p1: G?, current _: Current) -> Promise<(returnValue: G?, p2: G?)> { + return Promise.value((p1, p1)) + } + + func supportsRequiredParamsAsync(current _: Current) -> Promise<Bool> { + return Promise.value(false) + } + + func supportsJavaSerializableAsync(current _: Current) -> Promise<Bool> { + return Promise.value(false) + } + + func supportsCsharpSerializableAsync(current _: Current) -> Promise<Bool> { + return Promise.value(false) + } + + func supportsCppStringViewAsync(current _: Current) -> Promise<Bool> { + return Promise.value(false) + } + + func supportsNullOptionalAsync(current _: Current) -> Promise<Bool> { + return Promise.value(false) + } +} diff --git a/swift/test/Ice/optional/TestI.swift b/swift/test/Ice/optional/TestI.swift new file mode 100644 index 00000000000..c57d4ee0168 --- /dev/null +++ b/swift/test/Ice/optional/TestI.swift @@ -0,0 +1,261 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Foundation +import Ice +import TestCommon + +class InitialI: Initial { + func shutdown(current: Ice.Current) throws { + current.adapter!.getCommunicator().shutdown() + } + + func pingPong(o: Ice.Value?, current _: Ice.Current) throws -> Ice.Value? { + return o + } + + func opOptionalException(a: Int32?, + b: String?, + o: OneOptional?, + current _: Ice.Current) throws { + throw OptionalException(req: false, a: a, b: b, o: o) + } + + func opDerivedException(a: Int32?, + b: String?, + o: OneOptional?, + current _: Ice.Current) throws { + throw DerivedException(req: false, a: a, b: b, o: o, ss: b, o2: o) + } + + func opRequiredException(a: Int32?, + b: String?, + o: OneOptional?, + current _: Ice.Current) throws { + let e = RequiredException() + e.a = a + e.b = b + e.o = o + if let b = b { + e.ss = b + } + e.o2 = o + throw e + } + + func opByte(p1: UInt8?, + current _: Ice.Current) throws -> (returnValue: UInt8?, p3: UInt8?) { + return (p1, p1) + } + + func opBool(p1: Bool?, current _: Ice.Current) throws -> (returnValue: Bool?, p3: Bool?) { + return (p1, p1) + } + + func opShort(p1: Int16?, current _: Ice.Current) throws -> (returnValue: Int16?, p3: Int16?) { + return (p1, p1) + } + + func opInt(p1: Int32?, current _: Ice.Current) throws -> (returnValue: Int32?, p3: Int32?) { + return (p1, p1) + } + + func opLong(p1: Int64?, current _: Ice.Current) throws -> (returnValue: Int64?, p3: Int64?) { + return (p1, p1) + } + + func opFloat(p1: Float?, current _: Ice.Current) throws -> (returnValue: Float?, p3: Float?) { + return (p1, p1) + } + + func opDouble(p1: Double?, current _: Ice.Current) throws -> (returnValue: Double?, p3: Double?) { + return (p1, p1) + } + + func opString(p1: String?, current _: Ice.Current) throws -> (returnValue: String?, p3: String?) { + return (p1, p1) + } + + func opCustomString(p1: String?, current _: Current) throws -> (returnValue: String?, p3: String?) { + return (p1, p1) + } + + func opMyEnum(p1: MyEnum?, current _: Ice.Current) throws -> (returnValue: MyEnum?, p3: MyEnum?) { + return (p1, p1) + } + + func opSmallStruct(p1: SmallStruct?, current _: Ice.Current) throws -> (returnValue: SmallStruct?, + p3: SmallStruct?) { + return (p1, p1) + } + + func opFixedStruct(p1: FixedStruct?, current _: Ice.Current) throws -> (returnValue: FixedStruct?, + p3: FixedStruct?) { + return (p1, p1) + } + + func opVarStruct(p1: VarStruct?, current _: Ice.Current) throws -> (returnValue: VarStruct?, p3: VarStruct?) { + return (p1, p1) + } + + func opOneOptional(p1: OneOptional?, current _: Ice.Current) throws -> (returnValue: OneOptional?, + p3: OneOptional?) { + return (p1, p1) + } + + func opOneOptionalProxy(p1: Ice.ObjectPrx?, current _: Ice.Current) throws -> (returnValue: Ice.ObjectPrx?, + p3: Ice.ObjectPrx?) { + return (p1, p1) + } + + func opByteSeq(p1: ByteSeq?, current _: Ice.Current) throws -> (returnValue: ByteSeq?, p3: ByteSeq?) { + return (p1, p1) + } + + func opBoolSeq(p1: BoolSeq?, current _: Ice.Current) throws -> (returnValue: BoolSeq?, p3: BoolSeq?) { + return (p1, p1) + } + + func opShortSeq(p1: ShortSeq?, current _: Ice.Current) throws -> (returnValue: ShortSeq?, p3: ShortSeq?) { + return (p1, p1) + } + + func opIntSeq(p1: IntSeq?, current _: Ice.Current) throws -> (returnValue: IntSeq?, p3: IntSeq?) { + return (p1, p1) + } + + func opLongSeq(p1: LongSeq?, current _: Ice.Current) throws -> (returnValue: LongSeq?, p3: LongSeq?) { + return (p1, p1) + } + + func opFloatSeq(p1: FloatSeq?, current _: Ice.Current) throws -> (returnValue: FloatSeq?, p3: FloatSeq?) { + return (p1, p1) + } + + func opDoubleSeq(p1: DoubleSeq?, current _: Ice.Current) throws -> (returnValue: DoubleSeq?, p3: DoubleSeq?) { + return (p1, p1) + } + + func opStringSeq(p1: StringSeq?, current _: Ice.Current) throws -> (returnValue: StringSeq?, + p3: StringSeq?) { + return (p1, p1) + } + + func opSmallStructSeq(p1: SmallStructSeq?, current _: Ice.Current) throws -> (returnValue: SmallStructSeq?, + p3: SmallStructSeq?) { + return (p1, p1) + } + + func opSmallStructList(p1: SmallStructList?, current _: Ice.Current) throws -> (returnValue: SmallStructList?, + p3: SmallStructList?) { + return (p1, p1) + } + + func opFixedStructSeq(p1: FixedStructSeq?, current _: Ice.Current) throws -> (returnValue: FixedStructSeq?, + p3: FixedStructSeq?) { + return (p1, p1) + } + + func opFixedStructList(p1: FixedStructList?, current _: Ice.Current) throws -> (returnValue: FixedStructList?, + p3: FixedStructList?) { + return (p1, p1) + } + + func opVarStructSeq(p1: VarStructSeq?, current _: Ice.Current) throws -> (returnValue: VarStructSeq?, + p3: VarStructSeq?) { + return (p1, p1) + } + + func opSerializable(p1: Serializable?, current _: Current) throws -> (returnValue: Serializable?, + p3: Serializable?) { + return (p1, p1) + } + + func opIntIntDict(p1: [Int32: Int32]?, current _: Ice.Current) throws -> (returnValue: [Int32: Int32]?, + p3: [Int32: Int32]?) { + return (p1, p1) + } + + func opStringIntDict(p1: [String: Int32]?, current _: Ice.Current) throws -> (returnValue: [String: Int32]?, + p3: [String: Int32]?) { + return (p1, p1) + } + + func opCustomIntStringDict(p1: IntStringDict?, + current _: Current) throws -> (returnValue: IntStringDict?, p3: IntStringDict?) { + return (p1, p1) + } + + func opIntOneOptionalDict(p1: [Int32: OneOptional?]?, + current _: Ice.Current) throws -> (returnValue: [Int32: OneOptional?]?, + p3: [Int32: OneOptional?]?) { + return (p1, p1) + } + + func opClassAndUnknownOptional(p _: A?, current _: Ice.Current) throws {} + + func sendOptionalClass(req _: Bool, o _: OneOptional?, current _: Ice.Current) throws {} + + func returnOptionalClass(req _: Bool, current _: Ice.Current) throws -> OneOptional? { + return OneOptional(a: 53) + } + + func opG(g: G?, current _: Ice.Current) throws -> G? { + return g + } + + func opVoid(current _: Ice.Current) throws {} + + func supportsRequiredParams(current _: Ice.Current) throws -> Bool { + return false + } + + func supportsJavaSerializable(current _: Ice.Current) throws -> Bool { + return false + } + + func supportsCsharpSerializable(current _: Ice.Current) throws -> Bool { + return false + } + + func supportsCppStringView(current _: Ice.Current) throws -> Bool { + return false + } + + func supportsNullOptional(current _: Ice.Current) throws -> Bool { + return false + } + + func opMStruct1(current _: Current) throws -> SmallStruct? { + return SmallStruct() + } + + func opMStruct2(p1: SmallStruct?, current _: Current) throws -> (returnValue: SmallStruct?, p2: SmallStruct?) { + return (p1, p1) + } + + func opMSeq1(current _: Current) throws -> StringSeq? { + return [] + } + + func opMSeq2(p1: StringSeq?, current _: Current) throws -> (returnValue: StringSeq?, p2: StringSeq?) { + return (p1, p1) + } + + func opMDict1(current _: Current) throws -> StringIntDict? { + return [:] + } + + func opMDict2(p1: StringIntDict?, current _: Current) throws -> (returnValue: StringIntDict?, p2: StringIntDict?) { + return (p1, p1) + } + + func opMG1(current _: Current) throws -> G? { + return G() + } + + func opMG2(p1: G?, current _: Current) throws -> (returnValue: G?, p2: G?) { + return (p1, p1) + } +} diff --git a/swift/test/Ice/properties/Client.swift b/swift/test/Ice/properties/Client.swift new file mode 100644 index 00000000000..1d81b726ec3 --- /dev/null +++ b/swift/test/Ice/properties/Client.swift @@ -0,0 +1,99 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import TestCommon + +public class Client: TestHelperI { + public override func run(args _: [String]) throws { + let output = getWriter() + + output.write("testing load properties exception... ") + do { + let properties = Ice.createProperties() + try properties.load("./config/xxxx.config") + try test(false) + } catch is FileException { + // Expected when try to load a non existing config file + } + output.writeLine("ok") + + do { + output.write("testing load properties from UTF-8 path... ") + let properties = Ice.createProperties() + try properties.load("./config/中国_client.config") + try test(properties.getProperty("Ice.Trace.Network") == "1") + try test(properties.getProperty("Ice.Trace.Protocol") == "1") + try test(properties.getProperty("Config.Path") == "./config/中国_client.config") + try test(properties.getProperty("Ice.ProgramName") == "PropertiesClient") + output.writeLine("ok") + } + + do { + output.write("testing using Ice.Config with multiple config files... ") + let args1 = ["--Ice.Config=config/config.1, config/config.2, config/config.3"] + let properties = try Ice.createProperties(args1) + try test(properties.getProperty("Config1") == "Config1") + try test(properties.getProperty("Config2") == "Config2") + try test(properties.getProperty("Config3") == "Config3") + output.writeLine("ok") + } + + do { + output.write("testing configuration file escapes... ") + let args1 = ["--Ice.Config=config/escapes.cfg"] + let properties = try Ice.createProperties(args1) + + let props = [("Foo\tBar", "3"), + ("Foo\\tBar", "4"), + ("Escape\\ Space", "2"), + ("Prop1", "1"), + ("Prop2", "2"), + ("Prop3", "3"), + ("My Prop1", "1"), + ("My Prop2", "2"), + ("My.Prop1", "a property"), + ("My.Prop2", "a property"), + ("My.Prop3", " a property "), + ("My.Prop4", " a property "), + ("My.Prop5", "a \\ property"), + ("foo=bar", "1"), + ("foo#bar", "2"), + ("foo bar", "3"), + ("A", "1"), + ("B", "2 3 4"), + ("C", "5=#6"), + ("AServer", "\\\\server\\dir"), + ("BServer", "\\server\\dir")] + + for prop in props { + try test(properties.getProperty(prop.0) == prop.1) + } + output.writeLine("ok") + } + + do { + output.write("testing arg parsing...") + var args1 = ["--Foo=1", "--Ice.Default.Timeout=12345", "-T", "--Bar=2"] + let properties1 = try Ice.createProperties(args1) + var properties2 = try Ice.createProperties(&args1) + try test(properties1.getPropertyAsInt("Ice.Default.Timeout") == 12345) + try test(properties2.getPropertyAsInt("Ice.Default.Timeout") == 12345) + try test(args1 == ["--Foo=1", "-T", "--Bar=2"]) + + args1 = ["--Ice.Default.Timeout=10000"] + properties2 = try Ice.createProperties(&args1) + try test(args1 == []) + + args1 = ["--Foo=1", "--Ice.Default.Timeout=12345", "-T", "--Bar=2"] + let communicator = try Ice.initialize(&args1) + defer { + communicator.destroy() + } + try test(communicator.getProperties().getPropertyAsInt("Ice.Default.Timeout") == 12345) + try test(args1 == ["--Foo=1", "-T", "--Bar=2"]) + output.writeLine("ok") + } + } +} diff --git a/swift/test/Ice/properties/config/.gitignore b/swift/test/Ice/properties/config/.gitignore new file mode 100644 index 00000000000..143c64680f3 --- /dev/null +++ b/swift/test/Ice/properties/config/.gitignore @@ -0,0 +1 @@ +*.config diff --git a/swift/test/Ice/properties/config/config.1 b/swift/test/Ice/properties/config/config.1 new file mode 100644 index 00000000000..77d9c61cd04 --- /dev/null +++ b/swift/test/Ice/properties/config/config.1 @@ -0,0 +1 @@ +Config1=Config1 diff --git a/swift/test/Ice/properties/config/config.2 b/swift/test/Ice/properties/config/config.2 new file mode 100644 index 00000000000..f6fc2c4c692 --- /dev/null +++ b/swift/test/Ice/properties/config/config.2 @@ -0,0 +1 @@ +Config2=Config2 diff --git a/swift/test/Ice/properties/config/config.3 b/swift/test/Ice/properties/config/config.3 new file mode 100644 index 00000000000..35e1cf8be44 --- /dev/null +++ b/swift/test/Ice/properties/config/config.3 @@ -0,0 +1 @@ +Config3=Config3 diff --git a/swift/test/Ice/properties/config/configPath b/swift/test/Ice/properties/config/configPath new file mode 100644 index 00000000000..59d8001a8ce --- /dev/null +++ b/swift/test/Ice/properties/config/configPath @@ -0,0 +1 @@ +./config/中国_client.config diff --git a/swift/test/Ice/properties/config/escapes.cfg b/swift/test/Ice/properties/config/escapes.cfg new file mode 100755 index 00000000000..a9d91a0a19f --- /dev/null +++ b/swift/test/Ice/properties/config/escapes.cfg @@ -0,0 +1,30 @@ +Foo Bar=3 #tab +Foo\tBar=4 # embedded\t +Escape\\ Space=2 + +# +# From Ice manual: +# + +Prop1 = 1 # Key is "Prop1" + Prop2 = 2 # Key is "Prop2" +\ Prop3 \ = 3 # Key is "Prop3" +My Prop1 = 1 # Key is "My Prop1" +My\ Prop2 = 2 # Key is "My Prop2" + +My.Prop1 = a property # Value is "a property" +My.Prop2 = a property # Value is "a property" +My.Prop3 = \ \ a property\ \ # Value is " a property " +My.Prop4 = \ \ a \ \ property\ \ # Value is " a property " +My.Prop5 = a \\ property # Value is "a \ property" + +foo\=bar=1 # Name is "foo=bar", value is "1" +foo\#bar = 2 # Name is "foo#bar", value is "2" +foo bar =3 # Name is "foo bar", value is "3" + +A=1 # Name is "A", value is "1" +B= 2 3 4 # Name is "B", value is "2 3 4" +C=5=\#6 # 7 # Name is "C", value is "5=#6" + +AServer=\\\\server\dir # Value is "\\server\dir" +BServer=\\server\\dir # Value is "\server\dir" diff --git a/swift/test/Ice/proxy/AllTests.swift b/swift/test/Ice/proxy/AllTests.swift new file mode 100644 index 00000000000..61536e5a2fa --- /dev/null +++ b/swift/test/Ice/proxy/AllTests.swift @@ -0,0 +1,917 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import TestCommon + +public func allTests(_ helper: TestHelper) throws -> MyClassPrx { + func test(_ value: Bool, file: String = #file, line: Int = #line) throws { + try helper.test(value, file: file, line: line) + } + + let writer = helper.getWriter() + writer.write("testing stringToProxy... ") + + let communicator = helper.communicator() + let rf = "test:\(helper.getTestEndpoint(num: 0))" + let baseProxy = try communicator.stringToProxy(rf)! + var b1 = try communicator.stringToProxy("test")! + try test(b1.ice_getIdentity().name == "test" && + b1.ice_getIdentity().category.isEmpty && + b1.ice_getAdapterId().isEmpty && + b1.ice_getFacet().isEmpty) + b1 = try communicator.stringToProxy("test ")! + try test(b1.ice_getIdentity().name == "test" && + b1.ice_getIdentity().category.isEmpty && + b1.ice_getAdapterId().isEmpty && + b1.ice_getFacet().isEmpty) + b1 = try communicator.stringToProxy(" test ")! + try test(b1.ice_getIdentity().name == "test" && + b1.ice_getIdentity().category.isEmpty && + b1.ice_getAdapterId().isEmpty && + b1.ice_getFacet().isEmpty) + b1 = try communicator.stringToProxy(" test")! + try test(b1.ice_getIdentity().name == "test" && + b1.ice_getIdentity().category.isEmpty && + b1.ice_getAdapterId().isEmpty && + b1.ice_getFacet().isEmpty) + b1 = try communicator.stringToProxy("'test -f facet'")! + try test(b1.ice_getIdentity().name == "test -f facet" && + b1.ice_getIdentity().category.isEmpty && + b1.ice_getFacet().isEmpty) + + do { + _ = try communicator.stringToProxy("\"test -f facet'") + try test(false) + } catch is Ice.ProxyParseException {} + + b1 = try communicator.stringToProxy("\"test -f facet\"")! + try test(b1.ice_getIdentity().name == "test -f facet" && + b1.ice_getIdentity().category.isEmpty && + b1.ice_getFacet().isEmpty) + + b1 = try communicator.stringToProxy("\"test -f facet@test\"")! + try test(b1.ice_getIdentity().name == "test -f facet@test" && + b1.ice_getIdentity().category.isEmpty && + b1.ice_getFacet().isEmpty) + + b1 = try communicator.stringToProxy("\"test -f facet@test @test\"")! + try test(b1.ice_getIdentity().name == "test -f facet@test @test" && + b1.ice_getIdentity().category.isEmpty && + b1.ice_getFacet().isEmpty) + + do { + _ = try communicator.stringToProxy("test test") + try test(false) + } catch is Ice.ProxyParseException {} + + b1 = try communicator.stringToProxy("test\\040test")! + try test(b1.ice_getIdentity().name == "test test" && + b1.ice_getIdentity().category.isEmpty) + do { + _ = try communicator.stringToProxy("test\\777") + try test(false) + } catch is Ice.IdentityParseException {} + + b1 = try communicator.stringToProxy("test\\40test")! + try test(b1.ice_getIdentity().name == "test test") + + // Test some octal and hex corner cases. + b1 = try communicator.stringToProxy("test\\4test")! + try test(b1.ice_getIdentity().name == "test\u{0004}test") + b1 = try communicator.stringToProxy("test\\04test")! + try test(b1.ice_getIdentity().name == "test\u{0004}test") + b1 = try communicator.stringToProxy("test\\004test")! + try test(b1.ice_getIdentity().name == "test\u{0004}test") + b1 = try communicator.stringToProxy("test\\1114test")! + try test(b1.ice_getIdentity().name == "test\u{0049}4test") + + b1 = try communicator.stringToProxy("test\\b\\f\\n\\r\\t\\'\\\"\\\\test")! + try test(b1.ice_getIdentity().name == "test\u{0008}\u{000C}\n\r\t\'\"\\test" && + b1.ice_getIdentity().category.isEmpty) + + b1 = try communicator.stringToProxy("category/test")! + try test(b1.ice_getIdentity().name == "test" && + b1.ice_getIdentity().category == "category" && + b1.ice_getAdapterId().isEmpty) + + try test(communicator.stringToProxy("") == nil) + try test(communicator.stringToProxy("\"\"") == nil) + + do { + _ = try communicator.stringToProxy("\"\" test") // Invalid trailing characters. + try test(false) + } catch is Ice.ProxyParseException {} + + do { + _ = try communicator.stringToProxy("test:") // Missing endpoint. + try test(false) + } catch is Ice.EndpointParseException {} + + b1 = try communicator.stringToProxy("test@adapter")! + try test(b1.ice_getIdentity().name == "test" && + b1.ice_getIdentity().category.isEmpty && + b1.ice_getAdapterId() == "adapter") + + do { + _ = try communicator.stringToProxy("id@adapter test") + try test(false) + } catch is Ice.ProxyParseException {} + + b1 = try communicator.stringToProxy("category/test@adapter")! + try test(b1.ice_getIdentity().name == "test" && + b1.ice_getIdentity().category == "category" && + b1.ice_getAdapterId() == "adapter") + b1 = try communicator.stringToProxy("category/test@adapter:tcp")! + try test(b1.ice_getIdentity().name == "test" && + b1.ice_getIdentity().category == "category" && + b1.ice_getAdapterId() == "adapter:tcp") + b1 = try communicator.stringToProxy("'category 1/test'@adapter")! + try test(b1.ice_getIdentity().name == "test" && + b1.ice_getIdentity().category == "category 1" && + b1.ice_getAdapterId() == "adapter") + b1 = try communicator.stringToProxy("'category/test 1'@adapter")! + try test(b1.ice_getIdentity().name == "test 1" && + b1.ice_getIdentity().category == "category" && + b1.ice_getAdapterId() == "adapter") + b1 = try communicator.stringToProxy("'category/test'@'adapter 1'")! + try test(b1.ice_getIdentity().name == "test" && + b1.ice_getIdentity().category == "category" && + b1.ice_getAdapterId() == "adapter 1") + b1 = try communicator.stringToProxy("\"category \\/test@foo/test\"@adapter")! + try test(b1.ice_getIdentity().name == "test" && + b1.ice_getIdentity().category == "category /test@foo" && + b1.ice_getAdapterId() == "adapter") + b1 = try communicator.stringToProxy("\"category \\/test@foo/test\"@\"adapter:tcp\"")! + try test(b1.ice_getIdentity().name == "test" && + b1.ice_getIdentity().category == "category /test@foo" && + b1.ice_getAdapterId() == "adapter:tcp") + + b1 = try communicator.stringToProxy("id -f facet")! + try test(b1.ice_getIdentity().name == "id" && + b1.ice_getIdentity().category.isEmpty && + b1.ice_getFacet() == "facet") + b1 = try communicator.stringToProxy("id -f 'facet x'")! + try test(b1.ice_getIdentity().name == "id" && + b1.ice_getIdentity().category.isEmpty && + b1.ice_getFacet() == "facet x") + b1 = try communicator.stringToProxy("id -f \"facet x\"")! + try test(b1.ice_getIdentity().name == "id" && + b1.ice_getIdentity().category.isEmpty && + b1.ice_getFacet() == "facet x") + + do { + b1 = try communicator.stringToProxy("id -f \"facet x")! + try test(false) + } catch is Ice.ProxyParseException {} + + do { + b1 = try communicator.stringToProxy("id -f \'facet x")! + try test(false) + } catch is Ice.ProxyParseException {} + + b1 = try communicator.stringToProxy("test -f facet:tcp")! + try test(b1.ice_getIdentity().name == "test" && + b1.ice_getIdentity().category.isEmpty && + b1.ice_getFacet() == "facet" && + b1.ice_getAdapterId().isEmpty) + b1 = try communicator.stringToProxy("test -f \"facet:tcp\"")! + try test(b1.ice_getIdentity().name == "test" && + b1.ice_getIdentity().category.isEmpty && + b1.ice_getFacet() == "facet:tcp" && + b1.ice_getAdapterId().isEmpty) + b1 = try communicator.stringToProxy("test -f facet@test")! + try test(b1.ice_getIdentity().name == "test" && + b1.ice_getIdentity().category.isEmpty && + b1.ice_getFacet() == "facet" && + b1.ice_getAdapterId() == "test") + b1 = try communicator.stringToProxy("test -f 'facet@test'")! + try test(b1.ice_getIdentity().name == "test" && + b1.ice_getIdentity().category.isEmpty && + b1.ice_getFacet() == "facet@test" && + b1.ice_getAdapterId().isEmpty) + b1 = try communicator.stringToProxy("test -f 'facet@test'@test")! + try test(b1.ice_getIdentity().name == "test" && + b1.ice_getIdentity().category.isEmpty && + b1.ice_getFacet() == "facet@test" && + b1.ice_getAdapterId() == "test") + + do { + b1 = try communicator.stringToProxy("test -f facet@test @test")! + try test(false) + } catch is Ice.ProxyParseException {} + b1 = try communicator.stringToProxy("test")! + try test(b1.ice_isTwoway()) + b1 = try communicator.stringToProxy("test -t")! + try test(b1.ice_isTwoway()) + b1 = try communicator.stringToProxy("test -o")! + try test(b1.ice_isOneway()) + b1 = try communicator.stringToProxy("test -O")! + try test(b1.ice_isBatchOneway()) + b1 = try communicator.stringToProxy("test -d")! + try test(b1.ice_isDatagram()) + b1 = try communicator.stringToProxy("test -D")! + try test(b1.ice_isBatchDatagram()) + b1 = try communicator.stringToProxy("test")! + try test(!b1.ice_isSecure()) + b1 = try communicator.stringToProxy("test -s")! + try test(b1.ice_isSecure()) + + try test(b1.ice_getEncodingVersion() == Ice.currentEncoding) + + b1 = try communicator.stringToProxy("test -e 1.0")! + try test(b1.ice_getEncodingVersion().major == 1 && + b1.ice_getEncodingVersion().minor == 0) + + b1 = try communicator.stringToProxy("test -e 6.5")! + try test(b1.ice_getEncodingVersion().major == 6 && + b1.ice_getEncodingVersion().minor == 5) + + b1 = try communicator.stringToProxy("test -p 1.0 -e 1.0")! + try test(b1.ice_toString() == "test -t -e 1.0") + + b1 = try communicator.stringToProxy("test -p 6.5 -e 1.0")! + try test(b1.ice_toString() == "test -t -p 6.5 -e 1.0") + + do { + _ = try communicator.stringToProxy("test:tcp@adapterId") + try test(false) + } catch is Ice.EndpointParseException {} + + do { + _ = try communicator.stringToProxy("test: :tcp") + try test(false) + } catch is Ice.EndpointParseException {} + + // + // Test invalid endpoint syntax + // + do { + _ = try communicator.createObjectAdapterWithEndpoints(name: "BadAdapter", endpoints: " : ") + try test(false) + } catch is Ice.EndpointParseException {} + + do { + _ = try communicator.createObjectAdapterWithEndpoints(name: "BadAdapter", endpoints: "tcp: ") + try test(false) + } catch is Ice.EndpointParseException {} + + do { + _ = try communicator.createObjectAdapterWithEndpoints(name: "BadAdapter", endpoints: ":tcp") + try test(false) + } catch is Ice.EndpointParseException {} + + // + // Test for bug ICE-5543: escaped escapes in stringToIdentity + // + var id = Ice.Identity(name: "test", category: ",X2QNUAzSBcJ_e$AV;E\\") + var id2 = try Ice.stringToIdentity(communicator.identityToString(id)) + try test(id == id2) + + id = Ice.Identity(name: "test", category: ",X2QNUAz\\SB\\/cJ_e$AV;E\\\\") + id2 = try Ice.stringToIdentity(communicator.identityToString(id)) + try test(id == id2) + + id = Ice.Identity(name: "/test", category: "cat/") + var idStr = communicator.identityToString(id) + try test(idStr == "cat\\//\\/test") + id2 = try Ice.stringToIdentity(idStr) + try test(id == id2) + + // Input string with various pitfalls + id = try Ice.stringToIdentity("\\342\\x82\\254\\60\\x9\\60\\") + try test(id.name == "€0\t0\\" && id.category == "") + + do { + // Illegal character < 32 + id = try Ice.stringToIdentity("xx\u{01}FooBar") + try test(false) + } catch is Ice.IdentityParseException {} + + do { + // Illegal surrogate + id = try Ice.stringToIdentity("xx\\ud911") + try test(false) + } catch is Ice.IdentityParseException {} + + // Testing bytes 127(\x7F, \177) and € + id = Ice.Identity(name: "test", category: "\u{007f}€") + + idStr = Ice.identityToString(id: id, mode: Ice.ToStringMode.Unicode) + try test(idStr == "\\u007f€/test") + id2 = try Ice.stringToIdentity(idStr) + try test(id == id2) + try test(Ice.identityToString(id: id) == idStr) + + idStr = Ice.identityToString(id: id, mode: Ice.ToStringMode.ASCII) + try test(idStr == "\\u007f\\u20ac/test") + id2 = try Ice.stringToIdentity(idStr) + try test(id == id2) + + idStr = Ice.identityToString(id: id, mode: Ice.ToStringMode.Compat) + try test(idStr == "\\177\\342\\202\\254/test") + id2 = try Ice.stringToIdentity(idStr) + try test(id == id2) + + id2 = try Ice.stringToIdentity(communicator.identityToString(id)) + try test(id == id2) + + // More unicode character + id = Ice.Identity(name: "banana \u{000E}-\u{1f34c}\u{20ac}\u{00a2}\u{0024}", + category: "greek \u{1016a}") + + idStr = Ice.identityToString(id: id, mode: Ice.ToStringMode.Unicode) + try test(idStr == "greek \u{1016a}/banana \\u000e-\u{1f34c}\u{20ac}\u{00a2}$") + id2 = try Ice.stringToIdentity(idStr) + try test(id == id2) + + idStr = Ice.identityToString(id: id, mode: Ice.ToStringMode.ASCII) + try test(idStr == "greek \\U0001016a/banana \\u000e-\\U0001f34c\\u20ac\\u00a2$") + id2 = try Ice.stringToIdentity(idStr) + try test(id == id2) + + idStr = Ice.identityToString(id: id, mode: Ice.ToStringMode.Compat) + id2 = try Ice.stringToIdentity(idStr) + try test(idStr == "greek \\360\\220\\205\\252/banana \\016-\\360\\237\\215\\214\\342\\202\\254\\302\\242$") + try test(id == id2) + writer.writeLine("ok") + + writer.write("testing proxyToString... ") + b1 = try communicator.stringToProxy(rf)! + var b2 = try communicator.stringToProxy(communicator.proxyToString(b1))! + + try test(b1 == b2) + + if try b1.ice_getConnection() != nil { // not colloc-optimized target + b2 = try b1.ice_getConnection()!.createProxy(Ice.stringToIdentity("fixed")) + let str = communicator.proxyToString(b2) + try test(b2.ice_toString() == str) + let str2 = b1.ice_identity(b2.ice_getIdentity()).ice_secure(b2.ice_isSecure()).ice_toString() + // Verify that the stringified fixed proxy is the same as a regular stringified proxy + // but without endpoints + try test(str2.hasPrefix("\(str):")) + } + writer.writeLine("ok") + + writer.write("testing propertyToProxy... ") + let prop = communicator.getProperties() + let propertyPrefix = "Foo.Proxy" + prop.setProperty(key: propertyPrefix, value: "test:\(helper.getTestEndpoint(num: 0))") + b1 = try communicator.propertyToProxy(propertyPrefix)! + try test(b1.ice_getIdentity().name == "test" && + b1.ice_getIdentity().category.isEmpty && + b1.ice_getAdapterId().isEmpty && + b1.ice_getFacet().isEmpty) + + var property = "\(propertyPrefix).Locator" + try test(b1.ice_getLocator() == nil) + prop.setProperty(key: property, value: "locator:default -p 10000") + b1 = try communicator.propertyToProxy(propertyPrefix)! + + try test(b1.ice_getLocator() != nil && + b1.ice_getLocator()!.ice_getIdentity().name == "locator") + prop.setProperty(key: property, value: "") + + property = "\(propertyPrefix).LocatorCacheTimeout" + try test(b1.ice_getLocatorCacheTimeout() == -1) + prop.setProperty(key: property, value: "1") + b1 = try communicator.propertyToProxy(propertyPrefix)! + try test(b1.ice_getLocatorCacheTimeout() == 1) + prop.setProperty(key: property, value: "") + + // Now retest with an indirect proxy. + prop.setProperty(key: propertyPrefix, value: "test") + property = "\(propertyPrefix).Locator" + prop.setProperty(key: property, value: "locator:default -p 10000") + b1 = try communicator.propertyToProxy(propertyPrefix)! + try test(b1.ice_getLocator() != nil && + b1.ice_getLocator()!.ice_getIdentity().name == "locator") + prop.setProperty(key: property, value: "") + + property = "\(propertyPrefix).LocatorCacheTimeout" + try test(b1.ice_getLocatorCacheTimeout() == -1) + prop.setProperty(key: property, value: "1") + b1 = try communicator.propertyToProxy(propertyPrefix)! + try test(b1.ice_getLocatorCacheTimeout() == 1) + prop.setProperty(key: property, value: "") + + // This cannot be tested so easily because the property is cached + // on communicator initialization. + // + // prop.setProperty("Ice.Default.LocatorCacheTimeout", "60"); + // b1 = communicator.propertyToProxy(propertyPrefix); + //test(b1.ice_getLocatorCacheTimeout() == 60); + // prop.setProperty("Ice.Default.LocatorCacheTimeout", ""); + + prop.setProperty(key: propertyPrefix, value: "test:\(helper.getTestEndpoint(num: 0))") + + property = "\(propertyPrefix).Router" + try test(b1.ice_getRouter() == nil) + prop.setProperty(key: property, value: "router:default -p 10000") + b1 = try communicator.propertyToProxy(propertyPrefix)! + try test(b1.ice_getRouter() != nil && + b1.ice_getRouter()!.ice_getIdentity().name == "router") + prop.setProperty(key: property, value: "") + + property = "\(propertyPrefix).PreferSecure" + try test(!b1.ice_isPreferSecure()) + prop.setProperty(key: property, value: "1") + b1 = try communicator.propertyToProxy(propertyPrefix)! + try test(b1.ice_isPreferSecure()) + prop.setProperty(key: property, value: "") + + property = "\(propertyPrefix).ConnectionCached" + try test(b1.ice_isConnectionCached()) + prop.setProperty(key: property, value: "0") + b1 = try communicator.propertyToProxy(propertyPrefix)! + try test(!b1.ice_isConnectionCached()) + prop.setProperty(key: property, value: "") + + property = "\(propertyPrefix).InvocationTimeout" + try test(b1.ice_getInvocationTimeout() == -1) + prop.setProperty(key: property, value: "1000") + b1 = try communicator.propertyToProxy(propertyPrefix)! + try test(b1.ice_getInvocationTimeout() == 1000) + prop.setProperty(key: property, value: "") + + property = "\(propertyPrefix).EndpointSelection" + try test(b1.ice_getEndpointSelection() == Ice.EndpointSelectionType.Random) + prop.setProperty(key: property, value: "Random") + b1 = try communicator.propertyToProxy(propertyPrefix)! + try test(b1.ice_getEndpointSelection() == Ice.EndpointSelectionType.Random) + prop.setProperty(key: property, value: "Ordered") + b1 = try communicator.propertyToProxy(propertyPrefix)! + try test(b1.ice_getEndpointSelection() == Ice.EndpointSelectionType.Ordered) + prop.setProperty(key: property, value: "") + + property = "\(propertyPrefix).CollocationOptimized" + try test(b1.ice_isCollocationOptimized()) + prop.setProperty(key: property, value: "0") + b1 = try communicator.propertyToProxy(propertyPrefix)! + try test(!b1.ice_isCollocationOptimized()) + prop.setProperty(key: property, value: "") + + property = "\(propertyPrefix).Context.c1" + try test(b1.ice_getContext()["c1"] == nil) + prop.setProperty(key: property, value: "TEST") + b1 = try communicator.propertyToProxy(propertyPrefix)! + try test(b1.ice_getContext()["c1"] == "TEST") + + property = "\(propertyPrefix).Context.c2" + try test(b1.ice_getContext()["c2"] == nil) + prop.setProperty(key: property, value: "TEST") + b1 = try communicator.propertyToProxy(propertyPrefix)! + try test(b1.ice_getContext()["c2"] == "TEST") + + prop.setProperty(key: "\(propertyPrefix).Context.c1", value: "") + prop.setProperty(key: "\(propertyPrefix).Context.c2", value: "") + + writer.writeLine("ok") + + writer.write("testing proxyToProperty... ") + + b1 = try communicator.stringToProxy("test")! + b1 = b1.ice_collocationOptimized(true) + b1 = b1.ice_connectionCached(true) + b1 = b1.ice_preferSecure(false) + b1 = b1.ice_endpointSelection(Ice.EndpointSelectionType.Ordered) + b1 = b1.ice_locatorCacheTimeout(100) + b1 = b1.ice_invocationTimeout(1234) + b1 = b1.ice_encodingVersion(Ice.EncodingVersion(major: 1, minor: 0)) + + var router = try communicator.stringToProxy("router")! + router = router.ice_collocationOptimized(false) + router = router.ice_connectionCached(true) + router = router.ice_preferSecure(true) + router = router.ice_endpointSelection(Ice.EndpointSelectionType.Random) + router = router.ice_locatorCacheTimeout(200) + router = router.ice_invocationTimeout(1500) + + var locator = try communicator.stringToProxy("locator")! + locator = locator.ice_collocationOptimized(true) + locator = locator.ice_connectionCached(false) + locator = locator.ice_preferSecure(true) + locator = locator.ice_endpointSelection(Ice.EndpointSelectionType.Random) + locator = locator.ice_locatorCacheTimeout(300) + locator = locator.ice_invocationTimeout(1500) + + locator = locator.ice_router(uncheckedCast(prx: router, type: Ice.RouterPrx.self)) + b1 = b1.ice_locator(uncheckedCast(prx: locator, type: Ice.LocatorPrx.self)) + + let proxyProps = communicator.proxyToProperty(proxy: b1, property: "Test") + try test(proxyProps.count == 21) + + try test(proxyProps["Test"] == "test -t -e 1.0") + try test(proxyProps["Test.CollocationOptimized"] == "1") + try test(proxyProps["Test.ConnectionCached"] == "1") + try test(proxyProps["Test.PreferSecure"] == "0") + try test(proxyProps["Test.EndpointSelection"] == "Ordered") + try test(proxyProps["Test.LocatorCacheTimeout"] == "100") + try test(proxyProps["Test.InvocationTimeout"] == "1234") + + try test(proxyProps["Test.Locator"] == + "locator -t -e " + Ice.encodingVersionToString(currentEncoding)) + // Locator collocation optimization is always disabled. + //test(proxyProps["Test.Locator.CollocationOptimized"].Equals("1")); + try test(proxyProps["Test.Locator.ConnectionCached"] == "0") + try test(proxyProps["Test.Locator.PreferSecure"] == "1") + try test(proxyProps["Test.Locator.EndpointSelection"] == "Random") + try test(proxyProps["Test.Locator.LocatorCacheTimeout"] == "300") + try test(proxyProps["Test.Locator.InvocationTimeout"] == "1500") + + try test(proxyProps["Test.Locator.Router"] == + "router -t -e " + Ice.encodingVersionToString(Ice.currentEncoding)) + try test(proxyProps["Test.Locator.Router.CollocationOptimized"] == "0") + try test(proxyProps["Test.Locator.Router.ConnectionCached"] == "1") + try test(proxyProps["Test.Locator.Router.PreferSecure"] == "1") + try test(proxyProps["Test.Locator.Router.EndpointSelection"] == "Random") + try test(proxyProps["Test.Locator.Router.LocatorCacheTimeout"] == "200") + try test(proxyProps["Test.Locator.Router.InvocationTimeout"] == "1500") + + writer.writeLine("ok") + + writer.write("testing ice_getCommunicator... ") + try test(baseProxy.ice_getCommunicator() === communicator) + writer.writeLine("ok") + + writer.write("testing proxy methods... ") + try test(baseProxy.ice_facet("facet").ice_getFacet() == "facet") + try test(baseProxy.ice_adapterId("id").ice_getAdapterId() == "id") + try test(baseProxy.ice_twoway().ice_isTwoway()) + try test(baseProxy.ice_oneway().ice_isOneway()) + try test(baseProxy.ice_batchOneway().ice_isBatchOneway()) + try test(baseProxy.ice_datagram().ice_isDatagram()) + try test(baseProxy.ice_batchDatagram().ice_isBatchDatagram()) + try test(baseProxy.ice_secure(true).ice_isSecure()) + try test(!baseProxy.ice_secure(false).ice_isSecure()) + try test(baseProxy.ice_collocationOptimized(true).ice_isCollocationOptimized()) + try test(!baseProxy.ice_collocationOptimized(false).ice_isCollocationOptimized()) + try test(baseProxy.ice_preferSecure(true).ice_isPreferSecure()) + try test(!baseProxy.ice_preferSecure(false).ice_isPreferSecure()) + + try test(baseProxy.ice_timeout(-1).ice_getTimeout() == -1) + try test(baseProxy.ice_invocationTimeout(-1).ice_getInvocationTimeout() == -1) + try test(baseProxy.ice_invocationTimeout(-2).ice_getInvocationTimeout() == -2) + try test(baseProxy.ice_locatorCacheTimeout(0).ice_getLocatorCacheTimeout() == 0) + try test(baseProxy.ice_locatorCacheTimeout(-1).ice_getLocatorCacheTimeout() == -1) + + writer.writeLine("ok") + + writer.write("testing proxy comparison... ") + + try test(communicator.stringToProxy("foo") == communicator.stringToProxy("foo")) + try test(communicator.stringToProxy("foo") != communicator.stringToProxy("foo2")) + + let compObj = try communicator.stringToProxy("foo") + + try test(compObj!.ice_facet("facet") == compObj!.ice_facet("facet")) + try test(compObj!.ice_facet("facet") != compObj!.ice_facet("facet1")) + + try test(compObj!.ice_oneway() == compObj!.ice_oneway()) + try test(compObj!.ice_oneway() != compObj!.ice_twoway()) + + try test(compObj!.ice_secure(true) == compObj!.ice_secure(true)) + try test(compObj!.ice_secure(false) != compObj!.ice_secure(true)) + + try test(compObj!.ice_collocationOptimized(true) == compObj!.ice_collocationOptimized(true)) + try test(compObj!.ice_collocationOptimized(false) != compObj!.ice_collocationOptimized(true)) + + try test(compObj!.ice_connectionCached(true) == compObj!.ice_connectionCached(true)) + try test(compObj!.ice_connectionCached(false) != compObj!.ice_connectionCached(true)) + + try test(compObj!.ice_endpointSelection(Ice.EndpointSelectionType.Random) == + compObj!.ice_endpointSelection(Ice.EndpointSelectionType.Random)) + try test(compObj!.ice_endpointSelection(Ice.EndpointSelectionType.Random) != + compObj!.ice_endpointSelection(Ice.EndpointSelectionType.Ordered)) + + try test(compObj!.ice_connectionId("id2") == compObj!.ice_connectionId("id2")) + try test(compObj!.ice_connectionId("id1") != compObj!.ice_connectionId("id2")) + try test(compObj!.ice_connectionId("id1").ice_getConnectionId() == "id1") + try test(compObj!.ice_connectionId("id2").ice_getConnectionId() == "id2") + + try test(compObj!.ice_compress(true) == compObj!.ice_compress(true)) + try test(compObj!.ice_compress(false) != compObj!.ice_compress(true)) + + try test(compObj!.ice_getCompress() == nil) + try test(compObj!.ice_compress(true).ice_getCompress() == true) + try test(compObj!.ice_compress(false).ice_getCompress() == false) + + try test(compObj!.ice_timeout(20) == compObj!.ice_timeout(20)) + try test(compObj!.ice_timeout(10) != compObj!.ice_timeout(20)) + + try test(compObj!.ice_getTimeout() == nil) + try test(compObj!.ice_timeout(10).ice_getTimeout() == 10) + try test(compObj!.ice_timeout(20).ice_getTimeout() == 20) + + let loc1 = uncheckedCast(prx: try communicator.stringToProxy("loc1:default -p 10000")!, + type: Ice.LocatorPrx.self) + let loc2 = uncheckedCast(prx: try communicator.stringToProxy("loc2:default -p 10000")!, + type: Ice.LocatorPrx.self) + + try test(compObj!.ice_locator(nil) == compObj!.ice_locator(nil)) + try test(compObj!.ice_locator(loc1) == compObj!.ice_locator(loc1)) + try test(compObj!.ice_locator(loc1) != compObj!.ice_locator(nil)) + try test(compObj!.ice_locator(nil) != compObj!.ice_locator(loc2)) + try test(compObj!.ice_locator(loc1) != compObj!.ice_locator(loc2)) + + let rtr1 = uncheckedCast(prx: try communicator.stringToProxy("rtr1:default -p 10000")!, + type: Ice.RouterPrx.self) + let rtr2 = uncheckedCast(prx: try communicator.stringToProxy("rtr2:default -p 10000")!, + type: Ice.RouterPrx.self) + + try test(compObj!.ice_router(nil) == compObj!.ice_router(nil)) + try test(compObj!.ice_router(rtr1) == compObj!.ice_router(rtr1)) + try test(compObj!.ice_router(rtr1) != compObj!.ice_router(nil)) + try test(compObj!.ice_router(nil) != compObj!.ice_router(rtr2)) + try test(compObj!.ice_router(rtr1) != compObj!.ice_router(rtr2)) + + let ctx1 = ["ctx1": "v1"] + let ctx2 = ["ctx2": "v2"] + + try test(compObj!.ice_context(Ice.Context()) == compObj!.ice_context(Ice.Context())) + try test(compObj!.ice_context(ctx1) == compObj!.ice_context(ctx1)) + try test(compObj!.ice_context(ctx1) != compObj!.ice_context(Ice.Context())) + try test(compObj!.ice_context(Ice.Context()) != compObj!.ice_context(ctx2)) + try test(compObj!.ice_context(ctx1) != compObj!.ice_context(ctx2)) + + try test(compObj!.ice_preferSecure(true) == compObj!.ice_preferSecure(true)) + try test(compObj!.ice_preferSecure(true) != compObj!.ice_preferSecure(false)) + + var compObj1 = try communicator.stringToProxy("foo:tcp -h 127.0.0.1 -p 10000") + var compObj2 = try communicator.stringToProxy("foo:tcp -h 127.0.0.1 -p 10001") + try test(compObj1 != compObj2) + + compObj1 = try communicator.stringToProxy("foo@MyAdapter1") + compObj2 = try communicator.stringToProxy("foo@MyAdapter2") + try test(compObj1 != compObj2) + + try test(compObj1!.ice_locatorCacheTimeout(20) == compObj1!.ice_locatorCacheTimeout(20)) + try test(compObj1!.ice_locatorCacheTimeout(10) != compObj1!.ice_locatorCacheTimeout(20)) + + try test(compObj1!.ice_invocationTimeout(20) == compObj1!.ice_invocationTimeout(20)) + try test(compObj1!.ice_invocationTimeout(10) != compObj1!.ice_invocationTimeout(20)) + + compObj1 = try communicator.stringToProxy("foo:tcp -h 127.0.0.1 -p 1000") + compObj2 = try communicator.stringToProxy("foo@MyAdapter1") + try test(compObj1 != compObj2) + + let endpts1 = try communicator.stringToProxy("foo:tcp -h 127.0.0.1 -p 10000")!.ice_getEndpoints() + let endpts2 = try communicator.stringToProxy("foo:tcp -h 127.0.0.1 -p 10001")!.ice_getEndpoints() + + try test(endpts1[0] != endpts2[0]) + try test(endpts1[0] == communicator.stringToProxy("foo:tcp -h 127.0.0.1 -p 10000")!.ice_getEndpoints()[0]) + + let baseConnection = try baseProxy.ice_getConnection() + if baseConnection != nil { + let baseConnection2 = try baseProxy.ice_connectionId("base2").ice_getConnection() + compObj1 = compObj1!.ice_fixed(baseConnection!) + compObj2 = compObj2!.ice_fixed(baseConnection2!) + try test(compObj1 != compObj2) + } + writer.writeLine("ok") + + writer.write("testing checked cast... ") + var cl = try checkedCast(prx: baseProxy, type: MyClassPrx.self)! + let derived = try checkedCast(prx: cl, type: MyDerivedClassPrx.self)! + try test(cl == baseProxy) + try test(derived == baseProxy) + try test(cl == derived) + writer.writeLine("ok") + + writer.write("testing checked cast with context... ") + var c = try cl.getContext() + try test(c.isEmpty) + c = ["one": "hello", "two": "world"] + cl = try checkedCast(prx: baseProxy, type: MyClassPrx.self, context: c)! + let c2 = try cl.getContext() + try test(c == c2) + writer.writeLine("ok") + + writer.write("testing ice_fixed... ") + do { + let connection = try cl.ice_getConnection() + if connection != nil { + let prx = cl.ice_fixed(connection!) + try prx.ice_ping() + try test(cl.ice_secure(true).ice_fixed(connection!).ice_isSecure()) + try test(cl.ice_facet("facet").ice_fixed(connection!).ice_getFacet() == "facet") + try test(cl.ice_oneway().ice_fixed(connection!).ice_isOneway()) + let ctx = ["one": "hello", "two": "world"] + try test(cl.ice_fixed(connection!).ice_getContext().isEmpty) + try test(cl.ice_context(ctx).ice_fixed(connection!).ice_getContext().count == 2) + try test(cl.ice_fixed(connection!).ice_getInvocationTimeout() == -1) + try test(cl.ice_invocationTimeout(10).ice_fixed(connection!).ice_getInvocationTimeout() == 10) + try test(cl.ice_fixed(connection!).ice_getConnection() === connection) + try test(cl.ice_fixed(connection!).ice_fixed(connection!).ice_getConnection() === connection) + try test(cl.ice_fixed(connection!).ice_getTimeout() == nil) + try test(cl.ice_compress(true).ice_fixed(connection!).ice_getCompress()!) + let fixedConnection = try cl.ice_connectionId("ice_fixed").ice_getConnection() + try test(cl.ice_fixed(connection!).ice_fixed(fixedConnection!).ice_getConnection() === + fixedConnection) + do { + try cl.ice_secure(!connection!.getEndpoint().getInfo()!.secure()).ice_fixed(connection!).ice_ping() + } catch is Ice.NoEndpointException {} + + do { + try cl.ice_datagram().ice_fixed(connection!).ice_ping() + } catch is Ice.NoEndpointException {} + } + } + writer.writeLine("ok") + + writer.write("testing encoding versioning... ") + var ref20 = "test -e 2.0:\(helper.getTestEndpoint(num: 0))" + var cl20 = try uncheckedCast(prx: communicator.stringToProxy(ref20)!, type: MyClassPrx.self) + do { + try cl20.ice_ping() + try test(false) + } catch is Ice.UnsupportedEncodingException { + // Server 2.0 endpoint doesn't support 1.1 version. + } + + var ref10 = "test -e 1.0:\(helper.getTestEndpoint(num: 0))" + var cl10 = try uncheckedCast(prx: communicator.stringToProxy(ref10)!, type: MyClassPrx.self) + try cl10.ice_ping() + try cl10.ice_encodingVersion(Ice.Encoding_1_0).ice_ping() + try cl.ice_encodingVersion(Ice.Encoding_1_0).ice_ping() + + // 1.3 isn't supported but since a 1.3 proxy supports 1.1, the + // call will use the 1.1 encoding + var ref13 = "test -e 1.3:\(helper.getTestEndpoint(num: 0))" + var cl13 = try uncheckedCast(prx: communicator.stringToProxy(ref13)!, type: MyClassPrx.self) + try cl13.ice_ping() + + do { + // Send request with bogus 1.2 encoding. + let version = Ice.EncodingVersion(major: 1, minor: 2) + let os = Ice.OutputStream(communicator: communicator) + os.startEncapsulation() + os.endEncapsulation() + var inEncaps = os.finished() + inEncaps[4] = version.major + inEncaps[5] = version.minor + + _ = try cl.ice_invoke(operation: "ice_ping", mode: Ice.OperationMode.Normal, inEncaps: inEncaps) + try test(false) + } catch let ex as Ice.UnknownLocalException { + // The server thrown an UnsupportedEncodingException + try test(ex.unknown.contains("UnsupportedEncodingException")) + } + + do { + // Send request with bogus 2.0 encoding. + let version = Ice.EncodingVersion(major: 2, minor: 0) + let os = Ice.OutputStream(communicator: communicator) + os.startEncapsulation() + os.endEncapsulation() + var inEncaps = os.finished() + inEncaps[4] = version.major + inEncaps[5] = version.minor + _ = try cl.ice_invoke(operation: "ice_ping", mode: Ice.OperationMode.Normal, inEncaps: inEncaps) + try test(false) + } catch let ex as Ice.UnknownLocalException { + // The server thrown an UnsupportedEncodingException + try test(ex.unknown.contains("UnsupportedEncodingException")) + } + writer.writeLine("ok") + + writer.write("testing protocol versioning... ") + ref20 = "test -p 2.0:\(helper.getTestEndpoint(num: 0))" + cl20 = try uncheckedCast(prx: communicator.stringToProxy(ref20)!, type: MyClassPrx.self) + do { + try cl20.ice_ping() + try test(false) + } catch is Ice.UnsupportedProtocolException { + // Server 2.0 proxy doesn't support 1.0 version. + } + + ref10 = "test -p 1.0:\(helper.getTestEndpoint(num: 0))" + cl10 = try uncheckedCast(prx: communicator.stringToProxy(ref10)!, type: MyClassPrx.self) + try cl10.ice_ping() + + // 1.3 isn't supported but since a 1.3 proxy supports 1.1, the + // call will use the 1.1 protocol + ref13 = "test -p 1.3:\(helper.getTestEndpoint(num: 0))" + cl13 = try uncheckedCast(prx: communicator.stringToProxy(ref13)!, type: MyClassPrx.self) + try cl13.ice_ping() + writer.writeLine("ok") + + writer.write("testing opaque endpoints... ") + do { + // Invalid -x option + _ = try communicator.stringToProxy("id:opaque -t 99 -v abcd -x abc") + try test(false) + } catch is Ice.EndpointParseException {} + + do { + // Missing -t and -v + _ = try communicator.stringToProxy("id:opaque") + try test(false) + } catch is Ice.EndpointParseException {} + + do { + // Repeated -t + _ = try communicator.stringToProxy("id:opaque -t 1 -t 1 -v abcd") + try test(false) + } catch is Ice.EndpointParseException {} + + do { + // Repeated -v + _ = try communicator.stringToProxy("id:opaque -t 1 -v abcd -v abcd") + try test(false) + } catch is Ice.EndpointParseException {} + + do { + // Missing -t + _ = try communicator.stringToProxy("id:opaque -v abcd") + try test(false) + } catch is Ice.EndpointParseException {} + + do { + // Missing -v + _ = try communicator.stringToProxy("id:opaque -t 1") + try test(false) + } catch is Ice.EndpointParseException {} + + do { + // Missing arg for -t + _ = try communicator.stringToProxy("id:opaque -t -v abcd") + try test(false) + } catch is Ice.EndpointParseException {} + + do { + // Missing arg for -v + _ = try communicator.stringToProxy("id:opaque -t 1 -v") + try test(false) + } catch is Ice.EndpointParseException {} + + do { + // Not a number for -t + _ = try communicator.stringToProxy("id:opaque -t x -v abcd") + try test(false) + } catch is Ice.EndpointParseException {} + + do { + // < 0 for -t + _ = try communicator.stringToProxy("id:opaque -t -1 -v abcd") + try test(false) + } catch is Ice.EndpointParseException {} + + do { + // Invalid char for -v + _ = try communicator.stringToProxy("id:opaque -t 99 -v x?c") + try test(false) + } catch is Ice.EndpointParseException {} + + // Legal TCP endpoint expressed as opaque endpoint + var p1 = try communicator.stringToProxy("test -e 1.1:opaque -t 1 -e 1.0 -v CTEyNy4wLjAuMeouAAAQJwAAAA==")! + var pstr = communicator.proxyToString(p1) + try test(pstr == "test -t -e 1.1:tcp -h 127.0.0.1 -p 12010 -t 10000") + + // Opaque endpoint encoded with 1.1 encoding. + let p2 = try communicator.stringToProxy("test -e 1.1:opaque -e 1.1 -t 1 -v CTEyNy4wLjAuMeouAAAQJwAAAA==")! + try test(communicator.proxyToString(p2) == "test -t -e 1.1:tcp -h 127.0.0.1 -p 12010 -t 10000") + + if communicator.getProperties().getPropertyAsInt("Ice.IPv6") == 0 { + // Working? + let ssl = communicator.getProperties().getProperty("Ice.Default.Protocol") == "ssl" + let tcp = communicator.getProperties().getProperty("Ice.Default.Protocol") == "tcp" + + // Two legal TCP endpoints expressed as opaque endpoints + p1 = try communicator.stringToProxy("test -e 1.0:" + + "opaque -e 1.0 -t 1 -v CTEyNy4wLjAuMeouAAAQJwAAAA==:" + + "opaque -e 1.0 -t 1 -v CTEyNy4wLjAuMusuAAAQJwAAAA==")! + pstr = communicator.proxyToString(p1) + try test(pstr == "test -t -e 1.0:tcp -h 127.0.0.1 -p 12010 -t 10000:tcp -h 127.0.0.2 -p 12011 -t 10000") + + // Test that an SSL endpoint and a nonsense endpoint get written back out as an opaque endpoint. + p1 = try communicator.stringToProxy("test -e 1.0:" + + "opaque -e 1.0 -t 2 -v CTEyNy4wLjAuMREnAAD/////AA==:" + + "opaque -e 1.0 -t 99 -v abch")! + pstr = communicator.proxyToString(p1) + if ssl { + try test(pstr == "test -t -e 1.0:ssl -h 127.0.0.1 -p 10001 -t infinite:opaque -t 99 -e 1.0 -v abch") + } else if tcp { + try test(pstr == + "test -t -e 1.0:opaque -t 2 -e 1.0 -v CTEyNy4wLjAuMREnAAD/////AA==:opaque -t 99 -e 1.0 -v abch") + } + } + + writer.writeLine("ok") + + writer.write("testing communicator shutdown/destroy... ") + do { + let com = try Ice.initialize() + com.shutdown() + try test(com.isShutdown()) + com.waitForShutdown() + com.destroy() + com.shutdown() + try test(com.isShutdown()) + com.waitForShutdown() + com.destroy() + } + writer.writeLine("ok") + return cl +} diff --git a/swift/test/Ice/proxy/Client.swift b/swift/test/Ice/proxy/Client.swift new file mode 100644 index 00000000000..c9c20481403 --- /dev/null +++ b/swift/test/Ice/proxy/Client.swift @@ -0,0 +1,19 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import TestCommon + +class Client: TestHelperI { + public override func run(args: [String]) throws { + do { + let communicator = try initialize(args) + defer { + communicator.destroy() + } + let cl = try allTests(self) + try cl.shutdown() + } + } +} diff --git a/swift/test/Ice/proxy/Collocated.swift b/swift/test/Ice/proxy/Collocated.swift new file mode 100644 index 00000000000..eedb2228048 --- /dev/null +++ b/swift/test/Ice/proxy/Collocated.swift @@ -0,0 +1,29 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import PromiseKit +import TestCommon + +class Collocated: TestHelperI { + public override func run(args: [String]) throws { + let writer = getWriter() + + let properties = try Ice.createProperties(args) + properties.setProperty(key: "Ice.ThreadPool.Client.Size", value: "2") + properties.setProperty(key: "Ice.ThreadPool.Client.SizeWarn", value: "0") + properties.setProperty(key: "Ice.Warn.Dispatch", value: "0") + + let communicator = try initialize(properties) + defer { + communicator.destroy() + } + communicator.getProperties().setProperty(key: "TestAdapter.Endpoints", value: getTestEndpoint(num: 0)) + let adapter = try communicator.createObjectAdapter("TestAdapter") + try adapter.add(servant: MyDerivedClassDisp(MyDerivedClassI()), + id: Ice.stringToIdentity("test")) + // try adapter.activate() // Don't activate OA to ensure collocation is used + _ = try allTests(self) + } +} diff --git a/swift/test/Ice/proxy/Server.swift b/swift/test/Ice/proxy/Server.swift new file mode 100644 index 00000000000..bff8f84188b --- /dev/null +++ b/swift/test/Ice/proxy/Server.swift @@ -0,0 +1,31 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import TestCommon + +class Server: TestHelperI { + public override func run(args: [String]) throws { + let writer = getWriter() + + let properties = try Ice.createProperties(args) + // + // We don't want connection warnings because of the timeout test. + // + properties.setProperty(key: "Ice.Warn.Connections", value: "0") + properties.setProperty(key: "Ice.Warn.Dispatch", value: "0") + + let communicator = try initialize(properties) + defer { + communicator.destroy() + } + communicator.getProperties().setProperty(key: "TestAdapter.Endpoints", value: getTestEndpoint(num: 0)) + let adapter = try communicator.createObjectAdapter("TestAdapter") + try adapter.add(servant: MyDerivedClassDisp(MyDerivedClassI()), + id: Ice.stringToIdentity("test")) + try adapter.activate() + serverReady() + communicator.waitForShutdown() + } +} diff --git a/swift/test/Ice/proxy/ServerAMD.swift b/swift/test/Ice/proxy/ServerAMD.swift new file mode 100644 index 00000000000..94baebc10d9 --- /dev/null +++ b/swift/test/Ice/proxy/ServerAMD.swift @@ -0,0 +1,31 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import PromiseKit +import TestCommon + +class ServerAMD: TestHelperI { + public override func run(args: [String]) throws { + let writer = getWriter() + + let properties = try Ice.createProperties(args) + // + // We don't want connection warnings because of the timeout test. + // + properties.setProperty(key: "Ice.Warn.Connections", value: "0") + properties.setProperty(key: "Ice.Warn.Dispatch", value: "0") + + let communicator = try initialize(properties) + defer { + communicator.destroy() + } + communicator.getProperties().setProperty(key: "TestAdapter.Endpoints", value: getTestEndpoint(num: 0)) + let adapter = try communicator.createObjectAdapter("TestAdapter") + try adapter.add(servant: MyDerivedClassDisp(MyDerivedClassI()), id: Ice.stringToIdentity("test")) + try adapter.activate() + serverReady() + communicator.waitForShutdown() + } +} diff --git a/swift/test/Ice/proxy/Test.ice b/swift/test/Ice/proxy/Test.ice new file mode 100644 index 00000000000..f0e28ec6e1c --- /dev/null +++ b/swift/test/Ice/proxy/Test.ice @@ -0,0 +1,26 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#pragma once + +#include <Ice/Current.ice> + +[["suppress-warning:deprecated"]] + +module Test +{ + +interface MyClass +{ + void shutdown(); + + Ice::Context getContext(); +} + +interface MyDerivedClass extends MyClass +{ + Object* echo(Object* obj); +} + +} diff --git a/swift/test/Ice/proxy/TestAMD.ice b/swift/test/Ice/proxy/TestAMD.ice new file mode 100644 index 00000000000..4674d1f5384 --- /dev/null +++ b/swift/test/Ice/proxy/TestAMD.ice @@ -0,0 +1,24 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#pragma once + +#include <Ice/Current.ice> + +module Test +{ + +["amd"] interface MyClass +{ + void shutdown(); + + Ice::Context getContext(); +} + +["amd"] interface MyDerivedClass extends MyClass +{ + Object* echo(Object* obj); +} + +} diff --git a/swift/test/Ice/proxy/TestAMDI.swift b/swift/test/Ice/proxy/TestAMDI.swift new file mode 100644 index 00000000000..8bf76da8809 --- /dev/null +++ b/swift/test/Ice/proxy/TestAMDI.swift @@ -0,0 +1,48 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// +import Ice +import PromiseKit + +final class MyDerivedClassI: ObjectI<MyDerivedClassTraits>, MyDerivedClass { + var _ctx: [String: String] + + override init() { + _ctx = [String: String]() + } + + func echoAsync(obj: Ice.ObjectPrx?, current _: Ice.Current) -> PromiseKit.Promise<Ice.ObjectPrx?> { + return Promise.value(obj) + } + + func shutdownAsync(current: Ice.Current) -> PromiseKit.Promise<Void> { + guard let adapter = current.adapter else { + fatalError() + } + adapter.getCommunicator().shutdown() + return Promise.value(()) + } + + func getContextAsync(current _: Ice.Current) -> PromiseKit.Promise<[String: String]> { + return Promise.value(_ctx) + } + + override func ice_isA(id: String, current: Ice.Current) throws -> Bool { + _ctx = current.ctx + return try super.ice_isA(id: id, current: current) + } + + override func ice_ids(current: Ice.Current) throws -> [String] { + _ctx = current.ctx + return try super.ice_ids(current: current) + } + + override func ice_id(current: Ice.Current) throws -> String { + _ctx = current.ctx + return try super.ice_id(current: current) + } + + override func ice_ping(current: Ice.Current) { + _ctx = current.ctx + } +} diff --git a/swift/test/Ice/proxy/TestI.swift b/swift/test/Ice/proxy/TestI.swift new file mode 100644 index 00000000000..d3a489c8eeb --- /dev/null +++ b/swift/test/Ice/proxy/TestI.swift @@ -0,0 +1,46 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// +import Ice + +final class MyDerivedClassI: ObjectI<MyDerivedClassTraits>, MyDerivedClass { + var _ctx: [String: String] + + override init() { + _ctx = [String: String]() + } + + func echo(obj: Ice.ObjectPrx?, current _: Ice.Current) throws -> Ice.ObjectPrx? { + return obj + } + + func shutdown(current: Ice.Current) throws { + guard let adapter = current.adapter else { + fatalError() + } + adapter.getCommunicator().shutdown() + } + + func getContext(current _: Ice.Current) throws -> [String: String] { + return _ctx + } + + override func ice_isA(id: String, current: Ice.Current) throws -> Bool { + _ctx = current.ctx + return try super.ice_isA(id: id, current: current) + } + + override func ice_id(current: Ice.Current) throws -> String { + _ctx = current.ctx + return try super.ice_id(current: current) + } + + override func ice_ids(current: Ice.Current) throws -> [String] { + _ctx = current.ctx + return try super.ice_ids(current: current) + } + + override func ice_ping(current: Current) { + _ctx = current.ctx + } +} diff --git a/swift/test/Ice/retry/AllTests.swift b/swift/test/Ice/retry/AllTests.swift new file mode 100644 index 00000000000..1b72f9b594c --- /dev/null +++ b/swift/test/Ice/retry/AllTests.swift @@ -0,0 +1,126 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import PromiseKit +import TestCommon + +public func allTests(helper: TestHelper) throws -> RetryPrx { + func test(_ value: Bool, file: String = #file, line: Int = #line) throws { + try helper.test(value, file: file, line: line) + } + + let output = helper.getWriter() + let communicator = helper.communicator() + + // + // Configure a second communicator for the invocation timeout + // + retry test, we need to configure a large retry interval + // to avoid time-sensitive failures. + // + let properties = communicator.getProperties().clone() + properties.setProperty(key: "Ice.RetryIntervals", value: "0 1 10000") + let communicator2 = try helper.initialize(properties) + defer { + communicator2.destroy() + } + + let rf = "retry:\(helper.getTestEndpoint(num: 0))" + + output.write("testing stringToProxy... ") + let base1 = try communicator.stringToProxy(rf)! + let base2 = try communicator.stringToProxy(rf)! + output.writeLine("ok") + + output.write("testing checked cast... ") + let retry1 = try checkedCast(prx: base1, type: RetryPrx.self)! + try test(retry1 == base1) + var retry2 = try checkedCast(prx: base2, type: RetryPrx.self)! + try test(retry2 == base2) + output.writeLine("ok") + + output.write("calling regular operation with first proxy... ") + try retry1.op(false) + output.writeLine("ok") + + output.write("calling operation to kill connection with second proxy... ") + do { + try retry2.op(true) + try test(false) + } catch is Ice.UnknownLocalException { + // Expected with collocation + } catch is Ice.ConnectionLostException {} + output.writeLine("ok") + + output.write("calling regular operation with first proxy again... ") + try retry1.op(false) + output.writeLine("ok") + + output.write("calling regular AMI operation with first proxy... ") + try retry1.opAsync(false).wait() + output.writeLine("ok") + + output.write("calling AMI operation to kill connection with second proxy... ") + do { + try retry2.opAsync(true).wait() + } catch is Ice.ConnectionLostException {} catch is Ice.UnknownLocalException {} + output.writeLine("ok") + + output.write("calling regular AMI operation with first proxy again... ") + try retry1.opAsync(false).wait() + output.writeLine("ok") + + output.write("testing idempotent operation... ") + try test(retry1.opIdempotent(4) == 4) + try test(retry1.opIdempotentAsync(4).wait() == 4) + output.writeLine("ok") + + output.write("testing non-idempotent operation... ") + do { + try retry1.opNotIdempotent() + try test(false) + } catch is Ice.LocalException {} + + do { + try retry1.opNotIdempotentAsync().wait() + try test(false) + } catch is Ice.LocalException {} + output.writeLine("ok") + + if try retry1.ice_getConnection() != nil { + output.write("testing system exception... ") + do { + try retry1.opSystemException() + try test(false) + } catch {} + + do { + try retry1.opSystemExceptionAsync().wait() + try test(false) + } catch {} + output.writeLine("ok") + } + + output.write("testing invocation timeout and retries... ") + + retry2 = try checkedCast(prx: communicator2.stringToProxy(retry1.ice_toString())!, + type: RetryPrx.self)! + do { + // No more than 2 retries before timeout kicks-in + _ = try retry2.ice_invocationTimeout(500).opIdempotent(4) + try test(false) + } catch is Ice.InvocationTimeoutException { + _ = try retry2.opIdempotent(-1) // Reset the counter + } + + do { + // No more than 2 retries before timeout kicks-in + _ = try retry2.ice_invocationTimeout(500).opIdempotentAsync(4).wait() + try test(false) + } catch is Ice.InvocationTimeoutException { + _ = try retry2.opIdempotent(-1) // Reset the counter + } + output.writeLine("ok") + return retry1 +} diff --git a/swift/test/Ice/retry/Client.swift b/swift/test/Ice/retry/Client.swift new file mode 100644 index 00000000000..8394bce6a88 --- /dev/null +++ b/swift/test/Ice/retry/Client.swift @@ -0,0 +1,26 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import TestCommon + +class Client: TestHelperI { + public override func run(args: [String]) throws { + do { + let properties = try createTestProperties(args) + properties.setProperty(key: "Ice.RetryIntervals", value: "0 1 10 1") + + // + // This test kills connections, so we don't want warnings. + // + properties.setProperty(key: "Ice.Warn.Connections", value: "0") + let communicator = try initialize(properties) + defer { + communicator.destroy() + } + let r = try allTests(helper: self) + try r.shutdown() + } + } +} diff --git a/swift/test/Ice/retry/Collocated.swift b/swift/test/Ice/retry/Collocated.swift new file mode 100644 index 00000000000..c2d5fdb0031 --- /dev/null +++ b/swift/test/Ice/retry/Collocated.swift @@ -0,0 +1,26 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import PromiseKit +import TestCommon + +class Collocated: TestHelperI { + public override func run(args: [String]) throws { + let writer = getWriter() + + let properties = try Ice.createProperties(args) + properties.setProperty(key: "Ice.Warn.Dispatch", value: "0") + + let communicator = try initialize(properties) + defer { + communicator.destroy() + } + communicator.getProperties().setProperty(key: "TestAdapter.Endpoints", value: getTestEndpoint(num: 0)) + let adapter = try communicator.createObjectAdapter("TestAdapter") + try adapter.add(servant: RetryDisp(RetryI()), id: Ice.stringToIdentity("retry")) + // try adapter.activate() // Don't activate OA to ensure collocation is used + _ = try allTests(helper: self) + } +} diff --git a/swift/test/Ice/retry/Server.swift b/swift/test/Ice/retry/Server.swift new file mode 100644 index 00000000000..c4f898bf6b0 --- /dev/null +++ b/swift/test/Ice/retry/Server.swift @@ -0,0 +1,26 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import TestCommon + +class Server: TestHelperI { + public override func run(args: [String]) throws { + let writer = getWriter() + + let properties = try Ice.createProperties(args) + properties.setProperty(key: "Ice.Warn.Dispatch", value: "0") + + let communicator = try initialize(properties) + defer { + communicator.destroy() + } + communicator.getProperties().setProperty(key: "TestAdapter.Endpoints", value: getTestEndpoint(num: 0)) + let adapter = try communicator.createObjectAdapter("TestAdapter") + try adapter.add(servant: RetryDisp(RetryI()), id: Ice.stringToIdentity("retry")) + try adapter.activate() + serverReady() + communicator.waitForShutdown() + } +} diff --git a/swift/test/Ice/retry/Test.ice b/swift/test/Ice/retry/Test.ice new file mode 100644 index 00000000000..d64ebef31b8 --- /dev/null +++ b/swift/test/Ice/retry/Test.ice @@ -0,0 +1,21 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#pragma once + +module Test +{ + +interface Retry +{ + void op(bool kill); + + idempotent int opIdempotent(int c); + void opNotIdempotent(); + void opSystemException(); + + idempotent void shutdown(); +} + +} diff --git a/swift/test/Ice/retry/TestI.swift b/swift/test/Ice/retry/TestI.swift new file mode 100644 index 00000000000..4623e85b244 --- /dev/null +++ b/swift/test/Ice/retry/TestI.swift @@ -0,0 +1,45 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice + +class RetryI: Retry { + var _counter: Int32 + + init() { + _counter = 0 + } + + func op(kill: Bool, current: Ice.Current) throws { + if kill { + if let con = current.con { + try con.close(.Forcefully) + } else { + throw Ice.ConnectionLostException(error: 1) + } + } + } + + func opIdempotent(c: Int32, current _: Ice.Current) throws -> Int32 { + if c > _counter { + _counter += 1 + throw Ice.ConnectionLostException(error: 1) + } + let counter = _counter + _counter = 0 + return counter + } + + func opNotIdempotent(current _: Ice.Current) throws { + throw Ice.ConnectionLostException(error: 1) + } + + func opSystemException(current _: Ice.Current) throws { + throw Ice.RuntimeError("") + } + + func shutdown(current: Ice.Current) { + current.adapter!.getCommunicator().shutdown() + } +} diff --git a/swift/test/Ice/scope/AllTests.swift b/swift/test/Ice/scope/AllTests.swift new file mode 100644 index 00000000000..ecd09756adf --- /dev/null +++ b/swift/test/Ice/scope/AllTests.swift @@ -0,0 +1,302 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import TestCommon + +func allTests(helper: TestHelper) throws { + func test(_ value: Bool, file: String = #file, line: Int = #line) throws { + try helper.test(value, file: file, line: line) + } + let output = helper.getWriter() + output.write("test same Slice type name in different scopes... ") + let communicator = helper.communicator() + + do { + let obj = try communicator.stringToProxy("i1:\(helper.getTestEndpoint())")! + let i = try checkedCast(prx: obj, type: IPrx.self)! + + let s1 = S(v: 0) + let (s3, s2) = try i.opS(s1) + try test(s2 == s1) + try test(s3 == s1) + + let sseq1 = [s1] + let (sseq3, sseq2) = try i.opSSeq(sseq1) + try test(sseq2 == sseq1) + try test(sseq3 == sseq1) + + let smap1 = ["a": s1] + let (smap3, smap2) = try i.opSMap(smap1) + try test(smap2 == smap1) + try test(smap3 == smap1) + + let c1 = C(s: s1) + let (c3, c2) = try i.opC(c1) + try test(c2!.s == s1) + try test(c3!.s == s1) + + let cseq1 = [c1] + var (cseq3, cseq2) = try i.opCSeq(cseq1) + try test(cseq2[0]!.s == s1) + try test(cseq3[0]!.s == s1) + + let cmap1 = ["a": c1] + let (cmap3, cmap2) = try i.opCMap(cmap1) + try test(cmap2["a"]!!.s == s1) + try test(cmap3["a"]!!.s == s1) + } + + do { + let obj = try communicator.stringToProxy("i1:\(helper.getTestEndpoint())")! + let i = try checkedCast(prx: obj, type: IPrx.self)! + + let s1 = S(v: 0) + let (s3, s2) = try i.opSAsync(s1).wait() + try test(s2 == s1) + try test(s3 == s1) + + let sseq1 = [s1] + let (sseq3, sseq2) = try i.opSSeqAsync(sseq1).wait() + try test(sseq2 == sseq1) + try test(sseq3 == sseq1) + + let smap1 = ["a": s1] + let (smap3, smap2) = try i.opSMapAsync(smap1).wait() + try test(smap2 == smap1) + try test(smap3 == smap1) + + let c1 = C(s: s1) + let (c3, c2) = try i.opCAsync(c1).wait() + try test(c2!.s == s1) + try test(c3!.s == s1) + + let cseq1 = [c1] + var (cseq3, cseq2) = try i.opCSeqAsync(cseq1).wait() + try test(cseq2[0]!.s == s1) + try test(cseq3[0]!.s == s1) + + let cmap1 = ["a": c1] + let (cmap3, cmap2) = try i.opCMapAsync(cmap1).wait() + try test(cmap2["a"]!!.s == s1) + try test(cmap3["a"]!!.s == s1) + } + + do { + let obj = try communicator.stringToProxy("i2:\(helper.getTestEndpoint())")! + let i = try checkedCast(prx: obj, type: InnerIPrx.self)! + + let s1 = InnerInner2S(v: 0) + let (s3, s2) = try i.opS(s1) + try test(s2 == s1) + try test(s3 == s1) + + let sseq1 = [s1] + let (sseq3, sseq2) = try i.opSSeq(sseq1) + try test(sseq2 == sseq1) + try test(sseq3 == sseq1) + + let smap1 = ["a": s1] + let (smap3, smap2) = try i.opSMap(smap1) + try test(smap2 == smap1) + try test(smap3 == smap1) + + let c1 = InnerInner2C(s: s1) + let (c3, c2) = try i.opC(c1) + try test(c2!.s == c1.s) + try test(c3!.s == c1.s) + + let cseq1 = [c1] + let (cseq3, cseq2) = try i.opCSeq(cseq1) + try test(cseq2[0]!.s == s1) + try test(cseq3[0]!.s == s1) + + let cmap1 = ["a": c1] + let (cmap3, cmap2) = try i.opCMap(cmap1) + try test(cmap2["a"]!!.s == s1) + try test(cmap3["a"]!!.s == s1) + } + + do { + let obj = try communicator.stringToProxy("i2:\(helper.getTestEndpoint())")! + let i = try checkedCast(prx: obj, type: InnerIPrx.self)! + + let s1 = InnerInner2S(v: 0) + let (s3, s2) = try i.opSAsync(s1).wait() + try test(s2 == s1) + try test(s3 == s1) + + let sseq1 = [s1] + let (sseq3, sseq2) = try i.opSSeqAsync(sseq1).wait() + try test(sseq2 == sseq1) + try test(sseq3 == sseq1) + + let smap1 = ["a": s1] + let (smap3, smap2) = try i.opSMapAsync(smap1).wait() + try test(smap2 == smap1) + try test(smap3 == smap1) + + let c1 = InnerInner2C(s: s1) + let (c3, c2) = try i.opCAsync(c1).wait() + try test(c2!.s == c1.s) + try test(c3!.s == c1.s) + + let cseq1 = [c1] + let (cseq3, cseq2) = try i.opCSeqAsync(cseq1).wait() + try test(cseq2[0]!.s == s1) + try test(cseq3[0]!.s == s1) + + let cmap1 = ["a": c1] + let (cmap3, cmap2) = try i.opCMapAsync(cmap1).wait() + try test(cmap2["a"]!!.s == s1) + try test(cmap3["a"]!!.s == s1) + } + + do { + let obj = try communicator.stringToProxy("i3:\(helper.getTestEndpoint())")! + let i = try checkedCast(prx: obj, type: InnerInner2IPrx.self)! + + let s1 = InnerInner2S(v: 0) + let (s3, s2) = try i.opS(s1) + try test(s2 == s1) + try test(s3 == s1) + + let sseq1 = [s1] + let (sseq3, sseq2) = try i.opSSeq(sseq1) + try test(sseq2[0] == s1) + try test(sseq3[0] == s1) + + let smap1 = ["a": s1] + let (smap3, smap2) = try i.opSMap(smap1) + try test(smap2 == smap1) + try test(smap3 == smap1) + + let c1 = InnerInner2C(s: s1) + let (c3, c2) = try i.opC(c1) + try test(c2!.s == s1) + try test(c3!.s == s1) + + let cseq1 = [c1] + let (cseq3, cseq2) = try i.opCSeq(cseq1) + try test(cseq2[0]!.s == s1) + try test(cseq3[0]!.s == s1) + + let cmap1 = ["a": c1] + let (cmap3, cmap2) = try i.opCMap(cmap1) + try test(cmap2["a"]!!.s == s1) + try test(cmap3["a"]!!.s == s1) + } + + do { + let obj = try communicator.stringToProxy("i3:\(helper.getTestEndpoint())")! + let i = try checkedCast(prx: obj, type: InnerInner2IPrx.self)! + + let s1 = InnerInner2S(v: 0) + let (s3, s2) = try i.opSAsync(s1).wait() + try test(s2 == s1) + try test(s3 == s1) + + let sseq1 = [s1] + let (sseq3, sseq2) = try i.opSSeqAsync(sseq1).wait() + try test(sseq2[0] == s1) + try test(sseq3[0] == s1) + + let smap1 = ["a": s1] + let (smap3, smap2) = try i.opSMapAsync(smap1).wait() + try test(smap2 == smap1) + try test(smap3 == smap1) + + let c1 = InnerInner2C(s: s1) + let (c3, c2) = try i.opCAsync(c1).wait() + try test(c2!.s == s1) + try test(c3!.s == s1) + + let cseq1 = [c1] + let (cseq3, cseq2) = try i.opCSeqAsync(cseq1).wait() + try test(cseq2[0]!.s == s1) + try test(cseq3[0]!.s == s1) + + let cmap1 = ["a": c1] + let (cmap3, cmap2) = try i.opCMapAsync(cmap1).wait() + try test(cmap2["a"]!!.s == s1) + try test(cmap3["a"]!!.s == s1) + } + + do { + let obj = try communicator.stringToProxy("i4:\(helper.getTestEndpoint())")! + let i = try checkedCast(prx: obj, type: InnerTestInner2IPrx.self)! + + let s1 = S(v: 0) + let (s3, s2) = try i.opS(s1) + try test(s2 == s1) + try test(s3 == s1) + + let sseq1 = [s1] + let (sseq3, sseq2) = try i.opSSeq(sseq1) + try test(sseq2[0] == s1) + try test(sseq3[0] == s1) + + let smap1 = ["a": s1] + let (smap3, smap2) = try i.opSMap(smap1) + try test(smap2 == smap1) + try test(smap3 == smap1) + + let c1 = C(s: s1) + let (c3, c2) = try i.opC(c1) + try test(c2!.s == s1) + try test(c3!.s == s1) + + let cseq1 = [c1] + let (cseq3, cseq2) = try i.opCSeq(cseq1) + try test(cseq2[0]!.s == s1) + try test(cseq3[0]!.s == s1) + + let cmap1 = ["a": c1] + let (cmap3, cmap2) = try i.opCMap(cmap1) + try test(cmap2["a"]!!.s == s1) + try test(cmap3["a"]!!.s == s1) + } + + do { + let obj = try communicator.stringToProxy("i4:\(helper.getTestEndpoint())")! + let i = try checkedCast(prx: obj, type: InnerTestInner2IPrx.self)! + + let s1 = S(v: 0) + let (s3, s2) = try i.opSAsync(s1).wait() + try test(s2 == s1) + try test(s3 == s1) + + let sseq1 = [s1] + let (sseq3, sseq2) = try i.opSSeqAsync(sseq1).wait() + try test(sseq2[0] == s1) + try test(sseq3[0] == s1) + + let smap1 = ["a": s1] + let (smap3, smap2) = try i.opSMapAsync(smap1).wait() + try test(smap2 == smap1) + try test(smap3 == smap1) + + let c1 = C(s: s1) + let (c3, c2) = try i.opC(c1) + try test(c2!.s == s1) + try test(c3!.s == s1) + + let cseq1 = [c1] + let (cseq3, cseq2) = try i.opCSeqAsync(cseq1).wait() + try test(cseq2[0]!.s == s1) + try test(cseq3[0]!.s == s1) + + let cmap1 = ["a": c1] + let (cmap3, cmap2) = try i.opCMapAsync(cmap1).wait() + try test(cmap2["a"]!!.s == s1) + try test(cmap3["a"]!!.s == s1) + } + + do { + let obj = try communicator.stringToProxy("i1:\(helper.getTestEndpoint())")! + let i = try checkedCast(prx: obj, type: IPrx.self)! + try i.shutdown() + } + output.writeLine("ok") +} diff --git a/swift/test/Ice/scope/Client.swift b/swift/test/Ice/scope/Client.swift new file mode 100644 index 00000000000..3e88b2c4cab --- /dev/null +++ b/swift/test/Ice/scope/Client.swift @@ -0,0 +1,19 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import TestCommon + +public class Client: TestHelperI { + public override func run(args: [String]) throws { + var initData = Ice.InitializationData() + initData.properties = try createTestProperties(args) + initData.classResolverPrefix = ["IceScope"] + let communicator = try initialize(initData) + defer { + communicator.destroy() + } + try allTests(helper: self) + } +} diff --git a/swift/test/Ice/scope/Server.swift b/swift/test/Ice/scope/Server.swift new file mode 100644 index 00000000000..36f9b40eb04 --- /dev/null +++ b/swift/test/Ice/scope/Server.swift @@ -0,0 +1,28 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import TestCommon + +class Server: TestHelperI { + public override func run(args: [String]) throws { + var initData = Ice.InitializationData() + initData.properties = try createTestProperties(args) + initData.classResolverPrefix = ["IceScope"] + let communicator = try initialize(initData) + defer { + communicator.destroy() + } + communicator.getProperties().setProperty(key: "TestAdapter.Endpoints", value: getTestEndpoint(num: 0)) + let adapter = try communicator.createObjectAdapter("TestAdapter") + + try adapter.add(servant: IDisp(I1()), id: Ice.stringToIdentity("i1")) + try adapter.add(servant: InnerIDisp(I2()), id: Ice.stringToIdentity("i2")) + try adapter.add(servant: InnerInner2IDisp(I3()), id: Ice.stringToIdentity("i3")) + try adapter.add(servant: InnerTestInner2IDisp(I4()), id: Ice.stringToIdentity("i4")) + try adapter.activate() + serverReady() + communicator.waitForShutdown() + } +} diff --git a/swift/test/Ice/scope/Test.ice b/swift/test/Ice/scope/Test.ice new file mode 100644 index 00000000000..c27026f94a7 --- /dev/null +++ b/swift/test/Ice/scope/Test.ice @@ -0,0 +1,137 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#pragma once + +module Test +{ + struct S + { + int v; + } + + dictionary<string, S> SMap; + sequence<S> SSeq; + + class C + { + S s; + } + + dictionary<string, C> CMap; + sequence<C> CSeq; + + interface I + { + S opS(S s1, out S s2); + SSeq opSSeq(SSeq s1, out SSeq s2); + SMap opSMap(SMap s1, out SMap s2); + + C opC(C c1, out C c2); + CSeq opCSeq(CSeq s1, out CSeq s2); + CMap opCMap(CMap c1, out CMap c2); + + void shutdown(); + } + + dictionary<string, I*> IMap; + sequence<I*> ISeq; + + module Inner + { + struct S + { + int v; + } + + module Inner2 + { + struct S + { + int v; + } + + dictionary<string, S> SMap; + sequence<S> SSeq; + + class C + { + S s; + } + + dictionary<string, C> CMap; + sequence<C> CSeq; + + interface I + { + S opS(S s1, out S s2); + SSeq opSSeq(SSeq s1, out SSeq s2); + SMap opSMap(SMap s1, out SMap s2); + + C opC(C c1, out C c2); + CSeq opCSeq(CSeq c1, out CSeq c2); + CMap opCMap(CMap c1, out CMap c2); + + void shutdown(); + } + + dictionary<string, I*> IMap; + sequence<I*> ISeq; + } + + class C + { + S s; + } + + sequence<Inner2::S> SSeq; + dictionary<string, Inner2::S> SMap; + + dictionary<string, Inner2::C> CMap; + sequence<Inner2::C> CSeq; + + interface I + { + Inner2::S opS(Inner2::S s1, out Inner2::S s2); + Inner2::SSeq opSSeq(Inner2::SSeq s1, out Inner2::SSeq s2); + Inner2::SMap opSMap(Inner2::SMap s1, out Inner2::SMap s2); + + Inner2::C opC(Inner2::C c1, out Inner2::C c2); + Inner2::CSeq opCSeq(Inner2::CSeq c1, out Inner2::CSeq c2); + Inner2::CMap opCMap(Inner2::CMap c1, out Inner2::CMap c2); + + void shutdown(); + } + + dictionary<string, I*> IMap; + sequence<I*> ISeq; + } +} + +["swift:module:Test:Inner"] +module Inner +{ + +module Test +{ + +module Inner2 +{ + interface I + { + Test::S opS(Test::S s1, out Test::S s2); + Test::SSeq opSSeq(Test::SSeq s1, out Test::SSeq s2); + Test::SMap opSMap(Test::SMap s1, out Test::SMap s2); + + Test::C opC(Test::C c1, out Test::C c2); + Test::CSeq opCSeq(Test::CSeq c1, out Test::CSeq c2); + Test::CMap opCMap(Test::CMap c1, out Test::CMap c2); + + void shutdown(); + } +} + +} + +} diff --git a/swift/test/Ice/scope/TestI.swift b/swift/test/Ice/scope/TestI.swift new file mode 100644 index 00000000000..28024fd8943 --- /dev/null +++ b/swift/test/Ice/scope/TestI.swift @@ -0,0 +1,127 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Foundation +import Ice +import TestCommon + +class I1: I { + func opS(s1: S, current _: Current) throws -> (returnValue: S, s2: S) { + return (s1, s1) + } + + func opSSeq(s1: SSeq, current _: Current) throws -> (returnValue: SSeq, s2: SSeq) { + return (s1, s1) + } + + func opSMap(s1: SMap, current _: Current) throws -> (returnValue: SMap, s2: SMap) { + return (s1, s1) + } + + func opC(c1: C?, current _: Current) throws -> (returnValue: C?, c2: C?) { + return (c1, c1) + } + + func opCSeq(s1: CSeq, current _: Current) throws -> (returnValue: CSeq, s2: CSeq) { + return (s1, s1) + } + + func opCMap(c1: CMap, current _: Current) throws -> (returnValue: CMap, c2: CMap) { + return (c1, c1) + } + + func shutdown(current: Current) throws { + current.adapter!.getCommunicator().shutdown() + } +} + +class I2: InnerI { + func opS(s1: InnerInner2S, current _: Current) throws -> (returnValue: InnerInner2S, s2: InnerInner2S) { + return (s1, s1) + } + + func opSSeq(s1: InnerInner2SSeq, current _: Current) throws -> (returnValue: InnerInner2SSeq, s2: InnerInner2SSeq) { + return (s1, s1) + } + + func opSMap(s1: InnerInner2SMap, current _: Current) throws -> (returnValue: InnerInner2SMap, s2: InnerInner2SMap) { + return (s1, s1) + } + + func opC(c1: InnerInner2C?, current _: Current) throws -> (returnValue: InnerInner2C?, c2: InnerInner2C?) { + return (c1, c1) + } + + func opCSeq(c1: InnerInner2CSeq, current _: Current) throws -> (returnValue: InnerInner2CSeq, c2: InnerInner2CSeq) { + return (c1, c1) + } + + func opCMap(c1: InnerInner2CMap, current _: Current) throws -> (returnValue: InnerInner2CMap, c2: InnerInner2CMap) { + return (c1, c1) + } + + func shutdown(current: Current) throws { + current.adapter!.getCommunicator().shutdown() + } +} + +class I3: InnerInner2I { + func opS(s1: InnerInner2S, current _: Current) throws -> (returnValue: InnerInner2S, s2: InnerInner2S) { + return (s1, s1) + } + + func opSSeq(s1: InnerInner2SSeq, current _: Current) throws -> (returnValue: InnerInner2SSeq, s2: InnerInner2SSeq) { + return (s1, s1) + } + + func opSMap(s1: InnerInner2SMap, current _: Current) throws -> (returnValue: InnerInner2SMap, s2: InnerInner2SMap) { + return (s1, s1) + } + + func opC(c1: InnerInner2C?, current _: Current) throws -> (returnValue: InnerInner2C?, c2: InnerInner2C?) { + return (c1, c1) + } + + func opCSeq(c1: InnerInner2CSeq, current _: Current) throws -> (returnValue: InnerInner2CSeq, c2: InnerInner2CSeq) { + return (c1, c1) + } + + func opCMap(c1: InnerInner2CMap, current _: Current) throws -> (returnValue: InnerInner2CMap, c2: InnerInner2CMap) { + return (c1, c1) + } + + func shutdown(current: Current) throws { + current.adapter!.getCommunicator().shutdown() + } +} + +class I4: InnerTestInner2I { + func opS(s1: S, current _: Current) throws -> (returnValue: S, s2: S) { + return (s1, s1) + } + + func opSSeq(s1: SSeq, current _: Current) throws -> (returnValue: SSeq, s2: SSeq) { + return (s1, s1) + } + + func opSMap(s1: SMap, current _: Current) throws -> (returnValue: SMap, s2: SMap) { + return (s1, s1) + } + + func opC(c1: C?, current _: Current) throws -> (returnValue: C?, c2: C?) { + return (c1, c1) + } + + func opCSeq(c1: CSeq, current _: Current) throws -> (returnValue: CSeq, c2: CSeq) { + return (c1, c1) + } + + func opCMap(c1: CMap, current _: Current) throws -> (returnValue: CMap, c2: CMap) { + return (c1, c1) + } + + func shutdown(current: Current) throws { + current.adapter!.getCommunicator().shutdown() + } +} diff --git a/swift/test/Ice/servantLocator/AllTests.swift b/swift/test/Ice/servantLocator/AllTests.swift new file mode 100644 index 00000000000..51232f4075d --- /dev/null +++ b/swift/test/Ice/servantLocator/AllTests.swift @@ -0,0 +1,208 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import TestCommon + +func testExceptions(_ obj: TestIntfPrx, _ helper: TestHelper) throws { + do { + try obj.requestFailedException() + try helper.test(false) + } catch let ex as Ice.ObjectNotExistException { + try helper.test(ex.id == obj.ice_getIdentity()) + try helper.test(ex.facet == obj.ice_getFacet()) + try helper.test(ex.operation == "requestFailedException") + } + + do { + try obj.unknownUserException() + try helper.test(false) + } catch let ex as Ice.UnknownUserException { + try helper.test(ex.unknown == "reason") + } + + do { + try obj.unknownLocalException() + try helper.test(false) + } catch let ex as Ice.UnknownLocalException { + try helper.test(ex.unknown == "reason") + } + + do { + try obj.unknownException() + try helper.test(false) + } catch let ex as Ice.UnknownException { + try helper.test(ex.unknown == "reason") + } + + do { + try obj.userException() + try helper.test(false) + } catch let ex as Ice.UnknownUserException { + try helper.test(ex.unknown.contains("Test::TestIntfUserException")) + } catch is Ice.OperationNotExistException {} + + do { + try obj.localException() + try helper.test(false) + } catch let ex as Ice.UnknownLocalException { + try helper.test(ex.unknown.contains("Ice::SocketException") || ex.unknown.contains("Ice.SocketException")) + } + + do { + try obj.unknownExceptionWithServantException() + try helper.test(false) + } catch let ex as Ice.UnknownException { + try helper.test(ex.unknown == "reason") + } + + do { + _ = try obj.impossibleException(false) + try helper.test(false) + } catch is Ice.UnknownUserException { + // Operation doesn't throw, but locate() and finished() throw TestIntfUserException. + } + + do { + _ = try obj.impossibleException(true) + try helper.test(false) + } catch is Ice.UnknownUserException { + // Operation throws TestImpossibleException, but locate() and finished() throw TestIntfUserException. + } + + do { + _ = try obj.intfUserException(false) + try helper.test(false) + } catch is TestImpossibleException { + // Operation doesn't throw, but locate() and finished() throw TestImpossibleException. + } + + do { + _ = try obj.intfUserException(true) + try helper.test(false) + } catch is TestImpossibleException { + // Operation throws TestIntfUserException, but locate() and finished() throw TestImpossibleException. + } +} + +func allTests(_ helper: TestHelper) throws -> TestIntfPrx { + func test(_ value: Bool, file: String = #file, line: Int = #line) throws { + try helper.test(value, file: file, line: line) + } + let output = helper.getWriter() + + let communicator = helper.communicator() + + output.write("testing stringToProxy... ") + var base = try communicator.stringToProxy("asm:\(helper.getTestEndpoint(num: 0))")! + output.writeLine("ok") + + output.write("testing checked cast... ") + var obj = try checkedCast(prx: base, type: TestIntfPrx.self)! + try test(obj == base) + output.writeLine("ok") + + output.write("testing ice_ids... ") + do { + let o = try communicator.stringToProxy("category/locate:\(helper.getTestEndpoint(num: 0))")! + _ = try o.ice_ids() + try test(false) + } catch let ex as Ice.UnknownUserException { + try test(ex.unknown == "::Test::TestIntfUserException") + } + + do { + let o = try communicator.stringToProxy("category/finished:\(helper.getTestEndpoint(num: 0))")! + _ = try o.ice_ids() + try test(false) + } catch let ex as Ice.UnknownUserException { + try test(ex.unknown == "::Test::TestIntfUserException") + } + output.writeLine("ok") + + output.write("testing servant locator...") + base = try communicator.stringToProxy("category/locate:\(helper.getTestEndpoint(num: 0))")! + obj = try checkedCast(prx: base, type: TestIntfPrx.self)! + do { + _ = try checkedCast(prx: communicator.stringToProxy("category/unknown:\(helper.getTestEndpoint(num: 0))")!, + type: TestIntfPrx.self) + } catch is Ice.ObjectNotExistException {} + output.writeLine("ok") + + output.write("testing default servant locator...") + base = try communicator.stringToProxy("anothercat/locate:\(helper.getTestEndpoint(num: 0))")! + obj = try checkedCast(prx: base, type: TestIntfPrx.self)! + base = try communicator.stringToProxy("locate:\(helper.getTestEndpoint(num: 0))")! + obj = try checkedCast(prx: base, type: TestIntfPrx.self)! + + do { + _ = try checkedCast(prx: communicator.stringToProxy("anothercat/unknown:\(helper.getTestEndpoint(num: 0))")!, + type: TestIntfPrx.self) + } catch is Ice.ObjectNotExistException {} + + do { + _ = try checkedCast(prx: communicator.stringToProxy("unknown:\(helper.getTestEndpoint(num: 0))")!, + type: TestIntfPrx.self) + } catch is Ice.ObjectNotExistException {} + output.writeLine("ok") + + output.write("testing locate exceptions... ") + base = try communicator.stringToProxy("category/locate:\(helper.getTestEndpoint(num: 0))")! + obj = try checkedCast(prx: base, type: TestIntfPrx.self)! + try testExceptions(obj, helper) + output.writeLine("ok") + + output.write("testing finished exceptions... ") + base = try communicator.stringToProxy("category/finished:\(helper.getTestEndpoint(num: 0))")! + obj = try checkedCast(prx: base, type: TestIntfPrx.self)! + try testExceptions(obj, helper) + + // + // Only call these for category/finished. + // + do { + try obj.asyncResponse() + } catch is TestIntfUserException { + try test(false) + } catch is TestImpossibleException { + // + // Called by finished(). + // + } + + // + // Only call these for category/finished. + // + do { + try obj.asyncException() + } catch is TestIntfUserException { + try test(false) + } catch is TestImpossibleException { + // + // Called by finished(). + // + } + output.writeLine("ok") + + output.write("testing servant locator removal... ") + base = try communicator.stringToProxy("test/activation:\(helper.getTestEndpoint(num: 0))")! + let activation = try checkedCast(prx: base, type: TestActivationPrx.self)! + try activation.activateServantLocator(false) + do { + try obj.ice_ping() + try test(false) + } catch is Ice.ObjectNotExistException { + output.writeLine("ok") + } + + output.write("testing servant locator addition... ") + try activation.activateServantLocator(true) + do { + try obj.ice_ping() + output.writeLine("ok") + } catch { + try test(false) + } + return obj +} diff --git a/swift/test/Ice/servantLocator/Client.swift b/swift/test/Ice/servantLocator/Client.swift new file mode 100644 index 00000000000..95a4940b0b5 --- /dev/null +++ b/swift/test/Ice/servantLocator/Client.swift @@ -0,0 +1,22 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import TestCommon + +public class Client: TestHelperI { + public override func run(args: [String]) throws { + let writer = getWriter() + + var initData = Ice.InitializationData() + initData.properties = try createTestProperties(args) + initData.classResolverPrefix = ["IceServantLocator"] + let communicator = try initialize(initData) + defer { + communicator.destroy() + } + let obj = try allTests(self) + try obj.shutdown() + } +} diff --git a/swift/test/Ice/servantLocator/Collocated.swift b/swift/test/Ice/servantLocator/Collocated.swift new file mode 100644 index 00000000000..97507da4bda --- /dev/null +++ b/swift/test/Ice/servantLocator/Collocated.swift @@ -0,0 +1,30 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import TestCommon + +class Collocated: TestHelperI { + public override func run(args: [String]) throws { + var initData = Ice.InitializationData() + initData.properties = try createTestProperties(args) + initData.classResolverPrefix = ["IceServantLocator"] + let communicator = try initialize(initData) + defer { + communicator.destroy() + } + + communicator.getProperties().setProperty(key: "TestAdapter.Endpoints", + value: getTestEndpoint(num: 0)) + communicator.getProperties().setProperty(key: "Ice.Warn.Dispatch", value: "0") + + let adapter = try communicator.createObjectAdapter("TestAdapter") + try adapter.addServantLocator(locator: ServantLocatorI("category", self), category: "category") + try adapter.addServantLocator(locator: ServantLocatorI("", self), category: "") + try adapter.add(servant: TestIntfDisp(TestI()), id: Ice.stringToIdentity("asm")) + try adapter.add(servant: TestActivationDisp(TestActivationI(self)), id: Ice.stringToIdentity("test/activation")) + try adapter.activate() + _ = try allTests(self) + } +} diff --git a/swift/test/Ice/servantLocator/ServantLocatorI.swift b/swift/test/Ice/servantLocator/ServantLocatorI.swift new file mode 100644 index 00000000000..60da3a4da18 --- /dev/null +++ b/swift/test/Ice/servantLocator/ServantLocatorI.swift @@ -0,0 +1,118 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Foundation +import Ice +import TestCommon + +class CookieI: Cookie { + func message() -> String { + return "blahblah" + } +} + +class ServantLocatorI: Ice.ServantLocator { + var _deactivated: Bool + var _category: String + var _requestId: Int32 + var _helper: TestHelper + var _lock = os_unfair_lock() + + init(_ category: String, _ helper: TestHelper) { + _category = category + _deactivated = false + _requestId = -1 + _helper = helper + } + + deinit { + withLock(&_lock) { + precondition(_deactivated) + } + } + + func locate(_ curr: Ice.Current) throws -> (returnValue: Ice.Disp?, cookie: AnyObject?) { + try withLock(&_lock) { + try _helper.test(!_deactivated) + } + + try _helper.test(curr.id.category == _category || _category == "") + + if curr.id.name == "unknown" { + return (nil, nil) + } + + try _helper.test(curr.id.name == "locate" || curr.id.name == "finished") + + if curr.id.name == "locate" { + try exception(curr) + } + + // + // Ensure locate() is only called once per request. + // + try _helper.test(_requestId == -1) + _requestId = curr.requestId + + return (TestIntfDisp(TestI()), CookieI()) + } + + func finished(curr: Ice.Current, servant _: Ice.Disp, cookie: AnyObject?) throws { + try withLock(&_lock) { + try _helper.test(!_deactivated) + } + + // + // Ensure finished() is only called once per request. + // + try _helper.test(_requestId == curr.requestId) + _requestId = -1 + + try _helper.test(curr.id.category == _category || _category == "") + try _helper.test(curr.id.name == "locate" || curr.id.name == "finished") + + if curr.id.name == "finished" { + try exception(curr) + } + + try _helper.test((cookie as! Cookie).message() == "blahblah") + } + + func deactivate(_: String) { + withLock(&_lock) { + precondition(!_deactivated) + self._deactivated = true + } + } + + func exception(_ current: Ice.Current) throws { + if current.operation == "ice_ids" { + throw TestIntfUserException() + } else if current.operation == "requestFailedException" { + throw Ice.ObjectNotExistException(id: current.id, facet: current.facet, operation: current.operation) + } else if current.operation == "unknownUserException" { + throw Ice.UnknownUserException(unknown: "reason") + } else if current.operation == "unknownLocalException" { + throw Ice.UnknownLocalException(unknown: "reason") + } else if current.operation == "unknownException" { + throw Ice.UnknownException(unknown: "reason") + } else if current.operation == "userException" { + throw TestIntfUserException() + } else if current.operation == "localException" { + throw Ice.SocketException(error: 0) + } else if current.operation == "csException" { + throw Ice.RuntimeError("message") + } else if current.operation == "unknownExceptionWithServantException" { + throw Ice.UnknownException(unknown: "reason") + } else if current.operation == "impossibleException" { + throw TestIntfUserException() // Yes, it really is meant to be TestIntfException. + } else if current.operation == "intfUserException" { + throw TestImpossibleException() // Yes, it really is meant to be TestImpossibleException. + } else if current.operation == "asyncResponse" { + throw TestImpossibleException() + } else if current.operation == "asyncException" { + throw TestImpossibleException() + } + } +} diff --git a/swift/test/Ice/servantLocator/Server.swift b/swift/test/Ice/servantLocator/Server.swift new file mode 100644 index 00000000000..d1b4e9780d5 --- /dev/null +++ b/swift/test/Ice/servantLocator/Server.swift @@ -0,0 +1,31 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import TestCommon + +class Server: TestHelperI { + public override func run(args: [String]) throws { + var initData = Ice.InitializationData() + initData.properties = try createTestProperties(args) + initData.classResolverPrefix = ["IceServantLocator"] + let communicator = try initialize(initData) + defer { + communicator.destroy() + } + + communicator.getProperties().setProperty(key: "TestAdapter.Endpoints", + value: getTestEndpoint(num: 0)) + communicator.getProperties().setProperty(key: "Ice.Warn.Dispatch", value: "0") + + let adapter = try communicator.createObjectAdapter("TestAdapter") + try adapter.addServantLocator(locator: ServantLocatorI("category", self), category: "category") + try adapter.addServantLocator(locator: ServantLocatorI("", self), category: "") + try adapter.add(servant: TestIntfDisp(TestI()), id: Ice.stringToIdentity("asm")) + try adapter.add(servant: TestActivationDisp(TestActivationI(self)), id: Ice.stringToIdentity("test/activation")) + try adapter.activate() + serverReady() + adapter.waitForDeactivate() + } +} diff --git a/swift/test/Ice/servantLocator/ServerAMD.swift b/swift/test/Ice/servantLocator/ServerAMD.swift new file mode 100644 index 00000000000..67ac190048e --- /dev/null +++ b/swift/test/Ice/servantLocator/ServerAMD.swift @@ -0,0 +1,31 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import TestCommon + +class ServerAMD: TestHelperI { + public override func run(args: [String]) throws { + var initData = Ice.InitializationData() + initData.properties = try createTestProperties(args) + initData.classResolverPrefix = ["IceServantLocator"] + let communicator = try initialize(initData) + defer { + communicator.destroy() + } + + communicator.getProperties().setProperty(key: "TestAdapter.Endpoints", + value: getTestEndpoint(num: 0)) + communicator.getProperties().setProperty(key: "Ice.Warn.Dispatch", value: "0") + + let adapter = try communicator.createObjectAdapter("TestAdapter") + try adapter.addServantLocator(locator: ServantLocatorI("category", self), category: "category") + try adapter.addServantLocator(locator: ServantLocatorI("", self), category: "") + try adapter.add(servant: TestIntfDisp(TestI()), id: Ice.stringToIdentity("asm")) + try adapter.add(servant: TestActivationDisp(TestActivationI(self)), id: Ice.stringToIdentity("test/activation")) + try adapter.activate() + serverReady() + adapter.waitForDeactivate() + } +} diff --git a/swift/test/Ice/servantLocator/Test.ice b/swift/test/Ice/servantLocator/Test.ice new file mode 100644 index 00000000000..d0e64478967 --- /dev/null +++ b/swift/test/Ice/servantLocator/Test.ice @@ -0,0 +1,52 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#pragma once + +[["swift:class-resolver-prefix:IceServantLocator"]] + +module Test +{ + +exception TestIntfUserException +{ +} + +exception TestImpossibleException +{ +} + +interface TestIntf +{ + void requestFailedException(); + void unknownUserException(); + void unknownLocalException(); + void unknownException(); + void localException(); + void userException(); + void stdException(); + void cppException(); + + void unknownExceptionWithServantException(); + + string impossibleException(bool throw) throws TestImpossibleException; + string intfUserException(bool throw) throws TestIntfUserException, TestImpossibleException; + + void asyncResponse() throws TestIntfUserException, TestImpossibleException; + void asyncException() throws TestIntfUserException, TestImpossibleException; + + void shutdown(); +} + +interface TestActivation +{ + void activateServantLocator(bool activate); +} + +local class Cookie +{ + ["cpp:const"] string message(); +} + +} diff --git a/swift/test/Ice/servantLocator/TestAMD.ice b/swift/test/Ice/servantLocator/TestAMD.ice new file mode 100644 index 00000000000..4fd8d7a9415 --- /dev/null +++ b/swift/test/Ice/servantLocator/TestAMD.ice @@ -0,0 +1,51 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#pragma once + +[["swift:class-resolver-prefix:IceServantLocatorAMD"]] + +module Test +{ + +exception TestIntfUserException +{ +} + +exception TestImpossibleException +{ +} + +["amd"] interface TestIntf +{ + void requestFailedException(); + void unknownUserException(); + void unknownLocalException(); + void unknownException(); + void localException(); + void userException(); + void csException(); + + void unknownExceptionWithServantException(); + + string impossibleException(bool throw) throws TestImpossibleException; + string intfUserException(bool throw) throws TestIntfUserException, TestImpossibleException; + + void asyncResponse() throws TestIntfUserException, TestImpossibleException; + void asyncException() throws TestIntfUserException, TestImpossibleException; + + void shutdown(); +} + +["amd"] interface TestActivation +{ + void activateServantLocator(bool activate); +} + +local class Cookie +{ + ["cpp:const"] string message(); +} + +} diff --git a/swift/test/Ice/servantLocator/TestAMDI.swift b/swift/test/Ice/servantLocator/TestAMDI.swift new file mode 100644 index 00000000000..1b4121f2d33 --- /dev/null +++ b/swift/test/Ice/servantLocator/TestAMDI.swift @@ -0,0 +1,111 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// +import Ice +import PromiseKit +import TestCommon + +class TestI: TestIntf { + func requestFailedExceptionAsync(current _: Current) -> Promise<Void> { + return Promise.value(()) + } + + func unknownUserExceptionAsync(current _: Current) -> Promise<Void> { + return Promise.value(()) + } + + func unknownLocalExceptionAsync(current _: Current) -> Promise<Void> { + return Promise.value(()) + } + + func unknownExceptionAsync(current _: Current) -> Promise<Void> { + return Promise.value(()) + } + + func localExceptionAsync(current _: Current) -> Promise<Void> { + return Promise.value(()) + } + + func userExceptionAsync(current _: Current) -> Promise<Void> { + return Promise.value(()) + } + + func csExceptionAsync(current _: Current) -> Promise<Void> { + return Promise.value(()) + } + + func unknownExceptionWithServantExceptionAsync(current: Current) -> Promise<Void> { + return Promise<Void> { seal in + seal.reject(ObjectNotExistException(id: current.id, facet: current.facet, operation: current.operation)) + } + } + + func impossibleExceptionAsync(throw t: Bool, current _: Current) -> Promise<String> { + return Promise<String> { seal in + if t { + seal.reject(TestImpossibleException()) + } else { + // + // Return a value so we can be sure that the stream position + // is reset correctly if finished() throws. + // + seal.fulfill("Hello") + } + } + } + + func intfUserExceptionAsync(throw t: Bool, current _: Current) -> Promise<String> { + return Promise<String> { seal in + if t { + seal.reject(TestIntfUserException()) + } else { + // + // Return a value so we can be sure that the stream position + // is reset correctly if finished() throws. + // + seal.fulfill("Hello") + } + } + } + + func asyncResponseAsync(current _: Current) -> Promise<Void> { + return Promise.value(()) + } + + func asyncExceptionAsync(current _: Current) -> Promise<Void> { + return Promise<Void> { seal in + seal.reject(TestIntfUserException()) + } + } + + func shutdownAsync(current: Current) -> Promise<Void> { + return Promise<Void> { seal in + current.adapter!.deactivate() + seal.fulfill(()) + } + } +} + +class TestActivationI: TestActivation { + var _helper: TestHelper + + init(_ helper: TestHelper) { + _helper = helper + } + + func activateServantLocatorAsync(activate: Bool, current: Current) -> Promise<Void> { + return Promise<Void> { seal in + if activate { + try current.adapter!.addServantLocator(locator: ServantLocatorI("", _helper), category: "") + try current.adapter!.addServantLocator(locator: ServantLocatorI("category", _helper), + category: "category") + } else { + var locator = try current.adapter!.removeServantLocator("") + locator.deactivate("") + locator = try current.adapter!.removeServantLocator("category") + locator.deactivate("category") + } + seal.fulfill(()) + } + } +} diff --git a/swift/test/Ice/servantLocator/TestI.swift b/swift/test/Ice/servantLocator/TestI.swift new file mode 100644 index 00000000000..efe0be34c45 --- /dev/null +++ b/swift/test/Ice/servantLocator/TestI.swift @@ -0,0 +1,89 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Foundation +import Ice +import TestCommon + +class TestI: TestIntf { + func requestFailedException(current _: Current) throws {} + + func unknownUserException(current _: Current) throws {} + + func unknownLocalException(current _: Current) throws {} + + func unknownException(current _: Current) throws {} + + func localException(current _: Current) throws {} + + func userException(current _: Current) throws {} + + func stdException(current _: Current) throws {} + + func cppException(current _: Current) throws {} + + func unknownExceptionWithServantException(current: Current) throws { + throw ObjectNotExistException(id: current.id, + facet: current.facet, + operation: current.operation) + } + + func impossibleException(throw t: Bool, current _: Current) throws -> String { + if t { + throw TestImpossibleException() + } + // + // Return a value so we can be sure that the stream position + // is reset correctly if finished() throws. + // + return "Hello" + } + + func intfUserException(throw t: Bool, current _: Current) throws -> String { + if t { + throw TestIntfUserException() + } + // + // Return a value so we can be sure that the stream position + // is reset correctly if finished() throws. + // + return "Hello" + } + + func asyncResponse(current _: Current) throws { + // + // Only relevant for AMD. + // + } + + func asyncException(current _: Current) throws { + // + // Only relevant for AMD. + // + } + + func shutdown(current: Current) throws { + current.adapter!.deactivate() + } +} + +class TestActivationI: TestActivation { + var _helper: TestHelper + + init(_ helper: TestHelper) { + _helper = helper + } + + func activateServantLocator(activate: Bool, current: Current) throws { + if activate { + try current.adapter!.addServantLocator(locator: ServantLocatorI("", _helper), category: "") + try current.adapter!.addServantLocator(locator: ServantLocatorI("category", _helper), category: "category") + } else { + var locator = try current.adapter!.removeServantLocator("") + locator.deactivate("") + locator = try current.adapter!.removeServantLocator("category") + locator.deactivate("category") + } + } +} diff --git a/swift/test/Ice/slicing/exceptions/AllTests.swift b/swift/test/Ice/slicing/exceptions/AllTests.swift new file mode 100644 index 00000000000..c7496600de7 --- /dev/null +++ b/swift/test/Ice/slicing/exceptions/AllTests.swift @@ -0,0 +1,597 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import PromiseKit +import TestCommon + +public func allTests(_ helper: TestHelper) throws -> TestIntfPrx { + func test(_ value: Bool, file: String = #file, line: Int = #line) throws { + try helper.test(value, file: file, line: line) + } + + let output = helper.getWriter() + let communicator = helper.communicator() + + output.write("testing stringToProxy... ") + let ref = "Test:\(helper.getTestEndpoint(num: 0)) -t 2000" + let base = try communicator.stringToProxy(ref)! + output.writeLine("ok") + + output.write("testing checked cast... ") + let testPrx = try checkedCast(prx: base, type: TestIntfPrx.self)! + try test(testPrx == base) + output.writeLine("ok") + + output.write("base... ") + do { + try testPrx.baseAsBase() + try test(false) + } catch let b as Base { + try test(b.b == "Base.b") + } + output.writeLine("ok") + + output.write("base (AMI)... ") + try Promise<Void> { seal in + firstly { + testPrx.baseAsBaseAsync() + }.done { + try test(false) + }.catch { e in + do { + if let b = e as? Base { + try test(b.b == "Base.b") + } else { + try test(false) + } + seal.fulfill(()) + } catch { + seal.reject(error) + } + } + }.wait() + output.writeLine("ok") + + output.write("slicing of unknown derived... ") + do { + try testPrx.unknownDerivedAsBase() + try test(false) + } catch let b as Base { + try test(b.b == "UnknownDerived.b") + } + output.writeLine("ok") + + output.write("slicing of unknown derived (AMI)... ") + try Promise<Void> { seal in + firstly { + testPrx.unknownDerivedAsBaseAsync() + }.done { + try test(false) + }.catch { e in + do { + if let b = e as? Base { + try test(b.b == "UnknownDerived.b") + } else { + try test(false) + } + seal.fulfill(()) + } catch { + seal.reject(error) + } + } + }.wait() + output.writeLine("ok") + + output.write("non-slicing of known derived as base... ") + do { + try testPrx.knownDerivedAsBase() + try test(false) + } catch let k as KnownDerived { + try test(k.b == "KnownDerived.b") + try test(k.kd == "KnownDerived.kd") + } + output.writeLine("ok") + + output.write("non-slicing of known derived as base (AMI)... ") + try Promise<Void> { seal in + firstly { + testPrx.knownDerivedAsBaseAsync() + }.done { + try test(false) + }.catch { e in + do { + if let k = e as? KnownDerived { + try test(k.b == "KnownDerived.b") + try test(k.kd == "KnownDerived.kd") + } else { + try test(false) + } + seal.fulfill(()) + } catch { + seal.reject(error) + } + } + }.wait() + output.writeLine("ok") + + output.write("non-slicing of known derived as derived... ") + do { + try testPrx.knownDerivedAsKnownDerived() + try test(false) + } catch let k as KnownDerived { + try test(k.b == "KnownDerived.b") + try test(k.kd == "KnownDerived.kd") + } + output.writeLine("ok") + + output.write("non-slicing of known derived as derived (AMI)... ") + try Promise<Void> { seal in + firstly { + testPrx.knownDerivedAsKnownDerivedAsync() + }.done { + try test(false) + }.catch { e in + do { + if let k = e as? KnownDerived { + try test(k.b == "KnownDerived.b") + try test(k.kd == "KnownDerived.kd") + } else { + try test(false) + } + seal.fulfill(()) + } catch { + seal.reject(error) + } + } + }.wait() + output.writeLine("ok") + + output.write("slicing of unknown intermediate as base... ") + do { + try testPrx.unknownIntermediateAsBase() + try test(false) + } catch let b as Base { + try test(b.b == "UnknownIntermediate.b") + } + output.writeLine("ok") + + output.write("slicing of unknown intermediate as base (AMI)... ") + try Promise<Void> { seal in + firstly { + testPrx.unknownIntermediateAsBaseAsync() + }.done { + try test(false) + }.catch { e in + do { + if let b = e as? Base { + try test(b.b == "UnknownIntermediate.b") + } else { + try test(false) + } + seal.fulfill(()) + } catch { + seal.reject(error) + } + } + }.wait() + output.writeLine("ok") + + output.write("slicing of known intermediate as base... ") + do { + try testPrx.knownIntermediateAsBase() + try test(false) + } catch let ki as KnownIntermediate { + try test(ki.b == "KnownIntermediate.b") + try test(ki.ki == "KnownIntermediate.ki") + } + output.writeLine("ok") + + output.write("slicing of known intermediate as base (AMI)... ") + try Promise<Void> { seal in + firstly { + testPrx.knownIntermediateAsBaseAsync() + }.done { + try test(false) + }.catch { e in + do { + if let ki = e as? KnownIntermediate { + try test(ki.b == "KnownIntermediate.b") + try test(ki.ki == "KnownIntermediate.ki") + } else { + try test(false) + } + seal.fulfill(()) + } catch { + seal.reject(error) + } + } + }.wait() + output.writeLine("ok") + + output.write("slicing of known most derived as base... ") + do { + try testPrx.knownMostDerivedAsBase() + try test(false) + } catch let kmd as KnownMostDerived { + try test(kmd.b == "KnownMostDerived.b") + try test(kmd.ki == "KnownMostDerived.ki") + try test(kmd.kmd == "KnownMostDerived.kmd") + } + output.writeLine("ok") + + output.write("slicing of known most derived as base (AMI)... ") + try Promise<Void> { seal in + firstly { + testPrx.knownMostDerivedAsBaseAsync() + }.done { + try test(false) + }.catch { e in + do { + if let kmd = e as? KnownMostDerived { + try test(kmd.b == "KnownMostDerived.b") + try test(kmd.ki == "KnownMostDerived.ki") + try test(kmd.kmd == "KnownMostDerived.kmd") + } else { + try test(false) + } + seal.fulfill(()) + } catch { + seal.reject(error) + } + } + }.wait() + output.writeLine("ok") + + output.write("non-slicing of known intermediate as intermediate... ") + do { + try testPrx.knownIntermediateAsKnownIntermediate() + try test(false) + } catch let ki as KnownIntermediate { + try test(ki.b == "KnownIntermediate.b") + try test(ki.ki == "KnownIntermediate.ki") + } + output.writeLine("ok") + + output.write("non-slicing of known intermediate as intermediate (AMI)... ") + try Promise<Void> { seal in + firstly { + testPrx.knownIntermediateAsKnownIntermediateAsync() + }.done { + try test(false) + }.catch { e in + do { + if let ki = e as? KnownIntermediate { + try test(ki.b == "KnownIntermediate.b") + try test(ki.ki == "KnownIntermediate.ki") + } else { + try test(false) + } + seal.fulfill(()) + } catch { + seal.reject(error) + } + } + }.wait() + output.writeLine("ok") + + output.write("non-slicing of known most derived as intermediate... ") + do { + try testPrx.knownMostDerivedAsKnownIntermediate() + try test(false) + } catch let kmd as KnownMostDerived { + try test(kmd.b == "KnownMostDerived.b") + try test(kmd.ki == "KnownMostDerived.ki") + try test(kmd.kmd == "KnownMostDerived.kmd") + } + output.writeLine("ok") + + output.write("non-slicing of known most derived as intermediate (AMI)... ") + try Promise<Void> { seal in + firstly { + testPrx.knownMostDerivedAsKnownIntermediateAsync() + }.done { + try test(false) + }.catch { e in + do { + if let kmd = e as? KnownMostDerived { + try test(kmd.b == "KnownMostDerived.b") + try test(kmd.ki == "KnownMostDerived.ki") + try test(kmd.kmd == "KnownMostDerived.kmd") + } else { + try test(false) + } + seal.fulfill(()) + } catch { + seal.reject(error) + } + } + }.wait() + output.writeLine("ok") + + output.write("non-slicing of known most derived as most derived... ") + do { + try testPrx.knownMostDerivedAsKnownMostDerived() + try test(false) + } catch let kmd as KnownMostDerived { + try test(kmd.b == "KnownMostDerived.b") + try test(kmd.ki == "KnownMostDerived.ki") + try test(kmd.kmd == "KnownMostDerived.kmd") + } + output.writeLine("ok") + + output.write("non-slicing of known most derived as most derived (AMI)... ") + try Promise<Void> { seal in + firstly { + testPrx.knownMostDerivedAsKnownMostDerivedAsync() + }.done { + try test(false) + }.catch { e in + do { + if let kmd = e as? KnownMostDerived { + try test(kmd.b == "KnownMostDerived.b") + try test(kmd.ki == "KnownMostDerived.ki") + try test(kmd.kmd == "KnownMostDerived.kmd") + } else { + try test(false) + } + seal.fulfill(()) + } catch { + seal.reject(error) + } + } + }.wait() + output.writeLine("ok") + + output.write("slicing of unknown most derived, known intermediate as base... ") + do { + try testPrx.unknownMostDerived1AsBase() + try test(false) + } catch let ki as KnownIntermediate { + try test(ki.b == "UnknownMostDerived1.b") + try test(ki.ki == "UnknownMostDerived1.ki") + } + output.writeLine("ok") + + output.write("slicing of unknown most derived, known intermediate as base (AMI)... ") + try Promise<Void> { seal in + firstly { + testPrx.unknownMostDerived1AsBaseAsync() + }.done { + try test(false) + }.catch { e in + do { + if let ki = e as? KnownIntermediate { + try test(ki.b == "UnknownMostDerived1.b") + try test(ki.ki == "UnknownMostDerived1.ki") + } else { + try test(false) + } + seal.fulfill(()) + } catch { + seal.reject(error) + } + } + }.wait() + output.writeLine("ok") + + output.write("slicing of unknown most derived, known intermediate as intermediate... ") + do { + try testPrx.unknownMostDerived1AsKnownIntermediate() + try test(false) + } catch let ki as KnownIntermediate { + try test(ki.b == "UnknownMostDerived1.b") + try test(ki.ki == "UnknownMostDerived1.ki") + } + output.writeLine("ok") + + output.write("slicing of unknown most derived, known intermediate as intermediate (AMI)... ") + try Promise<Void> { seal in + firstly { + testPrx.unknownMostDerived1AsKnownIntermediateAsync() + }.done { + try test(false) + }.catch { e in + do { + if let ki = e as? KnownIntermediate { + try test(ki.b == "UnknownMostDerived1.b") + try test(ki.ki == "UnknownMostDerived1.ki") + } else { + try test(false) + } + seal.fulfill(()) + } catch { + seal.reject(error) + } + } + }.wait() + output.writeLine("ok") + + output.write("slicing of unknown most derived, unknown intermediate thrown as base... ") + do { + try testPrx.unknownMostDerived2AsBase() + try test(false) + } catch let b as Base { + try test(b.b == "UnknownMostDerived2.b") + } + output.writeLine("ok") + + output.write("slicing of unknown most derived, unknown intermediate thrown as base (AMI)... ") + try Promise<Void> { seal in + firstly { + testPrx.unknownMostDerived2AsBaseAsync() + }.done { + try test(false) + }.catch { e in + do { + if let b = e as? Base { + try test(b.b == "UnknownMostDerived2.b") + } else { + try test(false) + } + seal.fulfill(()) + } catch { + seal.reject(error) + } + } + }.wait() + output.writeLine("ok") + + output.write("unknown most derived in compact format... ") + do { + try testPrx.unknownMostDerived2AsBaseCompact() + try test(false) + } catch is Base { + // + // For the 1.0 encoding, the unknown exception is sliced to Base. + // + try test(testPrx.ice_getEncodingVersion() == Ice.Encoding_1_0) + } catch is Ice.UnknownUserException { + // + // A MarshalException is raised for the compact format because the + // most-derived type is unknown and the exception cannot be sliced. + // + try test(testPrx.ice_getEncodingVersion() != Ice.Encoding_1_0) + } catch is Ice.OperationNotExistException {} + output.writeLine("ok") + + output.write("preserved exceptions... ") + do { + try testPrx.unknownPreservedAsBase() + try test(false) + } catch let ex as Base { + if testPrx.ice_getEncodingVersion() == Ice.Encoding_1_0 { + try test(ex.ice_getSlicedData() == nil) + } else { + let slicedData = ex.ice_getSlicedData()! + try test(slicedData.slices.count == 2) + try test(slicedData.slices[1].typeId == "::Test::SPreserved1") + try test(slicedData.slices[0].typeId == "::Test::SPreserved2") + } + } + + do { + try testPrx.unknownPreservedAsKnownPreserved() + try test(false) + } catch let ex as KnownPreserved { + try test(ex.kp == "preserved") + if testPrx.ice_getEncodingVersion() == Ice.Encoding_1_0 { + try test(ex.ice_getSlicedData() == nil) + } else { + let slicedData = ex.ice_getSlicedData()! + try test(slicedData.slices.count == 2) + try test(slicedData.slices[1].typeId == "::Test::SPreserved1") + try test(slicedData.slices[0].typeId == "::Test::SPreserved2") + } + } + + do { + let adapter = try communicator.createObjectAdapter("") + let relay = try uncheckedCast(prx: adapter.addWithUUID(RelayDisp(RelayI())), + type: RelayPrx.self) + try adapter.activate() + try testPrx.ice_getConnection()!.setAdapter(adapter) + + do { + try testPrx.relayKnownPreservedAsBase(relay) + try test(false) + } catch let ex as KnownPreservedDerived { + try test(ex.b == "base") + try test(ex.kp == "preserved") + try test(ex.kpd == "derived") + } catch is Ice.OperationNotExistException {} + + do { + try testPrx.relayKnownPreservedAsKnownPreserved(relay) + try test(false) + } catch let ex as KnownPreservedDerived { + try test(ex.b == "base") + try test(ex.kp == "preserved") + try test(ex.kpd == "derived") + } catch is Ice.OperationNotExistException {} + + do { + try testPrx.relayUnknownPreservedAsBase(relay) + try test(false) + } catch let ex as Preserved2 { + try test(ex.b == "base") + try test(ex.kp == "preserved") + try test(ex.kpd == "derived") + try test(ex.p1!.ice_id() == PreservedClass.ice_staticId()) + let pc = ex.p1 as? PreservedClass + try test(pc!.bc == "bc") + try test(pc!.pc == "pc") + try test(ex.p2 === ex.p1) + } catch let ex as KnownPreservedDerived { + // + // For the 1.0 encoding, the unknown exception is sliced to KnownPreserved. + // + try test(testPrx.ice_getEncodingVersion() == Ice.Encoding_1_0) + try test(ex.b == "base") + try test(ex.kp == "preserved") + try test(ex.kpd == "derived") + } catch is Ice.OperationNotExistException {} + + do { + try testPrx.relayUnknownPreservedAsKnownPreserved(relay) + try test(false) + } catch let ex as Preserved2 { + try test(ex.b == "base") + try test(ex.kp == "preserved") + try test(ex.kpd == "derived") + try test(ex.p1!.ice_id() == PreservedClass.ice_staticId()) + let pc = ex.p1 as? PreservedClass + try test(pc!.bc == "bc") + try test(pc!.pc == "pc") + try test(ex.p2 === ex.p1) + } catch let ex as KnownPreservedDerived { + // + // For the 1.0 encoding, the unknown exception is sliced to KnownPreserved. + // + try test(testPrx.ice_getEncodingVersion() == Ice.Encoding_1_0) + try test(ex.b == "base") + try test(ex.kp == "preserved") + try test(ex.kpd == "derived") + } catch is Ice.OperationNotExistException {} + + adapter.destroy() + } + output.writeLine("ok") + + return testPrx +} + +class RelayI: Relay { + func knownPreservedAsBase(current _: Current) throws { + throw KnownPreservedDerived(b: "base", + kp: "preserved", + kpd: "derived") + } + + func knownPreservedAsKnownPreserved(current _: Current) throws { + throw KnownPreservedDerived(b: "base", + kp: "preserved", + kpd: "derived") + } + + func unknownPreservedAsBase(current _: Current) throws { + let ex = Preserved2() + ex.b = "base" + ex.kp = "preserved" + ex.kpd = "derived" + ex.p1 = PreservedClass(bc: "bc", pc: "pc") + ex.p2 = ex.p1 + throw ex + } + + func unknownPreservedAsKnownPreserved(current _: Current) throws { + let ex = Preserved2() + ex.b = "base" + ex.kp = "preserved" + ex.kpd = "derived" + ex.p1 = PreservedClass(bc: "bc", pc: "pc") + ex.p2 = ex.p1 + throw ex + } +} diff --git a/swift/test/Ice/slicing/exceptions/Client.swift b/swift/test/Ice/slicing/exceptions/Client.swift new file mode 100644 index 00000000000..2c371b8bc10 --- /dev/null +++ b/swift/test/Ice/slicing/exceptions/Client.swift @@ -0,0 +1,21 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import PromiseKit +import TestCommon + +public class Client: TestHelperI { + public override func run(args: [String]) throws { + var initData = Ice.InitializationData() + initData.properties = try createTestProperties(args) + initData.classResolverPrefix = ["IceSlicingExceptions", "IceSlicingExceptionsClient"] + let communicator = try initialize(initData) + defer { + communicator.destroy() + } + let testIntf = try allTests(self) + try testIntf.shutdown() + } +} diff --git a/swift/test/Ice/slicing/exceptions/ClientPrivate.ice b/swift/test/Ice/slicing/exceptions/ClientPrivate.ice new file mode 100644 index 00000000000..017c8112d2a --- /dev/null +++ b/swift/test/Ice/slicing/exceptions/ClientPrivate.ice @@ -0,0 +1,29 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#pragma once + +#include <Test.ice> + +[["swift:class-resolver-prefix:IceSlicingExceptionsClient"]] + +module Test +{ + +class PreservedClass extends BaseClass +{ + string pc; +} + +exception Preserved1 extends KnownPreservedDerived +{ + BaseClass p1; +} + +exception Preserved2 extends Preserved1 +{ + BaseClass p2; +} + +} diff --git a/swift/test/Ice/slicing/exceptions/Server.swift b/swift/test/Ice/slicing/exceptions/Server.swift new file mode 100644 index 00000000000..47682c37419 --- /dev/null +++ b/swift/test/Ice/slicing/exceptions/Server.swift @@ -0,0 +1,27 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import TestCommon + +class Server: TestHelperI { + public override func run(args: [String]) throws { + let properties = try Ice.createProperties(args) + properties.setProperty(key: "Ice.Warn.Dispatch", value: "0") + var initData = InitializationData() + initData.properties = properties + initData.classResolverPrefix = ["IceSlicingExceptions", "IceSlicingExceptionsServer"] + let communicator = try initialize(initData) + defer { + communicator.destroy() + } + communicator.getProperties().setProperty(key: "TestAdapter.Endpoints", + value: "\(getTestEndpoint(num: 0)) -t 2000") + let adapter = try communicator.createObjectAdapter("TestAdapter") + try adapter.add(servant: TestIntfDisp(TestI(self)), id: Ice.stringToIdentity("Test")) + try adapter.activate() + serverReady() + communicator.waitForShutdown() + } +} diff --git a/swift/test/Ice/slicing/exceptions/ServerAMD.swift b/swift/test/Ice/slicing/exceptions/ServerAMD.swift new file mode 100644 index 00000000000..e8a946f1316 --- /dev/null +++ b/swift/test/Ice/slicing/exceptions/ServerAMD.swift @@ -0,0 +1,27 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import TestCommon + +class ServerAMD: TestHelperI { + public override func run(args: [String]) throws { + let properties = try Ice.createProperties(args) + properties.setProperty(key: "Ice.Warn.Dispatch", value: "0") + var initData = InitializationData() + initData.properties = properties + initData.classResolverPrefix = ["IceSlicingExceptionsAMD", "IceSlicingExceptionsServerAMD"] + let communicator = try initialize(initData) + defer { + communicator.destroy() + } + communicator.getProperties().setProperty(key: "TestAdapter.Endpoints", + value: "\(getTestEndpoint(num: 0)) -t 2000") + let adapter = try communicator.createObjectAdapter("TestAdapter") + try adapter.add(servant: TestIntfDisp(TestI(self)), id: Ice.stringToIdentity("Test")) + try adapter.activate() + serverReady() + communicator.waitForShutdown() + } +} diff --git a/swift/test/Ice/slicing/exceptions/ServerPrivate.ice b/swift/test/Ice/slicing/exceptions/ServerPrivate.ice new file mode 100644 index 00000000000..4b6621cecdc --- /dev/null +++ b/swift/test/Ice/slicing/exceptions/ServerPrivate.ice @@ -0,0 +1,49 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#pragma once + +#include <Test.ice> + +[["swift:class-resolver-prefix:IceSlicingExceptionsServer"]] + +module Test +{ + +exception UnknownDerived extends Base +{ + string ud; +} + +exception UnknownIntermediate extends Base +{ + string ui; +} + +exception UnknownMostDerived1 extends KnownIntermediate +{ + string umd1; +} + +exception UnknownMostDerived2 extends UnknownIntermediate +{ + string umd2; +} + +class SPreservedClass extends BaseClass +{ + string spc; +} + +exception SPreserved1 extends KnownPreservedDerived +{ + BaseClass p1; +} + +exception SPreserved2 extends SPreserved1 +{ + BaseClass p2; +} + +} diff --git a/swift/test/Ice/slicing/exceptions/ServerPrivateAMD.ice b/swift/test/Ice/slicing/exceptions/ServerPrivateAMD.ice new file mode 100644 index 00000000000..4013ffe5176 --- /dev/null +++ b/swift/test/Ice/slicing/exceptions/ServerPrivateAMD.ice @@ -0,0 +1,49 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#pragma once + +#include <TestAMD.ice> + +[["swift:class-resolver-prefix:IceSlicingExceptionsServerAMD"]] + +module Test +{ + +exception UnknownDerived extends Base +{ + string ud; +} + +exception UnknownIntermediate extends Base +{ + string ui; +} + +exception UnknownMostDerived1 extends KnownIntermediate +{ + string umd1; +} + +exception UnknownMostDerived2 extends UnknownIntermediate +{ + string umd2; +} + +class SPreservedClass extends BaseClass +{ + string spc; +} + +exception SPreserved1 extends KnownPreservedDerived +{ + BaseClass p1; +} + +exception SPreserved2 extends SPreserved1 +{ + BaseClass p2; +} + +} diff --git a/swift/test/Ice/slicing/exceptions/Test.ice b/swift/test/Ice/slicing/exceptions/Test.ice new file mode 100644 index 00000000000..fd05ecc04a1 --- /dev/null +++ b/swift/test/Ice/slicing/exceptions/Test.ice @@ -0,0 +1,94 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#pragma once + +[["swift:class-resolver-prefix:IceSlicingExceptions"]] +module Test +{ + +exception Base +{ + string b; +} + +exception KnownDerived extends Base +{ + string kd; +} + +exception KnownIntermediate extends Base +{ + string ki; +} + +exception KnownMostDerived extends KnownIntermediate +{ + string kmd; +} + +["preserve-slice"] +exception KnownPreserved extends Base +{ + string kp; +} + +exception KnownPreservedDerived extends KnownPreserved +{ + string kpd; +} + +["preserve-slice"] +class BaseClass +{ + string bc; +} + +["format:sliced"] +interface Relay +{ + void knownPreservedAsBase() throws Base; + void knownPreservedAsKnownPreserved() throws KnownPreserved; + + void unknownPreservedAsBase() throws Base; + void unknownPreservedAsKnownPreserved() throws KnownPreserved; +} + +["format:sliced"] +interface TestIntf +{ + void baseAsBase() throws Base; + void unknownDerivedAsBase() throws Base; + void knownDerivedAsBase() throws Base; + void knownDerivedAsKnownDerived() throws KnownDerived; + + void unknownIntermediateAsBase() throws Base; + void knownIntermediateAsBase() throws Base; + void knownMostDerivedAsBase() throws Base; + void knownIntermediateAsKnownIntermediate() throws KnownIntermediate; + void knownMostDerivedAsKnownIntermediate() throws KnownIntermediate; + void knownMostDerivedAsKnownMostDerived() throws KnownMostDerived; + + void unknownMostDerived1AsBase() throws Base; + void unknownMostDerived1AsKnownIntermediate() throws KnownIntermediate; + void unknownMostDerived2AsBase() throws Base; + + ["format:compact"] void unknownMostDerived2AsBaseCompact() throws Base; + + void knownPreservedAsBase() throws Base; + void knownPreservedAsKnownPreserved() throws KnownPreserved; + + void relayKnownPreservedAsBase(Relay* r) throws Base; + void relayKnownPreservedAsKnownPreserved(Relay* r) throws KnownPreserved; + + void unknownPreservedAsBase() throws Base; + void unknownPreservedAsKnownPreserved() throws KnownPreserved; + + void relayUnknownPreservedAsBase(Relay* r) throws Base; + void relayUnknownPreservedAsKnownPreserved(Relay* r) throws KnownPreserved; + + void shutdown(); +} + +} diff --git a/swift/test/Ice/slicing/exceptions/TestAMD.ice b/swift/test/Ice/slicing/exceptions/TestAMD.ice new file mode 100644 index 00000000000..4918c494953 --- /dev/null +++ b/swift/test/Ice/slicing/exceptions/TestAMD.ice @@ -0,0 +1,94 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#pragma once + +[["swift:class-resolver-prefix:IceSlicingExceptionsAMD"]] +module Test +{ + +exception Base +{ + string b; +} + +exception KnownDerived extends Base +{ + string kd; +} + +exception KnownIntermediate extends Base +{ + string ki; +} + +exception KnownMostDerived extends KnownIntermediate +{ + string kmd; +} + +["preserve-slice"] +exception KnownPreserved extends Base +{ + string kp; +} + +exception KnownPreservedDerived extends KnownPreserved +{ + string kpd; +} + +["preserve-slice"] +class BaseClass +{ + string bc; +} + +["format:sliced"] +interface Relay +{ + void knownPreservedAsBase() throws Base; + void knownPreservedAsKnownPreserved() throws KnownPreserved; + + void unknownPreservedAsBase() throws Base; + void unknownPreservedAsKnownPreserved() throws KnownPreserved; +} + +["amd", "format:sliced"] +interface TestIntf +{ + void baseAsBase() throws Base; + void unknownDerivedAsBase() throws Base; + void knownDerivedAsBase() throws Base; + void knownDerivedAsKnownDerived() throws KnownDerived; + + void unknownIntermediateAsBase() throws Base; + void knownIntermediateAsBase() throws Base; + void knownMostDerivedAsBase() throws Base; + void knownIntermediateAsKnownIntermediate() throws KnownIntermediate; + void knownMostDerivedAsKnownIntermediate() throws KnownIntermediate; + void knownMostDerivedAsKnownMostDerived() throws KnownMostDerived; + + void unknownMostDerived1AsBase() throws Base; + void unknownMostDerived1AsKnownIntermediate() throws KnownIntermediate; + void unknownMostDerived2AsBase() throws Base; + + ["format:compact"] void unknownMostDerived2AsBaseCompact() throws Base; + + void knownPreservedAsBase() throws Base; + void knownPreservedAsKnownPreserved() throws KnownPreserved; + + void relayKnownPreservedAsBase(Relay* r) throws Base; + void relayKnownPreservedAsKnownPreserved(Relay* r) throws KnownPreserved; + + void unknownPreservedAsBase() throws Base; + void unknownPreservedAsKnownPreserved() throws KnownPreserved; + + void relayUnknownPreservedAsBase(Relay* r) throws Base; + void relayUnknownPreservedAsKnownPreserved(Relay* r) throws KnownPreserved; + + void shutdown(); +} + +} diff --git a/swift/test/Ice/slicing/exceptions/TestAMDI.swift b/swift/test/Ice/slicing/exceptions/TestAMDI.swift new file mode 100644 index 00000000000..58c3465d056 --- /dev/null +++ b/swift/test/Ice/slicing/exceptions/TestAMDI.swift @@ -0,0 +1,192 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import PromiseKit +import TestCommon + +class TestI: TestIntf { + var _helper: TestHelper + + init(_ helper: TestHelper) { + _helper = helper + } + + func baseAsBaseAsync(current _: Current) -> Promise<Void> { + return Promise<Void> { _ in + throw Base(b: "Base.b") + } + } + + func unknownDerivedAsBaseAsync(current _: Current) -> Promise<Void> { + return Promise<Void> { _ in + throw UnknownDerived(b: "UnknownDerived.b", ud: "UnknownDerived.ud") + } + } + + func knownDerivedAsBaseAsync(current _: Current) -> Promise<Void> { + return Promise<Void> { _ in + throw KnownDerived(b: "KnownDerived.b", kd: "KnownDerived.kd") + } + } + + func knownDerivedAsKnownDerivedAsync(current _: Current) -> Promise<Void> { + return Promise<Void> { _ in + throw KnownDerived(b: "KnownDerived.b", kd: "KnownDerived.kd") + } + } + + func unknownIntermediateAsBaseAsync(current _: Current) -> Promise<Void> { + return Promise<Void> { _ in + throw UnknownIntermediate(b: "UnknownIntermediate.b", ui: "UnknownIntermediate.ui") + } + } + + func knownIntermediateAsBaseAsync(current _: Current) -> Promise<Void> { + return Promise<Void> { _ in + throw KnownIntermediate(b: "KnownIntermediate.b", ki: "KnownIntermediate.ki") + } + } + + func knownMostDerivedAsBaseAsync(current _: Current) -> Promise<Void> { + return Promise<Void> { _ in + throw KnownMostDerived(b: "KnownMostDerived.b", ki: "KnownMostDerived.ki", kmd: "KnownMostDerived.kmd") + } + } + + func knownIntermediateAsKnownIntermediateAsync(current _: Current) -> Promise<Void> { + return Promise<Void> { _ in + throw KnownIntermediate(b: "KnownIntermediate.b", ki: "KnownIntermediate.ki") + } + } + + func knownMostDerivedAsKnownIntermediateAsync(current _: Current) -> Promise<Void> { + return Promise<Void> { _ in + throw KnownMostDerived(b: "KnownMostDerived.b", ki: "KnownMostDerived.ki", kmd: "KnownMostDerived.kmd") + } + } + + func knownMostDerivedAsKnownMostDerivedAsync(current _: Current) -> Promise<Void> { + return Promise<Void> { _ in + throw KnownMostDerived(b: "KnownMostDerived.b", + ki: "KnownMostDerived.ki", + kmd: "KnownMostDerived.kmd") + } + } + + func unknownMostDerived1AsBaseAsync(current _: Current) -> Promise<Void> { + return Promise<Void> { _ in + throw UnknownMostDerived1(b: "UnknownMostDerived1.b", + ki: "UnknownMostDerived1.ki", + umd1: "UnknownMostDerived1.umd1") + } + } + + func unknownMostDerived1AsKnownIntermediateAsync(current _: Current) -> Promise<Void> { + return Promise<Void> { _ in + throw UnknownMostDerived1(b: "UnknownMostDerived1.b", + ki: "UnknownMostDerived1.ki", + umd1: "UnknownMostDerived1.umd1") + } + } + + func unknownMostDerived2AsBaseAsync(current _: Current) -> Promise<Void> { + return Promise<Void> { _ in + throw UnknownMostDerived2(b: "UnknownMostDerived2.b", + ui: "UnknownMostDerived2.ui", + umd2: "UnknownMostDerived2.umd2") + } + } + + func unknownMostDerived2AsBaseCompactAsync(current _: Current) -> Promise<Void> { + return Promise<Void> { _ in + throw UnknownMostDerived2(b: "UnknownMostDerived2.b", + ui: "UnknownMostDerived2.ui", + umd2: "UnknownMostDerived2.umd2") + } + } + + func knownPreservedAsBaseAsync(current _: Current) -> Promise<Void> { + return Promise<Void> { _ in + throw KnownPreservedDerived(b: "base", + kp: "preserved", + kpd: "derived") + } + } + + func knownPreservedAsKnownPreservedAsync(current _: Current) -> Promise<Void> { + return Promise<Void> { _ in + throw KnownPreservedDerived(b: "base", + kp: "preserved", + kpd: "derived") + } + } + + func relayKnownPreservedAsBaseAsync(r: RelayPrx?, current: Current) -> Promise<Void> { + return Promise<Void> { _ in + let p = try uncheckedCast(prx: current.con!.createProxy(r!.ice_getIdentity()), + type: RelayPrx.self) + try p.knownPreservedAsBase() + try _helper.test(false) + } + } + + func relayKnownPreservedAsKnownPreservedAsync(r: RelayPrx?, current: Current) -> Promise<Void> { + return Promise<Void> { _ in + let p = try uncheckedCast(prx: current.con!.createProxy(r!.ice_getIdentity()), + type: RelayPrx.self) + try p.knownPreservedAsKnownPreserved() + try _helper.test(false) + } + } + + func unknownPreservedAsBaseAsync(current _: Current) -> Promise<Void> { + return Promise<Void> { _ in + let ex = SPreserved2() + ex.b = "base" + ex.kp = "preserved" + ex.kpd = "derived" + ex.p1 = SPreservedClass(bc: "bc", spc: "spc") + ex.p2 = ex.p1 + throw ex + } + } + + func unknownPreservedAsKnownPreservedAsync(current _: Current) -> Promise<Void> { + return Promise<Void> { _ in + let ex = SPreserved2() + ex.b = "base" + ex.kp = "preserved" + ex.kpd = "derived" + ex.p1 = SPreservedClass(bc: "bc", spc: "spc") + ex.p2 = ex.p1 + throw ex + } + } + + func relayUnknownPreservedAsBaseAsync(r: RelayPrx?, current: Current) -> Promise<Void> { + return Promise<Void> { _ in + let p = try uncheckedCast(prx: current.con!.createProxy(r!.ice_getIdentity()), + type: RelayPrx.self) + try p.unknownPreservedAsBase() + try _helper.test(false) + } + } + + func relayUnknownPreservedAsKnownPreservedAsync(r: RelayPrx?, current: Current) -> Promise<Void> { + return Promise<Void> { _ in + let p = try uncheckedCast(prx: current.con!.createProxy(r!.ice_getIdentity()), + type: RelayPrx.self) + try p.unknownPreservedAsKnownPreserved() + try _helper.test(false) + } + } + + func shutdownAsync(current: Current) -> Promise<Void> { + return Promise<Void> { seal in + current.adapter!.getCommunicator().shutdown() + seal.fulfill(()) + } + } +} diff --git a/swift/test/Ice/slicing/exceptions/TestI.swift b/swift/test/Ice/slicing/exceptions/TestI.swift new file mode 100644 index 00000000000..ac4bf2b25c7 --- /dev/null +++ b/swift/test/Ice/slicing/exceptions/TestI.swift @@ -0,0 +1,144 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import TestCommon + +class TestI: TestIntf { + var _helper: TestHelper + + init(_ helper: TestHelper) { + _helper = helper + } + + func baseAsBase(current _: Current) throws { + throw Base(b: "Base.b") + } + + func unknownDerivedAsBase(current _: Current) throws { + throw UnknownDerived(b: "UnknownDerived.b", ud: "UnknownDerived.ud") + } + + func knownDerivedAsBase(current _: Current) throws { + throw KnownDerived(b: "KnownDerived.b", kd: "KnownDerived.kd") + } + + func knownDerivedAsKnownDerived(current _: Current) throws { + throw KnownDerived(b: "KnownDerived.b", kd: "KnownDerived.kd") + } + + func unknownIntermediateAsBase(current _: Current) throws { + throw UnknownIntermediate(b: "UnknownIntermediate.b", ui: "UnknownIntermediate.ui") + } + + func knownIntermediateAsBase(current _: Current) throws { + throw KnownIntermediate(b: "KnownIntermediate.b", ki: "KnownIntermediate.ki") + } + + func knownMostDerivedAsBase(current _: Current) throws { + throw KnownMostDerived(b: "KnownMostDerived.b", ki: "KnownMostDerived.ki", kmd: "KnownMostDerived.kmd") + } + + func knownIntermediateAsKnownIntermediate(current _: Current) throws { + throw KnownIntermediate(b: "KnownIntermediate.b", ki: "KnownIntermediate.ki") + } + + func knownMostDerivedAsKnownIntermediate(current _: Current) throws { + throw KnownMostDerived(b: "KnownMostDerived.b", ki: "KnownMostDerived.ki", kmd: "KnownMostDerived.kmd") + } + + func knownMostDerivedAsKnownMostDerived(current _: Current) throws { + throw KnownMostDerived(b: "KnownMostDerived.b", + ki: "KnownMostDerived.ki", + kmd: "KnownMostDerived.kmd") + } + + func unknownMostDerived1AsBase(current _: Current) throws { + throw UnknownMostDerived1(b: "UnknownMostDerived1.b", + ki: "UnknownMostDerived1.ki", + umd1: "UnknownMostDerived1.umd1") + } + + func unknownMostDerived1AsKnownIntermediate(current _: Current) throws { + throw UnknownMostDerived1(b: "UnknownMostDerived1.b", + ki: "UnknownMostDerived1.ki", + umd1: "UnknownMostDerived1.umd1") + } + + func unknownMostDerived2AsBase(current _: Current) throws { + throw UnknownMostDerived2(b: "UnknownMostDerived2.b", + ui: "UnknownMostDerived2.ui", + umd2: "UnknownMostDerived2.umd2") + } + + func unknownMostDerived2AsBaseCompact(current _: Current) throws { + throw UnknownMostDerived2(b: "UnknownMostDerived2.b", + ui: "UnknownMostDerived2.ui", + umd2: "UnknownMostDerived2.umd2") + } + + func knownPreservedAsBase(current _: Current) throws { + throw KnownPreservedDerived(b: "base", + kp: "preserved", + kpd: "derived") + } + + func knownPreservedAsKnownPreserved(current _: Current) throws { + throw KnownPreservedDerived(b: "base", + kp: "preserved", + kpd: "derived") + } + + func relayKnownPreservedAsBase(r: RelayPrx?, current: Current) throws { + let p = try uncheckedCast(prx: current.con!.createProxy(r!.ice_getIdentity()), + type: RelayPrx.self) + try p.knownPreservedAsBase() + try _helper.test(false) + } + + func relayKnownPreservedAsKnownPreserved(r: RelayPrx?, current: Current) throws { + let p = try uncheckedCast(prx: current.con!.createProxy(r!.ice_getIdentity()), + type: RelayPrx.self) + try p.knownPreservedAsKnownPreserved() + try _helper.test(false) + } + + func unknownPreservedAsBase(current _: Current) throws { + let ex = SPreserved2() + ex.b = "base" + ex.kp = "preserved" + ex.kpd = "derived" + ex.p1 = SPreservedClass(bc: "bc", spc: "spc") + ex.p2 = ex.p1 + throw ex + } + + func unknownPreservedAsKnownPreserved(current _: Current) throws { + let ex = SPreserved2() + ex.b = "base" + ex.kp = "preserved" + ex.kpd = "derived" + ex.p1 = SPreservedClass(bc: "bc", spc: "spc") + ex.p2 = ex.p1 + throw ex + } + + func relayUnknownPreservedAsBase(r: RelayPrx?, current: Current) throws { + let p = try uncheckedCast(prx: current.con!.createProxy(r!.ice_getIdentity()), + type: RelayPrx.self) + try p.unknownPreservedAsBase() + try _helper.test(false) + } + + func relayUnknownPreservedAsKnownPreserved(r: RelayPrx?, current: Current) throws { + let p = try uncheckedCast(prx: current.con!.createProxy(r!.ice_getIdentity()), + type: RelayPrx.self) + try p.unknownPreservedAsKnownPreserved() + try _helper.test(false) + } + + func shutdown(current: Current) throws { + current.adapter!.getCommunicator().shutdown() + } +} diff --git a/swift/test/Ice/slicing/objects/AllTests.swift b/swift/test/Ice/slicing/objects/AllTests.swift new file mode 100644 index 00000000000..2810ea46bd9 --- /dev/null +++ b/swift/test/Ice/slicing/objects/AllTests.swift @@ -0,0 +1,1847 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Dispatch +import Foundation +import Ice +import PromiseKit +import TestCommon + +public func allTests(_ helper: TestHelper) throws -> TestIntfPrx { + func test(_ value: Bool, file: String = #file, line: Int = #line) throws { + try helper.test(value, file: file, line: line) + } + + let output = helper.getWriter() + let communicator = helper.communicator() + + output.write("testing stringToProxy... ") + let basePrx = try communicator.stringToProxy("Test:\(helper.getTestEndpoint(num: 0)) -t 2000")! + output.writeLine("ok") + + output.write("testing checked cast... ") + let testPrx = try checkedCast(prx: basePrx, type: TestIntfPrx.self)! + try test(testPrx == basePrx) + output.writeLine("ok") + + output.write("base as Object... ") + do { + let o = try testPrx.SBaseAsObject() + let sb = o as! SBase + try test(sb.ice_id() == "::Test::SBase") + try test(sb.sb == "SBase.sb") + } + output.writeLine("ok") + + output.write("base as Object (AMI)... ") + try Promise<Void> { seal in + firstly { + testPrx.SBaseAsObjectAsync() + }.map { o in + let sb = o as! SBase + try test(sb.ice_id() == "::Test::SBase") + try test(sb.sb == "SBase.sb") + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + output.writeLine("ok") + + output.write("base as base... ") + do { + let sb = try testPrx.SBaseAsSBase()! + try test(sb.sb == "SBase.sb") + } + output.writeLine("ok") + + output.write("base as base (AMI)... ") + try Promise<Void> { seal in + firstly { + testPrx.SBaseAsSBaseAsync() + }.done { sb in + try test(sb!.sb == "SBase.sb") + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + output.writeLine("ok") + + output.write("base with known derived as base... ") + do { + let sb = try testPrx.SBSKnownDerivedAsSBase()! + try test(sb.sb == "SBSKnownDerived.sb") + let sbskd = sb as! SBSKnownDerived + try test(sbskd.sbskd == "SBSKnownDerived.sbskd") + } + output.writeLine("ok") + + output.write("base with known derived as base (AMI)... ") + try Promise<Void> { seal in + firstly { + testPrx.SBSKnownDerivedAsSBaseAsync() + }.done { sb in + try test(sb!.sb == "SBSKnownDerived.sb") + let sbskd = sb as! SBSKnownDerived + try test(sbskd.sbskd == "SBSKnownDerived.sbskd") + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + output.writeLine("ok") + + output.write("base with known derived as known derived... ") + do { + let sbskd = try testPrx.SBSKnownDerivedAsSBSKnownDerived()! + try test(sbskd.sbskd == "SBSKnownDerived.sbskd") + } + output.writeLine("ok") + + output.write("base with known derived as known derived (AMI)... ") + try Promise<Void> { seal in + firstly { + testPrx.SBSKnownDerivedAsSBSKnownDerivedAsync() + }.done { sbskd in + try test(sbskd!.sbskd == "SBSKnownDerived.sbskd") + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + output.writeLine("ok") + + output.write("base with unknown derived as base... ") + do { + let sb = try testPrx.SBSUnknownDerivedAsSBase()! + try test(sb.sb == "SBSUnknownDerived.sb") + } + + if testPrx.ice_getEncodingVersion() == Ice.Encoding_1_0 { + do { + let sb = try testPrx.SBSUnknownDerivedAsSBaseCompact()! + try test(sb.sb == "SBSUnknownDerived.sb") + } + } else { + do { + // + // This test fails when using the compact format because the instance cannot + // be sliced to a known type. + // + _ = try testPrx.SBSUnknownDerivedAsSBaseCompact() + try test(false) + } catch is Ice.NoValueFactoryException { // Expected. + } + } + output.writeLine("ok") + + output.write("base with unknown derived as base (AMI)... ") + try Promise<Void> { seal in + firstly { + testPrx.SBSUnknownDerivedAsSBaseAsync() + }.done { sb in + try test(sb!.sb == "SBSUnknownDerived.sb") + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + + if testPrx.ice_getEncodingVersion() == Ice.Encoding_1_0 { + // + // This test succeeds for the 1.0 encoding. + // + try Promise<Void> { seal in + firstly { + testPrx.SBSUnknownDerivedAsSBaseCompactAsync() + }.done { sb in + try test(sb!.sb == "SBSUnknownDerived.sb") + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + } else { + // + // This test fails when using the compact format because the instance cannot + // be sliced to a known type. + // + try Promise<Void> { seal in + firstly { + testPrx.SBSUnknownDerivedAsSBaseCompactAsync() + }.done { _ in + try test(false) + }.catch { ex in + do { + try test(ex is Ice.NoValueFactoryException) + seal.fulfill(()) + } catch { + seal.reject(error) + } + } + }.wait() + } + output.writeLine("ok") + + output.write("unknown with Object as Object... ") + do { + let o = try testPrx.SUnknownAsObject()! + try test(testPrx.ice_getEncodingVersion() != Ice.Encoding_1_0) + try test(o is Ice.UnknownSlicedValue) + try test((o as! Ice.UnknownSlicedValue).ice_id() == "::Test::SUnknown") + try test((o as! Ice.UnknownSlicedValue).ice_getSlicedData() != nil) + try testPrx.checkSUnknown(o) + } catch is Ice.NoValueFactoryException { + try test(testPrx.ice_getEncodingVersion() == Ice.Encoding_1_0) + } + output.writeLine("ok") + + output.write("unknown with Object as Object (AMI)... ") + if testPrx.ice_getEncodingVersion() == Ice.Encoding_1_0 { + try Promise<Void> { seal in + firstly { + testPrx.SUnknownAsObjectAsync() + }.done { _ in + try test(false) + }.catch { ex in + do { + try test(ex is Ice.NoValueFactoryException) + seal.fulfill(()) + } catch { + seal.reject(error) + } + } + }.wait() + } else { + try Promise<Void> { seal in + firstly { + testPrx.SUnknownAsObjectAsync() + }.done { o in + if let unknown = o as? Ice.UnknownSlicedValue { + try test(unknown.ice_id() == "::Test::SUnknown") + } else { + try test(false) + } + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + } + output.writeLine("ok") + + output.write("one-element cycle... ") + do { + let b = try testPrx.oneElementCycle()! + try test(b.ice_id() == "::Test::B") + try test(b.sb == "B1.sb") + try test(b.pb === b) + } + output.writeLine("ok") + + output.write("one-element cycle (AMI)... ") + try Promise<Void> { seal in + firstly { + testPrx.oneElementCycleAsync() + }.done { b in + try test(b!.ice_id() == "::Test::B") + try test(b!.sb == "B1.sb") + try test(b!.pb === b) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + output.writeLine("ok") + + output.write("two-element cycle... ") + do { + let b1 = try testPrx.twoElementCycle()! + try test(b1.ice_id() == "::Test::B") + try test(b1.sb == "B1.sb") + let b2 = b1.pb! + try test(b2.ice_id() == "::Test::B") + try test(b2.sb == "B2.sb") + try test(b2.pb === b1) + } + output.writeLine("ok") + + output.write("two-element cycle (AMI)... ") + try Promise<Void> { seal in + firstly { + testPrx.twoElementCycleAsync() + }.done { o in + let b1 = o! + try test(b1.ice_id() == "::Test::B") + try test(b1.sb == "B1.sb") + + let b2 = b1.pb! + try test(b2.ice_id() == "::Test::B") + try test(b2.sb == "B2.sb") + try test(b2.pb === b1) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + output.writeLine("ok") + + output.write("known derived pointer slicing as base... ") + do { + let b1 = try testPrx.D1AsB()! + try test(b1.ice_id() == "::Test::D1") + try test(b1.sb == "D1.sb") + try test(b1.pb !== nil) + try test(b1.pb !== b1) + if let d1 = b1 as? D1 { + try test(d1.sd1 == "D1.sd1") + try test(d1.pd1 !== nil) + try test(d1.pd1 !== b1) + try test(b1.pb === d1.pd1) + } else { + try test(false) + } + + let b2 = b1.pb! + try test(b2.pb === b1) + try test(b2.sb == "D2.sb") + try test(b2.ice_id() == "::Test::B") + } + output.writeLine("ok") + + output.write("known derived pointer slicing as base (AMI)... ") + try Promise<Void> { seal in + firstly { + testPrx.D1AsBAsync() + }.done { o in + let b1 = o! + + try test(b1.ice_id() == "::Test::D1") + try test(b1.sb == "D1.sb") + try test(b1.pb !== nil) + try test(b1.pb !== b1) + + if let d1 = b1 as? D1 { + try test(d1.sd1 == "D1.sd1") + try test(d1.pd1 !== nil) + try test(d1.pd1 !== b1) + try test(b1.pb === d1.pd1) + } else { + try test(false) + } + + let b2 = b1.pb! + try test(b2.pb === b1) + try test(b2.sb == "D2.sb") + try test(b2.ice_id() == "::Test::B") + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + output.writeLine("ok") + + output.write("known derived pointer slicing as derived... ") + do { + let d1 = try testPrx.D1AsD1()! + try test(d1.ice_id() == "::Test::D1") + try test(d1.sb == "D1.sb") + try test(d1.pb !== nil) + try test(d1.pb !== d1) + + let b2 = d1.pb! + try test(b2.ice_id() == "::Test::B") + try test(b2.sb == "D2.sb") + try test(b2.pb === d1) + } + output.writeLine("ok") + + output.write("known derived pointer slicing as derived (AMI)... ") + try Promise<Void> { seal in + firstly { + testPrx.D1AsD1Async() + }.done { o in + let d1 = o! + try test(d1.ice_id() == "::Test::D1") + try test(d1.sb == "D1.sb") + try test(d1.pb !== nil) + try test(d1.pb !== d1) + + let b2 = d1.pb! + try test(b2.ice_id() == "::Test::B") + try test(b2.sb == "D2.sb") + try test(b2.pb === d1) + + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + output.writeLine("ok") + + output.write("unknown derived pointer slicing as base... ") + do { + let b2 = try testPrx.D2AsB()! + try test(b2.ice_id() == "::Test::B") + try test(b2.sb == "D2.sb") + try test(b2.pb !== nil) + try test(b2.pb !== b2) + + let b1 = b2.pb! + try test(b1.ice_id() == "::Test::D1") + try test(b1.sb == "D1.sb") + try test(b1.pb === b2) + if let d1 = b1 as? D1 { + try test(d1.sd1 == "D1.sd1") + try test(d1.pd1 === b2) + } else { + try test(false) + } + } + output.writeLine("ok") + + output.write("unknown derived pointer slicing as base (AMI)... ") + try Promise<Void> { seal in + firstly { + testPrx.D2AsBAsync() + }.done { o in + let b2 = o! + + try test(b2.ice_id() == "::Test::B") + try test(b2.sb == "D2.sb") + try test(b2.pb !== nil) + try test(b2.pb !== b2) + + let b1 = b2.pb! + + try test(b1.ice_id() == "::Test::D1") + try test(b1.sb == "D1.sb") + try test(b1.pb === b2) + + if let d1 = b1 as? D1 { + try test(d1.sd1 == "D1.sd1") + try test(d1.pd1 === b2) + } else { + try test(false) + } + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + output.writeLine("ok") + + output.write("param ptr slicing with known first... ") + do { + let (b1, b2) = try testPrx.paramTest1() + try test(b1 !== nil) + try test(b1!.ice_id() == "::Test::D1") + try test(b1!.sb == "D1.sb") + try test(b1!.pb === b2) + let d1 = b1 as! D1 + try test(d1.sd1 == "D1.sd1") + try test(d1.pd1 === b2) + + try test(b2 !== nil) + // No factory, must be sliced + try test(b2!.ice_id() == "::Test::B") + try test(b2!.sb == "D2.sb") + try test(b2!.pb === b1) + } + output.writeLine("ok") + + output.write("param ptr slicing with known first (AMI)... ") + try Promise<Void> { seal in + firstly { + testPrx.paramTest1Async() + }.done { o1, o2 in + try test(o1 != nil && o2 != nil) + let b1 = o1! + let b2 = o2! + try test(b1.ice_id() == "::Test::D1") + try test(b1.sb == "D1.sb") + try test(b1.pb === b2) + let d1 = b1 as! D1 + try test(d1.sd1 == "D1.sd1") + try test(d1.pd1 === b2) + // No factory, must be sliced + try test(b2.ice_id() == "::Test::B") + try test(b2.sb == "D2.sb") + try test(b2.pb === b1) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + output.writeLine("ok") + + output.write("param ptr slicing with unknown first... ") + do { + let (o2, o1) = try testPrx.paramTest2() + try test(o1 != nil && o2 != nil) + + let b1 = o1! + let b2 = o2! + + try test(b1.ice_id() == "::Test::D1") + try test(b1.sb == "D1.sb") + try test(b1.pb === b2) + + if let d1 = b1 as? D1 { + try test(d1.sd1 == "D1.sd1") + try test(d1.pd1 === b2) + } else { + try test(false) + } + // No factory, must be sliced + try test(b2.ice_id() == "::Test::B") + try test(b2.sb == "D2.sb") + try test(b2.pb === b1) + } + output.writeLine("ok") + + output.write("param ptr slicing with unknown first (AMI)... ") + try Promise<Void> { seal in + firstly { + testPrx.paramTest2Async() + }.done { o2, o1 in + try test(o2 != nil && o1 != nil) + let b1 = o1! + let b2 = o2! + + try test(b1.ice_id() == "::Test::D1") + try test(b1.sb == "D1.sb") + try test(b1.pb === b2) + if let d1 = b1 as? D1 { + try test(d1.sd1 == "D1.sd1") + try test(d1.pd1 === b2) + } else { + try test(false) + } + // No factory, must be sliced + try test(b2.ice_id() == "::Test::B") + try test(b2.sb == "D2.sb") + try test(b2.pb === b1) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + output.writeLine("ok") + + output.write("return value identity with known first... ") + do { + let (ret, p1, _) = try testPrx.returnTest1() + try test(ret === p1) + } + output.writeLine("ok") + + output.write("return value identity with known first (AMI)... ") + try Promise<Void> { seal in + firstly { + testPrx.returnTest1Async() + }.done { r, p1, _ in + try test(r === p1) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + output.writeLine("ok") + + output.write("return value identity with unknown first... ") + do { + let (ret, p1, _) = try testPrx.returnTest2() + try test(ret === p1) + } + output.writeLine("ok") + + output.write("return value identity with unknown first (AMI)... ") + try Promise<Void> { seal in + firstly { + testPrx.returnTest2Async() + }.done { r, p1, _ in + try test(r === p1) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + output.writeLine("ok") + + output.write("return value identity for input params known first... ") + do { + let d1 = D1() + d1.sb = "D1.sb" + d1.sd1 = "D1.sd1" + let d3 = D3() + d3.pb = d1 + d3.sb = "D3.sb" + d3.sd3 = "D3.sd3" + d3.pd3 = d1 + d1.pb = d3 + d1.pd1 = d3 + + let b1 = try testPrx.returnTest3(p1: d1, p2: d3)! + try test(b1.sb == "D1.sb") + try test(b1.ice_id() == "::Test::D1") + + if let p1 = b1 as? D1 { + try test(p1.sd1 == "D1.sd1") + try test(p1.pd1 === b1.pb) + } else { + try test(false) + } + + let b2 = b1.pb! + try test(b2.sb == "D3.sb") + // Sliced by server + try test(b2.ice_id() == "::Test::B") + try test(b2.pb === b1) + try test(!(b2 is D3)) + + try test(b1 !== d1) + try test(b1 !== d3) + try test(b2 !== d1) + try test(b2 !== d3) + } + output.writeLine("ok") + + output.write("return value identity for input params known first (AMI)... ") + do { + let d1 = D1() + d1.sb = "D1.sb" + d1.sd1 = "D1.sd1" + let d3 = D3() + d3.pb = d1 + d3.sb = "D3.sb" + d3.sd3 = "D3.sd3" + d3.pd3 = d1 + d1.pb = d3 + d1.pd1 = d3 + + try Promise<Void> { seal in + firstly { + testPrx.returnTest3Async(p1: d1, p2: d3) + }.done { b in + try test(b != nil) + let b1 = b! + + try test(b1.sb == "D1.sb") + try test(b1.ice_id() == "::Test::D1") + + if let p1 = b1 as? D1 { + try test(p1.sd1 == "D1.sd1") + try test(p1.pd1 === b1.pb) + } else { + try test(false) + } + + let b2 = b1.pb! + try test(b2.sb == "D3.sb") + // Sliced by server + try test(b2.ice_id() == "::Test::B") + try test(b2.pb === b1) + try test(!(b2 is D3)) + try test(b1 !== d1) + try test(b1 !== d3) + try test(b2 !== d1) + try test(b2 !== d3) + + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + output.writeLine("ok") + } + + output.write("return value identity for input params unknown first... ") + do { + let d1 = D1() + d1.sb = "D1.sb" + d1.sd1 = "D1.sd1" + let d3 = D3() + d3.pb = d1 + d3.sb = "D3.sb" + d3.sd3 = "D3.sd3" + d3.pd3 = d1 + d1.pb = d3 + d1.pd1 = d3 + + let b1 = try testPrx.returnTest3(p1: d3, p2: d1)! + + try test(b1.sb == "D3.sb") + try test(b1.ice_id() == "::Test::B") // Sliced by server + + try test(!(b1 is D3)) + + let b2 = b1.pb! + try test(b2.sb == "D1.sb") + try test(b2.ice_id() == "::Test::D1") + try test(b2.pb === b1) + if let p3 = b2 as? D1 { + try test(p3.sd1 == "D1.sd1") + try test(p3.pd1 === b1) + } else { + try test(false) + } + + try test(b1 !== d1) + try test(b1 !== d3) + try test(b2 !== d1) + try test(b2 !== d3) + } + output.writeLine("ok") + + output.write("return value identity for input params unknown first (AMI)... ") + try Promise<Void> { seal in + + let d1 = D1() + d1.sb = "D1.sb" + d1.sd1 = "D1.sd1" + let d3 = D3() + d3.pb = d1 + d3.sb = "D3.sb" + d3.sd3 = "D3.sd3" + d3.pd3 = d1 + d1.pb = d3 + d1.pd1 = d3 + + firstly { + testPrx.returnTest3Async(p1: d3, p2: d1) + }.done { b in + try test(b != nil) + + let b1 = b! + + try test(b1.sb == "D3.sb") + try test(b1.ice_id() == "::Test::B") // Sliced by server + + try test(!(b1 is D3)) + + let b2 = b1.pb! + try test(b2.sb == "D1.sb") + try test(b2.ice_id() == "::Test::D1") + try test(b2.pb === b1) + if let p3 = b2 as? D1 { + try test(p3.sd1 == "D1.sd1") + try test(p3.pd1 === b1) + } else { + try test(false) + } + + try test(b1 !== d1) + try test(b1 !== d3) + try test(b2 !== d1) + try test(b2 !== d3) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + output.writeLine("ok") + + output.write("remainder unmarshaling (3 instances)... ") + do { + let (ret1, o1, o2) = try testPrx.paramTest3() + try test(o1 != nil) + let p1 = o1! + try test(p1.sb == "D2.sb (p1 1)") + try test(p1.pb == nil) + try test(p1.ice_id() == "::Test::B") + + try test(o2 != nil) + let p2 = o2! + try test(p2.sb == "D2.sb (p2 1)") + try test(p2.pb == nil) + try test(p2.ice_id() == "::Test::B") + + try test(ret1 != nil) + let ret = ret1! + try test(ret.sb == "D1.sb (p2 2)") + try test(ret.pb == nil) + try test(ret.ice_id() == "::Test::D1") + } + output.writeLine("ok") + + output.write("remainder unmarshaling (3 instances) (AMI)... ") + try Promise<Void> { seal in + firstly { + testPrx.paramTest3Async() + }.done { ret1, o1, o2 in + try test(o1 != nil) + let p1 = o1! + try test(p1.sb == "D2.sb (p1 1)") + try test(p1.pb == nil) + try test(p1.ice_id() == "::Test::B") + + try test(o2 != nil) + let p2 = o2! + try test(p2.sb == "D2.sb (p2 1)") + try test(p2.pb == nil) + try test(p2.ice_id() == "::Test::B") + + try test(ret1 != nil) + let ret = ret1! + try test(ret.sb == "D1.sb (p2 2)") + try test(ret.pb == nil) + try test(ret.ice_id() == "::Test::D1") + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + output.writeLine("ok") + + output.write("remainder unmarshaling (4 instances)... ") + do { + let (ret1, b1) = try testPrx.paramTest4() + + try test(b1 != nil) + let b = b1! + try test(b.sb == "D4.sb (1)") + try test(b.pb == nil) + try test(b.ice_id() == "::Test::B") + + try test(ret1 != nil) + let ret = ret1! + try test(ret.sb == "B.sb (2)") + try test(ret.pb == nil) + try test(ret.ice_id() == "::Test::B") + } + output.writeLine("ok") + + output.write("remainder unmarshaling (4 instances) (AMI)... ") + try Promise<Void> { seal in + firstly { + testPrx.paramTest4Async() + }.done { ret1, b1 in + try test(b1 != nil) + let b = b1! + try test(b.sb == "D4.sb (1)") + try test(b.pb == nil) + try test(b.ice_id() == "::Test::B") + + try test(ret1 != nil) + let ret = ret1! + try test(ret.sb == "B.sb (2)") + try test(ret.pb == nil) + try test(ret.ice_id() == "::Test::B") + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + output.writeLine("ok") + + output.write("param ptr slicing, instance marshaled in unknown derived as base... ") + do { + let b1 = B() + b1.sb = "B.sb(1)" + b1.pb = b1 + + let d3 = D3() + d3.sb = "D3.sb" + d3.pb = d3 + d3.sd3 = "D3.sd3" + d3.pd3 = b1 + + let b2 = B() + b2.sb = "B.sb(2)" + b2.pb = b1 + + let ret = try testPrx.returnTest3(p1: d3, p2: b2)! + + try test(ret.ice_id() == "::Test::B") + try test(ret.sb == "D3.sb") + try test(ret.pb === ret) + } + output.writeLine("ok") + + output.write("param ptr slicing, instance marshaled in unknown derived as base (AMI)... ") + try Promise<Void> { seal in + let b1 = B() + b1.sb = "B.sb(1)" + b1.pb = b1 + + let d3 = D3() + d3.sb = "D3.sb" + d3.pb = d3 + d3.sd3 = "D3.sd3" + d3.pd3 = b1 + + let b2 = B() + b2.sb = "B.sb(2)" + b2.pb = b1 + + firstly { + testPrx.returnTest3Async(p1: d3, p2: b2) + }.done { r in + try test(r != nil) + let ret = r! + try test(ret.ice_id() == "::Test::B") + try test(ret.sb == "D3.sb") + try test(ret.pb === ret) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + output.writeLine("ok") + + output.write("param ptr slicing, instance marshaled in unknown derived as derived... ") + do { + let d11 = D1() + d11.sb = "D1.sb(1)" + d11.pb = d11 + d11.sd1 = "D1.sd1(1)" + + let d3 = D3() + d3.sb = "D3.sb" + d3.pb = d3 + d3.sd3 = "D3.sd3" + d3.pd3 = d11 + + let d12 = D1() + d12.sb = "D1.sb(2)" + d12.pb = d12 + d12.sd1 = "D1.sd1(2)" + d12.pd1 = d11 + + let ret = try testPrx.returnTest3(p1: d3, p2: d12)! + try test(ret.ice_id() == "::Test::B") + try test(ret.sb == "D3.sb") + try test(ret.pb === ret) + } + output.writeLine("ok") + + output.write("param ptr slicing, instance marshaled in unknown derived as derived (AMI)... ") + try Promise<Void> { seal in + let d11 = D1() + d11.sb = "D1.sb(1)" + d11.pb = d11 + d11.sd1 = "D1.sd1(1)" + + let d3 = D3() + d3.sb = "D3.sb" + d3.pb = d3 + d3.sd3 = "D3.sd3" + d3.pd3 = d11 + + let d12 = D1() + d12.sb = "D1.sb(2)" + d12.pb = d12 + d12.sd1 = "D1.sd1(2)" + d12.pd1 = d11 + + firstly { + testPrx.returnTest3Async(p1: d3, p2: d12) + }.done { r in + try test(r != nil) + let ret = r! + try test(ret.ice_id() == "::Test::B") + try test(ret.sb == "D3.sb") + try test(ret.pb === ret) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + output.writeLine("ok") + + output.write("sequence slicing... ") + do { + let ss1b = B() + ss1b.sb = "B.sb" + ss1b.pb = ss1b + + let ss1d1 = D1() + ss1d1.sb = "D1.sb" + ss1d1.sd1 = "D1.sd1" + ss1d1.pb = ss1b + + let ss1d3 = D3() + ss1d3.sb = "D3.sb" + ss1d3.sd3 = "D3.sd3" + ss1d3.pb = ss1b + + let ss2b = B() + ss2b.sb = "B.sb" + ss2b.pb = ss1b + + let ss2d1 = D1() + ss2d1.sb = "D1.sb" + ss2d1.sd1 = "D1.sd1" + ss2d1.pb = ss2b + + let ss2d3 = D3() + ss2d3.sb = "D3.sb" + ss2d3.sd3 = "D3.sd3" + ss2d3.pb = ss2b + + ss1d1.pd1 = ss2b + ss1d3.pd3 = ss2d1 + + ss2d1.pd1 = ss1d3 + ss2d3.pd3 = ss1d1 + + let ss1 = SS1() + ss1.s = [ss1b, ss1d1, ss1d3] + + let ss2 = SS2() + ss2.s = [ss2b, ss2d1, ss2d3] + + let ss = try testPrx.sequenceTest(p1: ss1, p2: ss2) + + try test(ss.c1 != nil) + let ss1b2 = ss.c1!.s[0] + let ss1d2 = ss.c1!.s[1] + try test(ss.c2 != nil) + let ss1d4 = ss.c1!.s[2] + + try test(ss.c2 != nil) + let ss2b2 = ss.c2!.s[0] + let ss2d2 = ss.c2!.s[1] + let ss2d4 = ss.c2!.s[2] + + try test(ss1b2!.pb === ss1b2) + try test(ss1d2!.pb === ss1b2) + try test(ss1d4!.pb === ss1b2) + + try test(ss2b2!.pb === ss1b2) + try test(ss2d2!.pb === ss2b2) + try test(ss2d4!.pb === ss2b2) + + try test(ss1b2!.ice_id() == "::Test::B") + try test(ss1d2!.ice_id() == "::Test::D1") + try test(ss1d4!.ice_id() == "::Test::B") + + try test(ss2b2!.ice_id() == "::Test::B") + try test(ss2d2!.ice_id() == "::Test::D1") + try test(ss2d4!.ice_id() == "::Test::B") + } + output.writeLine("ok") + + output.write("sequence slicing (AMI)... ") + try Promise<Void> { seal in + let ss1b = B() + ss1b.sb = "B.sb" + ss1b.pb = ss1b + + let ss1d1 = D1() + ss1d1.sb = "D1.sb" + ss1d1.sd1 = "D1.sd1" + ss1d1.pb = ss1b + + let ss1d3 = D3() + ss1d3.sb = "D3.sb" + ss1d3.sd3 = "D3.sd3" + ss1d3.pb = ss1b + + let ss2b = B() + ss2b.sb = "B.sb" + ss2b.pb = ss1b + + let ss2d1 = D1() + ss2d1.sb = "D1.sb" + ss2d1.sd1 = "D1.sd1" + ss2d1.pb = ss2b + + let ss2d3 = D3() + ss2d3.sb = "D3.sb" + ss2d3.sd3 = "D3.sd3" + ss2d3.pb = ss2b + + ss1d1.pd1 = ss2b + ss1d3.pd3 = ss2d1 + + ss2d1.pd1 = ss1d3 + ss2d3.pd3 = ss1d1 + + let ss1 = SS1() + ss1.s = [ss1b, ss1d1, ss1d3] + + let ss2 = SS2() + ss2.s = [ss2b, ss2d1, ss2d3] + + firstly { + testPrx.sequenceTestAsync(p1: ss1, p2: ss2) + }.done { ss in + try test(ss.c1 != nil) + let ss1b2 = ss.c1!.s[0] + let ss1d2 = ss.c1!.s[1] + try test(ss.c2 != nil) + let ss1d4 = ss.c1!.s[2] + + try test(ss.c2 != nil) + let ss2b2 = ss.c2!.s[0] + let ss2d2 = ss.c2!.s[1] + let ss2d4 = ss.c2!.s[2] + + try test(ss1b2!.pb === ss1b2) + try test(ss1d2!.pb === ss1b2) + try test(ss1d4!.pb === ss1b2) + + try test(ss2b2!.pb === ss1b2) + try test(ss2d2!.pb === ss2b2) + try test(ss2d4!.pb === ss2b2) + + try test(ss1b2!.ice_id() == "::Test::B") + try test(ss1d2!.ice_id() == "::Test::D1") + try test(ss1d4!.ice_id() == "::Test::B") + + try test(ss2b2!.ice_id() == "::Test::B") + try test(ss2d2!.ice_id() == "::Test::D1") + try test(ss2d4!.ice_id() == "::Test::B") + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + output.writeLine("ok") + + output.write("dictionary slicing... ") + do { + var bin = [Int32: B]() + + for i: Int32 in 0 ..< 10 { + let s = "D1.\(i)" + let d1 = D1() + d1.sb = s + d1.pb = d1 + d1.sd1 = s + bin[i] = d1 + } + + let (ret, bout) = try testPrx.dictionaryTest(bin) + + try test(bout.count == 10) + for i: Int32 in 0 ..< 10 { + let b = bout[i * 10]!! + let s = "D1.\(i)" + try test(b.sb == s) + try test(b.pb !== nil) + try test(b.pb !== b) + try test(b.pb!.sb == s) + try test(b.pb!.pb === b.pb) + } + + try test(ret.count == 10) + for i: Int32 in 0 ..< 10 { + let b = ret[i * 20]!! + let s = "D1.\(i * 20)" + try test(b.sb == s) + + if i == 0 { + try test(b.pb == nil) + } else { + try test(b.pb === ret[(i - 1) * 20]!) + } + + if let d1 = b as? D1 { + try test(d1.sd1 == s) + try test(d1.pd1 === d1) + } else { + try test(false) + } + } + } + output.writeLine("ok") + + output.write("dictionary slicing (AMI)... ") + try Promise<Void> { seal in + var bin = [Int32: B]() + + for i: Int32 in 0 ..< 10 { + let s = "D1.\(i)" + let d1 = D1() + d1.sb = s + d1.pb = d1 + d1.sd1 = s + bin[i] = d1 + } + + firstly { + testPrx.dictionaryTestAsync(bin) + }.done { ret, bout in + try test(bout.count == 10) + for i: Int32 in 0 ..< 10 { + let b = bout[i * 10]!! + let s = "D1.\(i)" + try test(b.sb == s) + try test(b.pb !== nil) + try test(b.pb !== b) + try test(b.pb!.sb == s) + try test(b.pb!.pb === b.pb) + } + + try test(ret.count == 10) + for i: Int32 in 0 ..< 10 { + let b = ret[i * 20]!! + let s = "D1.\(i * 20)" + try test(b.sb == s) + + if i == 0 { + try test(b.pb == nil) + } else { + try test(b.pb === ret[(i - 1) * 20]!) + } + + if let d1 = b as? D1 { + try test(d1.sd1 == s) + try test(d1.pd1 === d1) + } else { + try test(false) + } + } + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + output.writeLine("ok") + + output.write("base exception thrown as base exception... ") + do { + try testPrx.throwBaseAsBase() + try test(false) + } catch let e as BaseException { + try test(e.sbe == "sbe") + try test(e.pb != nil) + try test(e.pb!.sb == "sb") + try test(e.pb!.pb === e.pb) + } + output.writeLine("ok") + + output.write("base exception thrown as base exception (AMI)... ") + try Promise<Void> { seal in + firstly { + testPrx.throwBaseAsBaseAsync() + }.done { + try test(false) + }.catch { ex in + do { + if let e = ex as? BaseException { + try test(e.sbe == "sbe") + try test(e.pb != nil) + try test(e.pb!.sb == "sb") + try test(e.pb!.pb === e.pb) + } else { + try test(false) + } + seal.fulfill(()) + } catch { + seal.reject(error) + } + } + }.wait() + output.writeLine("ok") + + output.write("derived exception thrown as base exception... ") + do { + try testPrx.throwDerivedAsBase() + try test(false) + } catch let e as DerivedException { + try test(e.sbe == "sbe") + try test(e.pb != nil) + try test(e.pb!.sb == "sb1") + try test(e.pb!.pb === e.pb) + try test(e.sde == "sde1") + try test(e.pd1 != nil) + try test(e.pd1!.sb == "sb2") + try test(e.pd1!.pb === e.pd1) + try test(e.pd1!.sd1 == "sd2") + try test(e.pd1!.pd1 === e.pd1) + } + output.writeLine("ok") + + output.write("derived exception thrown as base exception (AMI)... ") + try Promise<Void> { seal in + firstly { + testPrx.throwDerivedAsBaseAsync() + }.done { + try test(false) + }.catch { ex in + do { + if let e = ex as? DerivedException { + try test(e.sbe == "sbe") + try test(e.pb != nil) + try test(e.pb!.sb == "sb1") + try test(e.pb!.pb === e.pb) + try test(e.sde == "sde1") + try test(e.pd1 != nil) + try test(e.pd1!.sb == "sb2") + try test(e.pd1!.pb === e.pd1) + try test(e.pd1!.sd1 == "sd2") + try test(e.pd1!.pd1 === e.pd1) + } else { + try test(false) + } + seal.fulfill(()) + } catch { + seal.reject(error) + } + } + }.wait() + output.writeLine("ok") + + output.write("derived aexception thrown as derived exception... ") + do { + try testPrx.throwDerivedAsDerived() + try test(false) + } catch let e as DerivedException { + try test(e.sbe == "sbe") + try test(e.pb != nil) + try test(e.pb!.sb == "sb1") + try test(e.pb!.pb === e.pb) + try test(e.sde == "sde1") + try test(e.pd1 != nil) + try test(e.pd1!.sb == "sb2") + try test(e.pd1!.pb === e.pd1) + try test(e.pd1!.sd1 == "sd2") + try test(e.pd1!.pd1 === e.pd1) + } + output.writeLine("ok") + + output.write("derived aexception thrown as derived exception (AMI)... ") + try Promise<Void> { seal in + firstly { + testPrx.throwDerivedAsDerivedAsync() + }.done { + try test(false) + }.catch { ex in + do { + if let e = ex as? DerivedException { + try test(e.sbe == "sbe") + try test(e.pb != nil) + try test(e.pb!.sb == "sb1") + try test(e.pb!.pb === e.pb) + try test(e.sde == "sde1") + try test(e.pd1 != nil) + try test(e.pd1!.sb == "sb2") + try test(e.pd1!.pb === e.pd1) + try test(e.pd1!.sd1 == "sd2") + try test(e.pd1!.pd1 === e.pd1) + } else { + try test(false) + } + seal.fulfill(()) + } catch { + seal.reject(error) + } + } + }.wait() + output.writeLine("ok") + + output.write("unknown derived exception thrown as base exception... ") + do { + try testPrx.throwUnknownDerivedAsBase() + try test(false) + } catch let e as BaseException { + try test(e.sbe == "sbe") + try test(e.pb != nil) + try test(e.pb!.sb == "sb d2") + try test(e.pb!.pb === e.pb) + } + output.writeLine("ok") + + output.write("unknown derived exception thrown as base exception (AMI)... ") + try Promise<Void> { seal in + firstly { + testPrx.throwUnknownDerivedAsBaseAsync() + }.done { + try test(false) + }.catch { ex in + do { + if let e = ex as? BaseException { + try test(e.sbe == "sbe") + try test(e.pb != nil) + try test(e.pb!.sb == "sb d2") + try test(e.pb!.pb === e.pb) + } else { + try test(false) + } + seal.fulfill(()) + } catch { + seal.reject(error) + } + } + }.wait() + output.writeLine("ok") + + output.write("forward-declared class... ") + do { + let f = try testPrx.useForward() + try test(f != nil) + } + output.writeLine("ok") + + output.write("forward-declared class (AMI)... ") + try Promise<Void> { seal in + firstly { + testPrx.useForwardAsync() + }.done { f in + try test(f != nil) + seal.fulfill(()) + }.catch { e in + seal.reject(e) + } + }.wait() + output.writeLine("ok") + + output.write("preserved classes... ") + // + // Register a factory in order to substitute our own subclass of Preserved. This provides + // an easy way to determine how many unmarshaled instances currently exist. + // + // We have to install this now (even though it's not necessary yet), because otherwise + // the Ice run time will install its own internal factory for Preserved upon receiving the + // first instance. + // + try communicator.getValueFactoryManager().add( + factory: { id in Preserved.ice_staticId() == id ? PreservedI() : nil }, + id: Preserved.ice_staticId() + ) + do { + // + // Server knows the most-derived class PDerived. + // + let pd = PDerived() + pd.pi = 3 + pd.ps = "preserved" + pd.pb = pd + + let r = try testPrx.exchangePBase(pd) + if let p2 = r as? PDerived { + try test(p2.pi == 3) + try test(p2.ps == "preserved") + try test(p2.pb === p2) + } else { + try test(false) + } + } catch is Ice.OperationNotExistException {} + + do { + // + // Server only knows the base (non-preserved) type, so the object is sliced. + // + let pu = PCUnknown() + pu.pi = 3 + pu.pu = "preserved" + + let r = try testPrx.exchangePBase(pu)! + try test(!(r is PCUnknown)) + try test(r.pi == 3) + } catch is Ice.OperationNotExistException {} + + do { + // + // Server only knows the intermediate type Preserved. The object will be sliced to + // Preserved for the 1.0 encoding; otherwise it should be returned intact. + // + let pcd = PCDerived() + pcd.pi = 3 + pcd.pbs = [pcd] + + let r = try testPrx.exchangePBase(pcd)! + if testPrx.ice_getEncodingVersion() == Ice.Encoding_1_0 { + try test(!(r is PCDerived)) + try test(r.pi == 3) + } else { + if let p2 = r as? PCDerived { + try test(p2.pi == 3) + try test(p2.pbs[0] === p2) + } else { + try test(false) + } + } + } catch is Ice.OperationNotExistException {} + + do { + // + // Server only knows the intermediate type Preserved. The object will be sliced to + // Preserved for the 1.0 encoding; otherwise it should be returned intact. + // + let pcd = CompactPCDerived() + pcd.pi = 3 + pcd.pbs = [pcd] + + let r = try testPrx.exchangePBase(pcd)! + if testPrx.ice_getEncodingVersion() == Ice.Encoding_1_0 { + try test(!(r is CompactPCDerived)) + try test(r.pi == 3) + } else { + if let p2 = r as? CompactPCDerived { + try test(p2.pi == 3) + try test(p2.pbs[0] === p2) + } else { + try test(false) + } + } + } catch is Ice.OperationNotExistException {} + + do { + // + // Send an object that will have multiple preserved slices in the server. + // The object will be sliced to Preserved for the 1.0 encoding. + // + let pcd = PCDerived3() + pcd.pi = 3 + // + // Sending more than 254 objects exercises the encoding for object ids. + // + pcd.pbs = [PBase]() + for i: Int32 in 0 ..< 300 { + let p2 = PCDerived2() + p2.pi = i + p2.pbs = [nil] // Nil reference. This slice should not have an indirection table. + p2.pcd2 = i + pcd.pbs.append(p2) + } + pcd.pcd2 = pcd.pi + pcd.pcd3 = pcd.pbs[10] + + let r = try testPrx.exchangePBase(pcd)! + if testPrx.ice_getEncodingVersion() == Ice.Encoding_1_0 { + try test(!(r is PCDerived3)) + try test(r is Preserved) + try test(r.pi == 3) + } else { + if let p3 = r as? PCDerived3 { + try test(p3.pi == 3) + for i in 0 ..< 300 { + if let p2 = p3.pbs[i] as? PCDerived2 { + try test(p2.pi == i) + try test(p2.pbs.count == 1) + try test(p2.pbs[0] == nil) + try test(p2.pcd2 == i) + } else { + try test(false) + } + } + try test(p3.pcd2 == p3.pi) + try test(p3.pcd3 === p3.pbs[10]) + } else { + try test(false) + } + } + } catch is Ice.OperationNotExistException {} + + do { + // + // Obtain an object with preserved slices and send it back to the server. + // The preserved slices should be excluded for the 1.0 encoding, otherwise + // they should be included. + // + let p = try testPrx.PBSUnknownAsPreserved()! + try testPrx.checkPBSUnknown(p) + if testPrx.ice_getEncodingVersion() != Ice.Encoding_1_0 { + let slicedData = p.ice_getSlicedData()! + try test(slicedData.slices.count == 1) + try test(slicedData.slices[0].typeId == "::Test::PSUnknown") + try testPrx.ice_encodingVersion(Ice.Encoding_1_0).checkPBSUnknown(p) + } else { + try test(p.ice_getSlicedData() == nil) + } + } catch is Ice.OperationNotExistException {} + output.writeLine("ok") + + output.write("preserved classes (AMI)... ") + // + // Register a factory in order to substitute our own subclass of Preserved. This provides + // an easy way to determine how many unmarshaled instances currently exist. + // + // We have to install this now (even though it's not necessary yet), because otherwise + // the Ice run time will install its own internal factory for Preserved upon receiving the + // first instance. + + try Promise<Void> { seal in + // + // Server knows the most-derived class PDerived. + // + let pd = PDerived() + pd.pi = 3 + pd.ps = "preserved" + pd.pb = pd + firstly { + testPrx.exchangePBaseAsync(pd) + }.done { r in + if let p2 = r as? PDerived { + try test(p2.pi == 3) + try test(p2.ps == "preserved") + try test(p2.pb === p2) + } else { + try test(false) + } + seal.fulfill(()) + }.catch { e in + if e is Ice.OperationNotExistException { + seal.fulfill(()) + } else { + seal.reject(e) + } + } + }.wait() + + try Promise<Void> { seal in + // + // Server only knows the base (non-preserved) type, so the object is sliced. + // + let pu = PCUnknown() + pu.pi = 3 + pu.pu = "preserved" + firstly { + testPrx.exchangePBaseAsync(pu) + }.done { ret in + let r = ret! + try test(!(r is PCUnknown)) + try test(r.pi == 3) + seal.fulfill(()) + }.catch { e in + if e is Ice.OperationNotExistException { + seal.fulfill(()) + } else { + seal.reject(e) + } + } + }.wait() + + try Promise<Void> { seal in + // + // Server only knows the intermediate type Preserved. The object will be sliced to + // Preserved for the 1.0 encoding; otherwise it should be returned intact. + // + let pcd = PCDerived() + pcd.pi = 3 + pcd.pbs = [pcd] + + firstly { + testPrx.exchangePBaseAsync(pcd) + }.done { ret in + let r = ret! + if testPrx.ice_getEncodingVersion() == Ice.Encoding_1_0 { + try test(!(r is PCDerived)) + try test(r.pi == 3) + } else { + if let p2 = r as? PCDerived { + try test(p2.pi == 3) + try test(p2.pbs[0] === p2) + } else { + try test(false) + } + } + seal.fulfill(()) + }.catch { e in + if e is Ice.OperationNotExistException { + seal.fulfill(()) + } else { + seal.reject(e) + } + } + }.wait() + + try Promise<Void> { seal in + // + // Server only knows the intermediate type Preserved. The object will be sliced to + // Preserved for the 1.0 encoding; otherwise it should be returned intact. + // + let pcd = CompactPCDerived() + pcd.pi = 3 + pcd.pbs = [pcd] + + firstly { + testPrx.exchangePBaseAsync(pcd) + }.done { ret in + let r = ret! + if testPrx.ice_getEncodingVersion() == Ice.Encoding_1_0 { + try test(!(r is CompactPCDerived)) + try test(r.pi == 3) + } else { + if let p2 = r as? CompactPCDerived { + try test(p2.pi == 3) + try test(p2.pbs[0] === p2) + } else { + try test(false) + } + } + seal.fulfill(()) + }.catch { e in + if e is Ice.OperationNotExistException { + seal.fulfill(()) + } else { + seal.reject(e) + } + } + }.wait() + + try Promise<Void> { seal in + // + // Send an object that will have multiple preserved slices in the server. + // The object will be sliced to Preserved for the 1.0 encoding. + // + let pcd = PCDerived3() + pcd.pi = 3 + // + // Sending more than 254 objects exercises the encoding for object ids. + // + pcd.pbs = [PBase]() + for i: Int32 in 0 ..< 300 { + let p2 = PCDerived2() + p2.pi = i + p2.pbs = [nil] // Nil reference. This slice should not have an indirection table. + p2.pcd2 = i + pcd.pbs.append(p2) + } + pcd.pcd2 = pcd.pi + pcd.pcd3 = pcd.pbs[10] + + firstly { + testPrx.exchangePBaseAsync(pcd) + }.done { ret in + let r = ret! + if testPrx.ice_getEncodingVersion() == Ice.Encoding_1_0 { + try test(!(r is PCDerived3)) + try test(r is Preserved) + try test(r.pi == 3) + } else { + if let p3 = r as? PCDerived3 { + try test(p3.pi == 3) + for i in 0 ..< 300 { + if let p2 = p3.pbs[i] as? PCDerived2 { + try test(p2.pi == i) + try test(p2.pbs.count == 1) + try test(p2.pbs[0] == nil) + try test(p2.pcd2 == i) + } else { + try test(false) + } + } + try test(p3.pcd2 == p3.pi) + try test(p3.pcd3 === p3.pbs[10]) + } else { + try test(false) + } + } + seal.fulfill(()) + }.catch { e in + if e is Ice.OperationNotExistException { + seal.fulfill(()) + } else { + seal.reject(e) + } + } + }.wait() + + try Promise<Void> { seal in + // + // Obtain an object with preserved slices and send it back to the server. + // The preserved slices should be excluded for the 1.0 encoding, otherwise + // they should be included. + // + firstly { + testPrx.PBSUnknownAsPreservedAsync() + }.done { p1 in + let p = p1! + try testPrx.checkPBSUnknown(p) + if testPrx.ice_getEncodingVersion() != Ice.Encoding_1_0 { + let slicedData = p.ice_getSlicedData()! + try test(slicedData.slices.count == 1) + try test(slicedData.slices[0].typeId == "::Test::PSUnknown") + try testPrx.ice_encodingVersion(Ice.Encoding_1_0).checkPBSUnknown(p) + } else { + try test(p.ice_getSlicedData() == nil) + } + seal.fulfill(()) + }.catch { e in + if e is Ice.OperationNotExistException { + seal.fulfill(()) + } else { + seal.reject(e) + } + } + }.wait() + output.writeLine("ok") + + output.write("garbage collection for preserved classes... ") + do { + // + // Register a factory in order to substitute our own subclass of PNode. This provides + // an easy way to determine how many unmarshaled instances currently exist. + // + try communicator.getValueFactoryManager().add( + factory: { id in id == PNode.ice_staticId() ? PNodeI() : nil }, + id: PNode.ice_staticId() + ) + + // + // Relay a graph through the server. + // + do { + let c = PNode() + c.next = PNode() + c.next!.next = PNode() + c.next!.next!.next = c + + try test(PNodeI.counter == 0) + let n = try testPrx.exchangePNode(c)! + + try test(PNodeI.counter == 3) + PNodeI.counter = 0 + n.next = nil + } + + // + // Obtain a preserved object from the server where the most-derived + // type is unknown. The preserved slice refers to a graph of PNode + // objects. + // + do { + try test(PNodeI.counter == 0) + let p = try testPrx.PBSUnknownAsPreservedWithGraph() + try testPrx.checkPBSUnknownWithGraph(p) + try test(PNodeI.counter == 3) + PNodeI.counter = 0 + } + + // + // Obtain a preserved object from the server where the most-derived + // type is unknown. A data member in the preserved slice refers to the + // outer object, so the chain of references looks like this: + // + // outer.iceSlicedData_.outer + // + do { + PreservedI.counter = 0 + let p = try testPrx.PBSUnknown2AsPreservedWithGraph() + try testPrx.checkPBSUnknown2WithGraph(p) + try test(PreservedI.counter == 1) + PreservedI.counter = 0 + } + + // + // Throw a preserved exception where the most-derived type is unknown. + // The preserved exception slice contains a class data member. This + // object is also preserved, and its most-derived type is also unknown. + // The preserved slice of the object contains a class data member that + // refers to itself. + // + // The chain of references looks like this: + // + // ex.slicedData_.obj.iceSlicedData_.obj + // + do { + try test(PreservedI.counter == 0) + do { + try testPrx.throwPreservedException() + } catch is PreservedException { + try test(PreservedI.counter == 1) + } + PreservedI.counter = 0 + } + } catch is Ice.OperationNotExistException {} + output.writeLine("ok") + return testPrx +} diff --git a/swift/test/Ice/slicing/objects/Client.swift b/swift/test/Ice/slicing/objects/Client.swift new file mode 100644 index 00000000000..064ae04d975 --- /dev/null +++ b/swift/test/Ice/slicing/objects/Client.swift @@ -0,0 +1,39 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import PromiseKit +import TestCommon + +class PreservedI: Preserved { + public required init() { + PreservedI.counter += 1 + super.init() + } + + static var counter: Int32 = 0 +} + +class PNodeI: PNode { + public required init() { + PNodeI.counter += 1 + super.init() + } + + static var counter: Int32 = 0 +} + +public class Client: TestHelperI { + public override func run(args: [String]) throws { + var initData = InitializationData() + initData.properties = try createTestProperties(args) + initData.classResolverPrefix = ["IceSlicingObjects", "IceSlicingObjectsClient"] + let communicator = try initialize(initData) + defer { + communicator.destroy() + } + let testPrx = try allTests(self) + try testPrx.shutdown() + } +} diff --git a/swift/test/Ice/slicing/objects/ClientPrivate.ice b/swift/test/Ice/slicing/objects/ClientPrivate.ice new file mode 100644 index 00000000000..67cf66a7323 --- /dev/null +++ b/swift/test/Ice/slicing/objects/ClientPrivate.ice @@ -0,0 +1,46 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#pragma once + +#include <Test.ice> + +[["swift:class-resolver-prefix:IceSlicingObjectsClient"]] + +module Test +{ + +class D3 extends B +{ + string sd3; + B pd3; +} + +["preserve-slice"] +class PCUnknown extends PBase +{ + string pu; +} + +class PCDerived extends PDerived +{ + PBaseSeq pbs; +} + +class PCDerived2 extends PCDerived +{ + int pcd2; +} + +class PCDerived3 extends PCDerived2 +{ + Object pcd3; +} + +class CompactPCDerived(57) extends CompactPDerived +{ + PBaseSeq pbs; +} + +} diff --git a/swift/test/Ice/slicing/objects/Server.swift b/swift/test/Ice/slicing/objects/Server.swift new file mode 100644 index 00000000000..dcc929bcdb6 --- /dev/null +++ b/swift/test/Ice/slicing/objects/Server.swift @@ -0,0 +1,27 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import TestCommon + +class Server: TestHelperI { + public override func run(args: [String]) throws { + let properties = try Ice.createProperties(args) + properties.setProperty(key: "Ice.Warn.Dispatch", value: "0") + var initData = InitializationData() + initData.properties = properties + initData.classResolverPrefix = ["IceSlicingObjects", "IceSlicingObjectsServer"] + let communicator = try initialize(initData) + defer { + communicator.destroy() + } + communicator.getProperties().setProperty(key: "TestAdapter.Endpoints", + value: "\(getTestEndpoint(num: 0)) -t 2000") + let adapter = try communicator.createObjectAdapter("TestAdapter") + try adapter.add(servant: TestIntfDisp(TestI(self)), id: Ice.stringToIdentity("Test")) + try adapter.activate() + serverReady() + communicator.waitForShutdown() + } +} diff --git a/swift/test/Ice/slicing/objects/ServerAMD.swift b/swift/test/Ice/slicing/objects/ServerAMD.swift new file mode 100644 index 00000000000..ae4a725871b --- /dev/null +++ b/swift/test/Ice/slicing/objects/ServerAMD.swift @@ -0,0 +1,27 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import TestCommon + +class ServerAMD: TestHelperI { + public override func run(args: [String]) throws { + let properties = try Ice.createProperties(args) + properties.setProperty(key: "Ice.Warn.Dispatch", value: "0") + var initData = InitializationData() + initData.properties = properties + initData.classResolverPrefix = ["IceSlicingObjectsAMD", "IceSlicingObjectsAMD"] + let communicator = try initialize(initData) + defer { + communicator.destroy() + } + communicator.getProperties().setProperty(key: "TestAdapter.Endpoints", + value: "\(getTestEndpoint(num: 0)) -t 2000") + let adapter = try communicator.createObjectAdapter("TestAdapter") + try adapter.add(servant: TestIntfDisp(TestI(self)), id: Ice.stringToIdentity("Test")) + try adapter.activate() + serverReady() + communicator.waitForShutdown() + } +} diff --git a/swift/test/Ice/slicing/objects/ServerPrivate.ice b/swift/test/Ice/slicing/objects/ServerPrivate.ice new file mode 100644 index 00000000000..36892bc126a --- /dev/null +++ b/swift/test/Ice/slicing/objects/ServerPrivate.ice @@ -0,0 +1,65 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#pragma once + +#include <Test.ice> + +[["swift:class-resolver-prefix:IceSlicingObjectsServer"]] + +module Test +{ + +class SBSUnknownDerived extends SBase +{ + string sbsud; +} + +class SUnknown +{ + string su; + SUnknown cycle; +} + +class D2 extends B +{ + string sd2; + B pd2; +} + +class D4 extends B +{ + B p1; + B p2; +} + +exception UnknownDerivedException extends BaseException +{ + string sude; + D2 pd2; +} + +class MyClass +{ + int i; +} + +class PSUnknown extends Preserved +{ + string psu; + PNode graph; + MyClass cl; +} + +class PSUnknown2 extends Preserved +{ + PBase pb; +} + +exception PSUnknownException extends PreservedException +{ + PSUnknown2 p; +} + +} diff --git a/swift/test/Ice/slicing/objects/ServerPrivateAMD.ice b/swift/test/Ice/slicing/objects/ServerPrivateAMD.ice new file mode 100644 index 00000000000..31228ab5613 --- /dev/null +++ b/swift/test/Ice/slicing/objects/ServerPrivateAMD.ice @@ -0,0 +1,65 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#pragma once + +#include <TestAMD.ice> + +[["swift:class-resolver-prefix:IceSlicingObjectsServerAMD"]] + +module Test +{ + +class SBSUnknownDerived extends SBase +{ + string sbsud; +} + +class SUnknown +{ + string su; + SUnknown cycle; +} + +class D2 extends B +{ + string sd2; + B pd2; +} + +class D4 extends B +{ + B p1; + B p2; +} + +exception UnknownDerivedException extends BaseException +{ + string sude; + D2 pd2; +} + +class MyClass +{ + int i; +} + +class PSUnknown extends Preserved +{ + string psu; + PNode graph; + MyClass cl; +} + +class PSUnknown2 extends Preserved +{ + PBase pb; +} + +exception PSUnknownException extends PreservedException +{ + PSUnknown2 p; +} + +} diff --git a/swift/test/Ice/slicing/objects/Test.ice b/swift/test/Ice/slicing/objects/Test.ice new file mode 100644 index 00000000000..3e9164301f7 --- /dev/null +++ b/swift/test/Ice/slicing/objects/Test.ice @@ -0,0 +1,170 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#pragma once + +[["swift:class-resolver-prefix:IceSlicingObjects"]] + +module Test +{ + +class SBase +{ + string sb; +} + +class SBSKnownDerived extends SBase +{ + string sbskd; +} + +class B +{ + string sb; + B pb; +} + +class D1 extends B +{ + string sd1; + B pd1; +} + +sequence<B> BSeq; + +class SS1 +{ + BSeq s; +} + +class SS2 +{ + BSeq s; +} + +struct SS3 +{ + SS1 c1; + SS2 c2; +} + +dictionary<int, B> BDict; + +exception BaseException +{ + string sbe; + B pb; +} + +exception DerivedException extends BaseException +{ + string sde; + D1 pd1; +} + +class Forward; + +class PBase +{ + int pi; +} + +sequence<PBase> PBaseSeq; + +["preserve-slice"] +class Preserved extends PBase +{ + string ps; +} + +class PDerived extends Preserved +{ + PBase pb; +} + +class CompactPDerived(56) extends Preserved +{ + PBase pb; +} + +["preserve-slice"] +class PNode +{ + PNode next; +} + +["preserve-slice"] +exception PreservedException +{ +} + +["format:sliced"] +interface TestIntf +{ + Object SBaseAsObject(); + SBase SBaseAsSBase(); + SBase SBSKnownDerivedAsSBase(); + SBSKnownDerived SBSKnownDerivedAsSBSKnownDerived(); + + SBase SBSUnknownDerivedAsSBase(); + + ["format:compact"] SBase SBSUnknownDerivedAsSBaseCompact(); + + Object SUnknownAsObject(); + void checkSUnknown(Object o); + + B oneElementCycle(); + B twoElementCycle(); + B D1AsB(); + D1 D1AsD1(); + B D2AsB(); + + void paramTest1(out B p1, out B p2); + void paramTest2(out B p2, out B p1); + B paramTest3(out B p1, out B p2); + B paramTest4(out B p); + + B returnTest1(out B p1, out B p2); + B returnTest2(out B p2, out B p1); + B returnTest3(B p1, B p2); + + SS3 sequenceTest(SS1 p1, SS2 p2); + + BDict dictionaryTest(BDict bin, out BDict bout); + + PBase exchangePBase(PBase pb); + + Preserved PBSUnknownAsPreserved(); + void checkPBSUnknown(Preserved p); + + ["amd"] Preserved PBSUnknownAsPreservedWithGraph(); + void checkPBSUnknownWithGraph(Preserved p); + + ["amd"] Preserved PBSUnknown2AsPreservedWithGraph(); + void checkPBSUnknown2WithGraph(Preserved p); + + PNode exchangePNode(PNode pn); + + void throwBaseAsBase() throws BaseException; + void throwDerivedAsBase() throws BaseException; + void throwDerivedAsDerived() throws DerivedException; + void throwUnknownDerivedAsBase() throws BaseException; + ["amd"] void throwPreservedException() throws PreservedException; + + void useForward(out Forward f); /* Use of forward-declared class to verify that code is generated correctly. */ + + void shutdown(); +} + +class Hidden +{ + Forward f; +} + +class Forward +{ + Hidden h; +} + +} diff --git a/swift/test/Ice/slicing/objects/TestAMD.ice b/swift/test/Ice/slicing/objects/TestAMD.ice new file mode 100644 index 00000000000..28787be71e3 --- /dev/null +++ b/swift/test/Ice/slicing/objects/TestAMD.ice @@ -0,0 +1,165 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#pragma once + +[["swift:class-resolver-prefix:IceSlicingObjectsAMD"]] + +module Test +{ + +class SBase +{ + string sb; +} + +class SBSKnownDerived extends SBase +{ + string sbskd; +} + +class B +{ + string sb; + B pb; +} + +class D1 extends B +{ + string sd1; + B pd1; +} + +sequence<B> BSeq; + +class SS1 +{ + BSeq s; +} + +class SS2 +{ + BSeq s; +} + +struct SS3 +{ + SS1 c1; + SS2 c2; +} + +dictionary<int, B> BDict; + +exception BaseException +{ + string sbe; + B pb; +} + +exception DerivedException extends BaseException +{ + string sde; + D1 pd1; +} + +class Forward; + +class PBase +{ + int pi; +} + +sequence<PBase> PBaseSeq; + +["preserve-slice"] +class Preserved extends PBase +{ + string ps; +} + +class PDerived extends Preserved +{ + PBase pb; +} + +["preserve-slice"] +class PNode +{ + PNode next; +} + +["preserve-slice"] +exception PreservedException +{ +} + +["amd", "format:sliced"] +interface TestIntf +{ + Object SBaseAsObject(); + SBase SBaseAsSBase(); + SBase SBSKnownDerivedAsSBase(); + SBSKnownDerived SBSKnownDerivedAsSBSKnownDerived(); + + SBase SBSUnknownDerivedAsSBase(); + + ["format:compact"] SBase SBSUnknownDerivedAsSBaseCompact(); + + Object SUnknownAsObject(); + void checkSUnknown(Object o); + + B oneElementCycle(); + B twoElementCycle(); + B D1AsB(); + D1 D1AsD1(); + B D2AsB(); + + void paramTest1(out B p1, out B p2); + void paramTest2(out B p2, out B p1); + B paramTest3(out B p1, out B p2); + B paramTest4(out B p); + + B returnTest1(out B p1, out B p2); + B returnTest2(out B p2, out B p1); + B returnTest3(B p1, B p2); + + SS3 sequenceTest(SS1 p1, SS2 p2); + + BDict dictionaryTest(BDict bin, out BDict bout); + + PBase exchangePBase(PBase pb); + + Preserved PBSUnknownAsPreserved(); + void checkPBSUnknown(Preserved p); + + Preserved PBSUnknownAsPreservedWithGraph(); + void checkPBSUnknownWithGraph(Preserved p); + + Preserved PBSUnknown2AsPreservedWithGraph(); + void checkPBSUnknown2WithGraph(Preserved p); + + PNode exchangePNode(PNode pn); + + void throwBaseAsBase() throws BaseException; + void throwDerivedAsBase() throws BaseException; + void throwDerivedAsDerived() throws DerivedException; + void throwUnknownDerivedAsBase() throws BaseException; + void throwPreservedException() throws PreservedException; + + void useForward(out Forward f); /* Use of forward-declared class to verify that code is generated correctly. */ + + void shutdown(); +} + +class Hidden +{ + Forward f; +} + +class Forward +{ + Hidden h; +} + +} diff --git a/swift/test/Ice/slicing/objects/TestAMDI.swift b/swift/test/Ice/slicing/objects/TestAMDI.swift new file mode 100644 index 00000000000..0d05c4df33d --- /dev/null +++ b/swift/test/Ice/slicing/objects/TestAMDI.swift @@ -0,0 +1,481 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import PromiseKit +import TestCommon + +class TestI: TestIntf { + var _helper: TestHelper + + init(_ helper: TestHelper) { + _helper = helper + } + + func SBaseAsObjectAsync(current _: Current) -> Promise<Value?> { + return Promise<Value?> { seal in + seal.fulfill(SBase(sb: "SBase.sb")) + } + } + + func SBaseAsSBaseAsync(current _: Current) -> Promise<SBase?> { + return Promise<SBase?> { seal in + seal.fulfill(SBase(sb: "SBase.sb")) + } + } + + func SBSKnownDerivedAsSBaseAsync(current _: Current) -> Promise<SBase?> { + return Promise<SBase?> { seal in + seal.fulfill(SBSKnownDerived(sb: "SBSKnownDerived.sb", sbskd: "SBSKnownDerived.sbskd")) + } + } + + func SBSKnownDerivedAsSBSKnownDerivedAsync(current _: Current) -> Promise<SBSKnownDerived?> { + return Promise<SBSKnownDerived?> { seal in + seal.fulfill(SBSKnownDerived(sb: "SBSKnownDerived.sb", sbskd: "SBSKnownDerived.sbskd")) + } + } + + func SBSUnknownDerivedAsSBaseAsync(current _: Current) -> Promise<SBase?> { + return Promise<SBase?> { seal in + seal.fulfill(SBSUnknownDerived(sb: "SBSUnknownDerived.sb", sbsud: "SBSUnknownDerived.sbsud")) + } + } + + func SBSUnknownDerivedAsSBaseCompactAsync(current _: Current) -> Promise<SBase?> { + return Promise<SBase?> { seal in + seal.fulfill(SBSUnknownDerived(sb: "SBSUnknownDerived.sb", sbsud: "SBSUnknownDerived.sbsud")) + } + } + + func SUnknownAsObjectAsync(current _: Current) -> Promise<Value?> { + return Promise<Value?> { seal in + let su = SUnknown() + su.su = "SUnknown.su" + su.cycle = su + seal.fulfill(su) + } + } + + func checkSUnknownAsync(o: Value?, current: Current) -> Promise<Void> { + return Promise<Void> { _ in + if current.encoding == Ice.Encoding_1_0 { + try _helper.test(!(o is SUnknown)) + } else { + try _helper.test((o as! SUnknown).su == "SUnknown.su") + } + } + } + + func oneElementCycleAsync(current _: Current) -> Promise<B?> { + return Promise<B?> { seal in + let b = B() + b.sb = "B1.sb" + b.pb = b + seal.fulfill(b) + } + } + + func twoElementCycleAsync(current _: Current) -> Promise<B?> { + return Promise<B?> { seal in + let b1 = B() + b1.sb = "B1.sb" + let b2 = B() + b2.sb = "B2.sb" + b2.pb = b1 + b1.pb = b2 + seal.fulfill(b1) + } + } + + func D1AsBAsync(current _: Current) -> Promise<B?> { + return Promise<B?> { seal in + let d1 = D1() + d1.sb = "D1.sb" + d1.sd1 = "D1.sd1" + let d2 = D2() + d2.pb = d1 + d2.sb = "D2.sb" + d2.sd2 = "D2.sd2" + d2.pd2 = d1 + d1.pb = d2 + d1.pd1 = d2 + seal.fulfill(d1) + } + } + + func D1AsD1Async(current _: Current) -> Promise<D1?> { + return Promise<D1?> { seal in + let d1 = D1() + d1.sb = "D1.sb" + d1.sd1 = "D1.sd1" + let d2 = D2() + d2.pb = d1 + d2.sb = "D2.sb" + d2.sd2 = "D2.sd2" + d2.pd2 = d1 + d1.pb = d2 + d1.pd1 = d2 + seal.fulfill(d1) + } + } + + func D2AsBAsync(current _: Current) -> Promise<B?> { + return Promise<B?> { seal in + let d2 = D2() + d2.sb = "D2.sb" + d2.sd2 = "D2.sd2" + let d1 = D1() + d1.pb = d2 + d1.sb = "D1.sb" + d1.sd1 = "D1.sd1" + d1.pd1 = d2 + d2.pb = d1 + d2.pd2 = d1 + seal.fulfill(d2) + } + } + + func paramTest1Async(current _: Current) -> Promise<(p1: B?, p2: B?)> { + return Promise<(p1: B?, p2: B?)> { seal in + let d1 = D1() + d1.sb = "D1.sb" + d1.sd1 = "D1.sd1" + let d2 = D2() + d2.pb = d1 + d2.sb = "D2.sb" + d2.sd2 = "D2.sd2" + d2.pd2 = d1 + d1.pb = d2 + d1.pd1 = d2 + seal.fulfill((d1, d2)) + } + } + + func paramTest2Async(current _: Current) -> Promise<(p2: B?, p1: B?)> { + return Promise<(p2: B?, p1: B?)> { seal in + let d1 = D1() + d1.sb = "D1.sb" + d1.sd1 = "D1.sd1" + let d2 = D2() + d2.pb = d1 + d2.sb = "D2.sb" + d2.sd2 = "D2.sd2" + d2.pd2 = d1 + d1.pb = d2 + d1.pd1 = d2 + seal.fulfill((d2, d1)) + } + } + + func paramTest3Async(current _: Current) -> Promise<(returnValue: B?, p1: B?, p2: B?)> { + return Promise<(returnValue: B?, p1: B?, p2: B?)> { seal in + let d2 = D2() + d2.sb = "D2.sb (p1 1)" + d2.pb = nil + d2.sd2 = "D2.sd2 (p1 1)" + + let d1 = D1() + d1.sb = "D1.sb (p1 2)" + d1.pb = nil + d1.sd1 = "D1.sd2 (p1 2)" + d1.pd1 = nil + d2.pd2 = d1 + + let d4 = D2() + d4.sb = "D2.sb (p2 1)" + d4.pb = nil + d4.sd2 = "D2.sd2 (p2 1)" + + let d3 = D1() + d3.sb = "D1.sb (p2 2)" + d3.pb = nil + d3.sd1 = "D1.sd2 (p2 2)" + d3.pd1 = nil + d4.pd2 = d3 + + seal.fulfill((d3, d2, d4)) + } + } + + func paramTest4Async(current _: Current) -> Promise<(returnValue: B?, p: B?)> { + return Promise<(returnValue: B?, p: B?)> { seal in + let d4 = D4() + d4.sb = "D4.sb (1)" + d4.pb = nil + d4.p1 = B() + d4.p1!.sb = "B.sb (1)" + d4.p2 = B() + d4.p2!.sb = "B.sb (2)" + + seal.fulfill((d4.p2, d4)) + } + } + + func returnTest1Async(current _: Current) -> Promise<(returnValue: B?, p1: B?, p2: B?)> { + return Promise<(returnValue: B?, p1: B?, p2: B?)> { seal in + let d1 = D1() + d1.sb = "D1.sb" + d1.sd1 = "D1.sd1" + let d2 = D2() + d2.pb = d1 + d2.sb = "D2.sb" + d2.sd2 = "D2.sd2" + d2.pd2 = d1 + d1.pb = d2 + d1.pd1 = d2 + + seal.fulfill((d2, d2, d1)) + } + } + + func returnTest2Async(current _: Current) -> Promise<(returnValue: B?, p2: B?, p1: B?)> { + return Promise<(returnValue: B?, p2: B?, p1: B?)> { seal in + let d1 = D1() + d1.sb = "D1.sb" + d1.sd1 = "D1.sd1" + let d2 = D2() + d2.pb = d1 + d2.sb = "D2.sb" + d2.sd2 = "D2.sd2" + d2.pd2 = d1 + d1.pb = d2 + d1.pd1 = d2 + + seal.fulfill((d1, d1, d2)) + } + } + + func returnTest3Async(p1: B?, p2 _: B?, current _: Current) -> Promise<B?> { + return Promise<B?> { seal in + seal.fulfill(p1) + } + } + + func sequenceTestAsync(p1: SS1?, p2: SS2?, current _: Current) -> Promise<SS3> { + return Promise<SS3> { seal in + seal.fulfill(SS3(c1: p1, c2: p2)) + } + } + + func dictionaryTestAsync(bin: BDict, current _: Current) -> Promise<(returnValue: BDict, bout: BDict)> { + return Promise<(returnValue: BDict, bout: BDict)> { seal in + var bout = [Int32: B?]() + for i: Int32 in 0 ..< 10 { + let b = bin[i]!! + let d2 = D2() + d2.sb = b.sb + d2.pb = b.pb + d2.sd2 = "D2" + d2.pd2 = d2 + bout[i * 10] = d2 + } + + var r = [Int32: B]() + for i: Int32 in 0 ..< 10 { + let s = "D1.\(i * 20)" + let d1 = D1() + d1.sb = s + d1.pb = i == 0 ? nil : r[(i - 1) * 20] + d1.sd1 = s + d1.pd1 = d1 + r[i * 20] = d1 + } + return seal.fulfill((r, bout)) + } + } + + func exchangePBaseAsync(pb: PBase?, current _: Current) -> Promise<PBase?> { + return Promise<PBase?> { seal in + seal.fulfill(pb) + } + } + + func PBSUnknownAsPreservedAsync(current: Current) -> Promise<Preserved?> { + return Promise<Preserved?> { seal in + let r = PSUnknown() + r.pi = 5 + r.ps = "preserved" + r.psu = "unknown" + r.graph = nil + if current.encoding != Ice.Encoding_1_0 { + // + // 1.0 encoding doesn't support unmarshaling unknown classes even if referenced + // from unread slice. + // + r.cl = MyClass(i: 15) + } + seal.fulfill(r) + } + } + + func checkPBSUnknownAsync(p: Preserved?, current: Current) -> Promise<Void> { + return Promise<Void> { _ in + if current.encoding == Ice.Encoding_1_0 { + try _helper.test(!(p is PSUnknown)) + try _helper.test(p!.pi == 5) + try _helper.test(p!.ps == "preserved") + } else { + let pu = p as! PSUnknown + try _helper.test(pu.pi == 5) + try _helper.test(pu.ps == "preserved") + try _helper.test(pu.psu == "unknown") + try _helper.test(pu.graph == nil) + try _helper.test(pu.cl != nil && pu.cl!.i == 15) + } + } + } + + func PBSUnknownAsPreservedWithGraphAsync(current _: Current) -> Promise<Preserved?> { + return Promise<Preserved?> { seal in + let r = PSUnknown() + r.pi = 5 + r.ps = "preserved" + r.psu = "unknown" + r.graph = PNode() + r.graph!.next = PNode() + r.graph!.next!.next = PNode() + r.graph!.next!.next!.next = r.graph + seal.fulfill(r) + } + } + + func checkPBSUnknownWithGraphAsync(p: Preserved?, current: Current) -> Promise<Void> { + return Promise<Void> { _ in + if current.encoding == Ice.Encoding_1_0 { + try _helper.test(!(p is PSUnknown)) + try _helper.test(p!.pi == 5) + try _helper.test(p!.ps == "preserved") + } else { + let pu = p as! PSUnknown + try _helper.test(pu.pi == 5) + try _helper.test(pu.ps == "preserved") + try _helper.test(pu.psu == "unknown") + try _helper.test(pu.graph !== pu.graph!.next) + try _helper.test(pu.graph!.next !== pu.graph!.next!.next) + try _helper.test(pu.graph!.next!.next!.next === pu.graph) + } + } + } + + func PBSUnknown2AsPreservedWithGraphAsync(current _: Current) -> Promise<Preserved?> { + return Promise<Preserved?> { seal in + let r = PSUnknown2() + r.pi = 5 + r.ps = "preserved" + r.pb = r + seal.fulfill(r) + } + } + + func checkPBSUnknown2WithGraphAsync(p: Preserved?, current: Current) -> Promise<Void> { + return Promise<Void> { _ in + if current.encoding == Ice.Encoding_1_0 { + try _helper.test(!(p is PSUnknown2)) + try _helper.test(p!.pi == 5) + try _helper.test(p!.ps == "preserved") + } else { + let pu = p as! PSUnknown2 + try _helper.test(pu.pi == 5) + try _helper.test(pu.ps == "preserved") + try _helper.test(pu.pb === pu) + } + } + } + + func exchangePNodeAsync(pn: PNode?, current _: Current) -> Promise<PNode?> { + return Promise<PNode?> { seal in + seal.fulfill(pn) + } + } + + func throwBaseAsBaseAsync(current _: Current) -> Promise<Void> { + return Promise<Void> { _ in + let be = BaseException() + be.sbe = "sbe" + be.pb = B() + be.pb!.sb = "sb" + be.pb!.pb = be.pb + throw be + } + } + + func throwDerivedAsBaseAsync(current _: Current) -> Promise<Void> { + return Promise<Void> { _ in + let de = DerivedException() + de.sbe = "sbe" + de.pb = B() + de.pb!.sb = "sb1" + de.pb!.pb = de.pb + de.sde = "sde1" + de.pd1 = D1() + de.pd1!.sb = "sb2" + de.pd1!.pb = de.pd1 + de.pd1!.sd1 = "sd2" + de.pd1!.pd1 = de.pd1 + throw de + } + } + + func throwDerivedAsDerivedAsync(current _: Current) -> Promise<Void> { + return Promise<Void> { _ in + let de = DerivedException() + de.sbe = "sbe" + de.pb = B() + de.pb!.sb = "sb1" + de.pb!.pb = de.pb + de.sde = "sde1" + de.pd1 = D1() + de.pd1!.sb = "sb2" + de.pd1!.pb = de.pd1 + de.pd1!.sd1 = "sd2" + de.pd1!.pd1 = de.pd1 + throw de + } + } + + func throwUnknownDerivedAsBaseAsync(current _: Current) -> Promise<Void> { + return Promise<Void> { _ in + let d2 = D2() + d2.sb = "sb d2" + d2.pb = d2 + d2.sd2 = "sd2 d2" + d2.pd2 = d2 + + let ude = UnknownDerivedException() + ude.sbe = "sbe" + ude.pb = d2 + ude.sude = "sude" + ude.pd2 = d2 + throw ude + } + } + + func throwPreservedExceptionAsync(current _: Current) -> Promise<Void> { + return Promise<Void> { _ in + let ue = PSUnknownException() + ue.p = PSUnknown2() + ue.p!.pi = 5 + ue.p!.ps = "preserved" + ue.p!.pb = ue.p + throw ue + } + } + + func useForwardAsync(current _: Current) -> Promise<Forward?> { + return Promise<Forward?> { seal in + let f = Forward() + f.h = Hidden() + f.h!.f = f + seal.fulfill(f) + } + } + + func shutdownAsync(current: Current) -> Promise<Void> { + return Promise<Void> { seal in + current.adapter!.getCommunicator().shutdown() + seal.fulfill(()) + } + } +} diff --git a/swift/test/Ice/slicing/objects/TestI.swift b/swift/test/Ice/slicing/objects/TestI.swift new file mode 100644 index 00000000000..da69ad32e5e --- /dev/null +++ b/swift/test/Ice/slicing/objects/TestI.swift @@ -0,0 +1,385 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import PromiseKit +import TestCommon + +class TestI: TestIntf { + var _helper: TestHelper + + init(_ helper: TestHelper) { + _helper = helper + } + + func SBaseAsObject(current _: Current) throws -> Value? { + return SBase(sb: "SBase.sb") + } + + func SBaseAsSBase(current _: Current) throws -> SBase? { + return SBase(sb: "SBase.sb") + } + + func SBSKnownDerivedAsSBase(current _: Current) throws -> SBase? { + return SBSKnownDerived(sb: "SBSKnownDerived.sb", sbskd: "SBSKnownDerived.sbskd") + } + + func SBSKnownDerivedAsSBSKnownDerived(current _: Current) throws -> SBSKnownDerived? { + return SBSKnownDerived(sb: "SBSKnownDerived.sb", sbskd: "SBSKnownDerived.sbskd") + } + + func SBSUnknownDerivedAsSBase(current _: Current) throws -> SBase? { + return SBSUnknownDerived(sb: "SBSUnknownDerived.sb", sbsud: "SBSUnknownDerived.sbsud") + } + + func SBSUnknownDerivedAsSBaseCompact(current _: Current) throws -> SBase? { + return SBSUnknownDerived(sb: "SBSUnknownDerived.sb", sbsud: "SBSUnknownDerived.sbsud") + } + + func SUnknownAsObject(current _: Current) throws -> Value? { + let su = SUnknown() + su.su = "SUnknown.su" + su.cycle = su + return su + } + + func checkSUnknown(o: Value?, current: Current) throws { + if current.encoding == Ice.Encoding_1_0 { + try _helper.test(!(o is SUnknown)) + } else { + try _helper.test((o as! SUnknown).su == "SUnknown.su") + } + } + + func oneElementCycle(current _: Current) throws -> B? { + let b = B() + b.sb = "B1.sb" + b.pb = b + return b + } + + func twoElementCycle(current _: Current) throws -> B? { + let b1 = B() + b1.sb = "B1.sb" + let b2 = B() + b2.sb = "B2.sb" + b2.pb = b1 + b1.pb = b2 + return b1 + } + + func D1AsB(current _: Current) throws -> B? { + let d1 = D1() + d1.sb = "D1.sb" + d1.sd1 = "D1.sd1" + let d2 = D2() + d2.pb = d1 + d2.sb = "D2.sb" + d2.sd2 = "D2.sd2" + d2.pd2 = d1 + d1.pb = d2 + d1.pd1 = d2 + return d1 + } + + func D1AsD1(current _: Current) throws -> D1? { + let d1 = D1() + d1.sb = "D1.sb" + d1.sd1 = "D1.sd1" + let d2 = D2() + d2.pb = d1 + d2.sb = "D2.sb" + d2.sd2 = "D2.sd2" + d2.pd2 = d1 + d1.pb = d2 + d1.pd1 = d2 + return d1 + } + + func D2AsB(current _: Current) throws -> B? { + let d2 = D2() + d2.sb = "D2.sb" + d2.sd2 = "D2.sd2" + let d1 = D1() + d1.pb = d2 + d1.sb = "D1.sb" + d1.sd1 = "D1.sd1" + d1.pd1 = d2 + d2.pb = d1 + d2.pd2 = d1 + return d2 + } + + func paramTest1(current _: Current) throws -> (p1: B?, p2: B?) { + let d1 = D1() + d1.sb = "D1.sb" + d1.sd1 = "D1.sd1" + let d2 = D2() + d2.pb = d1 + d2.sb = "D2.sb" + d2.sd2 = "D2.sd2" + d2.pd2 = d1 + d1.pb = d2 + d1.pd1 = d2 + return (d1, d2) + } + + func paramTest2(current: Current) throws -> (p2: B?, p1: B?) { + let ret = try paramTest1(current: current) + return (ret.p2, ret.p1) + } + + func paramTest3(current _: Current) throws -> (returnValue: B?, p1: B?, p2: B?) { + let d2 = D2() + d2.sb = "D2.sb (p1 1)" + d2.pb = nil + d2.sd2 = "D2.sd2 (p1 1)" + + let d1 = D1() + d1.sb = "D1.sb (p1 2)" + d1.pb = nil + d1.sd1 = "D1.sd2 (p1 2)" + d1.pd1 = nil + d2.pd2 = d1 + + let d4 = D2() + d4.sb = "D2.sb (p2 1)" + d4.pb = nil + d4.sd2 = "D2.sd2 (p2 1)" + + let d3 = D1() + d3.sb = "D1.sb (p2 2)" + d3.pb = nil + d3.sd1 = "D1.sd2 (p2 2)" + d3.pd1 = nil + d4.pd2 = d3 + + return (d3, d2, d4) + } + + func paramTest4(current _: Current) throws -> (returnValue: B?, p: B?) { + let d4 = D4() + d4.sb = "D4.sb (1)" + d4.pb = nil + d4.p1 = B() + d4.p1!.sb = "B.sb (1)" + d4.p2 = B() + d4.p2!.sb = "B.sb (2)" + return (d4.p2, d4) + } + + func returnTest1(current: Current) throws -> (returnValue: B?, p1: B?, p2: B?) { + let ret = try paramTest1(current: current) + return (ret.p1, ret.p1, ret.p2) + } + + func returnTest2(current: Current) throws -> (returnValue: B?, p2: B?, p1: B?) { + let ret = try paramTest1(current: current) + return (ret.p1, ret.p1, ret.p2) + } + + func returnTest3(p1: B?, p2 _: B?, current _: Current) throws -> B? { + return p1 + } + + func sequenceTest(p1: SS1?, p2: SS2?, current _: Current) throws -> SS3 { + let ss = SS3() + ss.c1 = p1 + ss.c2 = p2 + return ss + } + + func dictionaryTest(bin: BDict, current _: Current) throws -> (returnValue: BDict, bout: BDict) { + var bout = [Int32: B?]() + for i: Int32 in 0 ..< 10 { + let b = bin[i]!! + let d2 = D2() + d2.sb = b.sb + d2.pb = b.pb + d2.sd2 = "D2" + d2.pd2 = d2 + bout[i * 10] = d2 + } + + var r = [Int32: B]() + for i: Int32 in 0 ..< 10 { + let s = "D1.\(i * 20)" + let d1 = D1() + d1.sb = s + d1.pb = i == 0 ? nil : r[(i - 1) * 20] + d1.sd1 = s + d1.pd1 = d1 + r[i * 20] = d1 + } + return (r, bout) + } + + func exchangePBase(pb: PBase?, current _: Current) throws -> PBase? { + return pb + } + + func PBSUnknownAsPreserved(current: Current) throws -> Preserved? { + let r = PSUnknown() + r.pi = 5 + r.ps = "preserved" + r.psu = "unknown" + r.graph = nil + if current.encoding != Ice.Encoding_1_0 { + // + // 1.0 encoding doesn't support unmarshaling unknown classes even if referenced + // from unread slice. + // + r.cl = MyClass(i: 15) + } + return r + } + + func checkPBSUnknown(p: Preserved?, current: Current) throws { + if current.encoding == Ice.Encoding_1_0 { + try _helper.test(!(p is PSUnknown)) + try _helper.test(p!.pi == 5) + try _helper.test(p!.ps == "preserved") + } else { + let pu = p as! PSUnknown + try _helper.test(pu.pi == 5) + try _helper.test(pu.ps == "preserved") + try _helper.test(pu.psu == "unknown") + try _helper.test(pu.graph == nil) + try _helper.test(pu.cl != nil && pu.cl!.i == 15) + } + } + + func PBSUnknownAsPreservedWithGraphAsync(current _: Current) -> Promise<Preserved?> { + return Promise<Preserved?> { seal in + let r = PSUnknown() + r.pi = 5 + r.ps = "preserved" + r.psu = "unknown" + r.graph = PNode() + r.graph!.next = PNode() + r.graph!.next!.next = PNode() + r.graph!.next!.next!.next = r.graph + seal.fulfill(r) + } + } + + func checkPBSUnknownWithGraph(p: Preserved?, current: Current) throws { + if current.encoding == Ice.Encoding_1_0 { + try _helper.test(!(p is PSUnknown)) + try _helper.test(p!.pi == 5) + try _helper.test(p!.ps == "preserved") + } else { + let pu = p as! PSUnknown + try _helper.test(pu.pi == 5) + try _helper.test(pu.ps == "preserved") + try _helper.test(pu.psu == "unknown") + try _helper.test(pu.graph !== pu.graph!.next) + try _helper.test(pu.graph!.next !== pu.graph!.next!.next) + try _helper.test(pu.graph!.next!.next!.next === pu.graph) + } + } + + func PBSUnknown2AsPreservedWithGraphAsync(current _: Current) -> Promise<Preserved?> { + return Promise<Preserved?> { seal in + let r = PSUnknown2() + r.pi = 5 + r.ps = "preserved" + r.pb = r + seal.fulfill(r) + } + } + + func checkPBSUnknown2WithGraph(p: Preserved?, current: Current) throws { + if current.encoding == Ice.Encoding_1_0 { + try _helper.test(!(p is PSUnknown2)) + try _helper.test(p!.pi == 5) + try _helper.test(p!.ps == "preserved") + } else { + let pu = p as! PSUnknown2 + try _helper.test(pu.pi == 5) + try _helper.test(pu.ps == "preserved") + try _helper.test(pu.pb === pu) + } + } + + func exchangePNode(pn: PNode?, current _: Current) throws -> PNode? { + return pn + } + + func throwBaseAsBase(current _: Current) throws { + let be = BaseException() + be.sbe = "sbe" + be.pb = B() + be.pb!.sb = "sb" + be.pb!.pb = be.pb + throw be + } + + func throwDerivedAsBase(current _: Current) throws { + let de = DerivedException() + de.sbe = "sbe" + de.pb = B() + de.pb!.sb = "sb1" + de.pb!.pb = de.pb + de.sde = "sde1" + de.pd1 = D1() + de.pd1!.sb = "sb2" + de.pd1!.pb = de.pd1 + de.pd1!.sd1 = "sd2" + de.pd1!.pd1 = de.pd1 + throw de + } + + func throwDerivedAsDerived(current _: Current) throws { + let de = DerivedException() + de.sbe = "sbe" + de.pb = B() + de.pb!.sb = "sb1" + de.pb!.pb = de.pb + de.sde = "sde1" + de.pd1 = D1() + de.pd1!.sb = "sb2" + de.pd1!.pb = de.pd1 + de.pd1!.sd1 = "sd2" + de.pd1!.pd1 = de.pd1 + throw de + } + + func throwUnknownDerivedAsBase(current _: Current) throws { + let d2 = D2() + d2.sb = "sb d2" + d2.pb = d2 + d2.sd2 = "sd2 d2" + d2.pd2 = d2 + + let ude = UnknownDerivedException() + ude.sbe = "sbe" + ude.pb = d2 + ude.sude = "sude" + ude.pd2 = d2 + throw ude + } + + func throwPreservedExceptionAsync(current _: Current) -> Promise<Void> { + return Promise<Void> { _ in + let ue = PSUnknownException() + ue.p = PSUnknown2() + ue.p!.pi = 5 + ue.p!.ps = "preserved" + ue.p!.pb = ue.p + throw ue + } + } + + func useForward(current _: Current) throws -> Forward? { + let f = Forward() + f.h = Hidden() + f.h!.f = f + return f + } + + func shutdown(current: Current) throws { + current.adapter!.getCommunicator().shutdown() + } +} diff --git a/swift/test/Ice/stream/Client.swift b/swift/test/Ice/stream/Client.swift new file mode 100644 index 00000000000..66b1ca21a3d --- /dev/null +++ b/swift/test/Ice/stream/Client.swift @@ -0,0 +1,589 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Foundation +import Ice +import TestCommon + +public class Client: TestHelperI { + public override func run(args: [String]) throws { + var writer = getWriter() + writer.write("testing primitive types... ") + + var initData = Ice.InitializationData() + initData.properties = try createTestProperties(args) + initData.classResolverPrefix = ["IceStrem"] + let communicator = try initialize(initData) + defer { + communicator.destroy() + } + try communicator.getValueFactoryManager().add( + factory: { Ice.InterfaceByValue(id: $0) }, id: "::Test::MyInterface" + ) + + var inS: Ice.InputStream + var outS: Ice.OutputStream + + do { + let data = Data() + inS = Ice.InputStream(communicator: communicator, bytes: data) + } + + do { + outS = Ice.OutputStream(communicator: communicator) + outS.startEncapsulation() + outS.write(true) + outS.endEncapsulation() + let data = outS.finished() + + inS = Ice.InputStream(communicator: communicator, bytes: data) + try inS.startEncapsulation() + var value: Bool = try inS.read() + try test(value) + + inS = Ice.InputStream(communicator: communicator, bytes: data) + try inS.startEncapsulation() + value = try inS.read() + try test(value) + } + + do { + inS = Ice.InputStream(communicator: communicator, bytes: Data()) + do { + _ = try inS.read() as Bool + try test(false) + } catch {} + } + + do { + outS = Ice.OutputStream(communicator: communicator) + outS.write(true) + let data = outS.finished() + inS = Ice.InputStream(communicator: communicator, bytes: data) + let value: Bool = try inS.read() + try test(value) + } + + do { + outS = Ice.OutputStream(communicator: communicator) + outS.write(UInt8(1)) + let data = outS.finished() + inS = Ice.InputStream(communicator: communicator, bytes: data) + let value: UInt8 = try inS.read() + try test(value == 1) + } + + do { + outS = Ice.OutputStream(communicator: communicator) + outS.write(Int16(2)) + let data = outS.finished() + inS = Ice.InputStream(communicator: communicator, bytes: data) + let value: Int16 = try inS.read() + try test(value == 2) + } + + do { + outS = Ice.OutputStream(communicator: communicator) + outS.write(Int32(3)) + let data = outS.finished() + inS = Ice.InputStream(communicator: communicator, bytes: data) + let value: Int32 = try inS.read() + try test(value == 3) + } + + do { + outS = Ice.OutputStream(communicator: communicator) + outS.write(Int64(4)) + let data = outS.finished() + inS = Ice.InputStream(communicator: communicator, bytes: data) + let value: Int64 = try inS.read() + try test(value == 4) + } + + do { + outS = Ice.OutputStream(communicator: communicator) + outS.write(Float(5.0)) + let data = outS.finished() + inS = Ice.InputStream(communicator: communicator, bytes: data) + let value: Float = try inS.read() + try test(value == 5.0) + } + + do { + outS = Ice.OutputStream(communicator: communicator) + outS.write(Double(6.0)) + let data = outS.finished() + inS = Ice.InputStream(communicator: communicator, bytes: data) + let value: Double = try inS.read() + try test(value == 6.0) + } + + do { + outS = Ice.OutputStream(communicator: communicator) + outS.write("hello world") + let data = outS.finished() + inS = Ice.InputStream(communicator: communicator, bytes: data) + let value: String = try inS.read() + try test(value == "hello world") + } + + writer.writeLine("ok") + + writer.write("testing constructed types... ") + do { + outS = Ice.OutputStream(communicator: communicator) + outS.write(MyEnum.enum3) + let data = outS.finished() + inS = Ice.InputStream(communicator: communicator, bytes: data) + let e: MyEnum = try inS.read() + try test(e == MyEnum.enum3) + } + + do { + outS = Ice.OutputStream(communicator: communicator) + var s = SmallStruct() + s.bo = true + s.by = 1 + s.sh = 2 + s.i = 3 + s.l = 4 + s.f = 5.0 + s.d = 6.0 + s.str = "7" + s.e = MyEnum.enum2 + s.p = uncheckedCast(prx: try communicator.stringToProxy("test:default")!, + type: MyInterfacePrx.self) + outS.write(s) + let data = outS.finished() + inS = Ice.InputStream(communicator: communicator, bytes: data) + let s2: SmallStruct = try inS.read() + try test(s2.bo == true) + try test(s2.by == 1) + try test(s2.sh == 2) + try test(s2.i == 3) + try test(s2.l == 4) + try test(s2.f == 5.0) + try test(s2.d == 6.0) + try test(s2.str == "7") + try test(s2.e == MyEnum.enum2) + try test(s2.p == s.p) + } + + do { + outS = Ice.OutputStream(communicator: communicator) + let o = OptionalClass() + o.bo = true + o.by = 5 + o.sh = 4 + o.i = 3 + outS.write(o) + outS.writePendingValues() + let data = outS.finished() + inS = Ice.InputStream(communicator: communicator, bytes: data) + var o2: OptionalClass? + try inS.read(OptionalClass.self) { + o2 = $0 + } + try inS.readPendingValues() + try test(o2!.bo == o.bo) + try test(o2!.by == o.by) + if communicator.getProperties().getProperty("Ice.Default.EncodingVersion") == "1.0" { + try test(o2!.sh == nil) + try test(o2!.i == nil) + } else { + try test(o2!.sh == o.sh) + try test(o2!.i == o.i) + } + } + + do { + outS = Ice.OutputStream(communicator: communicator, encoding: Ice.Encoding_1_0) + let o = OptionalClass() + o.bo = true + o.by = 5 + o.sh = 4 + o.i = 3 + outS.write(o) + outS.writePendingValues() + let data = outS.finished() + inS = Ice.InputStream(communicator: communicator, encoding: Ice.Encoding_1_0, bytes: data) + var o2: OptionalClass? + try inS.read(OptionalClass.self) { + o2 = $0 + } + try inS.readPendingValues() + try test(o2!.bo == o.bo) + try test(o2!.by == o.by) + try test(o2!.sh == nil) + try test(o2!.i == nil) + } + + do { + let arr = [true, false, true, false] + outS = Ice.OutputStream(communicator: communicator) + outS.write(arr) + var data = outS.finished() + inS = Ice.InputStream(communicator: communicator, bytes: data) + let arr2: [Bool] = try inS.read() + try test(arr2 == arr) + + let arrS = [arr, [], arr] + outS = Ice.OutputStream(communicator: communicator) + BoolSSHelper.write(to: outS, value: arrS) + data = outS.finished() + inS = Ice.InputStream(communicator: communicator, bytes: data) + let arr2S: [[Bool]] = try BoolSSHelper.read(from: inS) + try test(arr2S == arrS) + } + + do { + let arr = ByteSeq([0x01, 0x11, 0x12, 0x22]) + outS = Ice.OutputStream(communicator: communicator) + outS.write(arr) + var data = outS.finished() + inS = Ice.InputStream(communicator: communicator, bytes: data) + let arr2: ByteSeq = try inS.read() + try test(arr2 == arr) + + let arrS = [arr, ByteSeq(), arr] + outS = Ice.OutputStream(communicator: communicator) + ByteSSHelper.write(to: outS, value: arrS) + data = outS.finished() + inS = Ice.InputStream(communicator: communicator, bytes: data) + let arr2S = try ByteSSHelper.read(from: inS) + try test(arr2S == arrS) + } + + do { + let arr: [Int16] = [0x01, 0x11, 0x12, 0x22] + outS = Ice.OutputStream(communicator: communicator) + outS.write(arr) + var data = outS.finished() + inS = Ice.InputStream(communicator: communicator, bytes: data) + let arr2: [Int16] = try inS.read() + try test(arr2 == arr) + + let arrS = [arr, [], arr] + outS = Ice.OutputStream(communicator: communicator) + ShortSSHelper.write(to: outS, value: arrS) + data = outS.finished() + inS = Ice.InputStream(communicator: communicator, bytes: data) + let arr2S = try ShortSSHelper.read(from: inS) + try test(arr2S == arrS) + } + + do { + let arr: [Int32] = [0x01, 0x11, 0x12, 0x22] + outS = Ice.OutputStream(communicator: communicator) + outS.write(arr) + var data = outS.finished() + inS = Ice.InputStream(communicator: communicator, bytes: data) + let arr2: [Int32] = try inS.read() + try test(arr2 == arr) + + let arrS = [arr, [], arr] + outS = Ice.OutputStream(communicator: communicator) + IntSSHelper.write(to: outS, value: arrS) + data = outS.finished() + inS = Ice.InputStream(communicator: communicator, bytes: data) + let arr2S = try IntSSHelper.read(from: inS) + try test(arr2S == arrS) + } + + do { + let arr: [Int64] = [0x01, 0x11, 0x12, 0x22] + outS = Ice.OutputStream(communicator: communicator) + outS.write(arr) + var data = outS.finished() + inS = Ice.InputStream(communicator: communicator, bytes: data) + let arr2: [Int64] = try inS.read() + try test(arr2 == arr) + + let arrS = [arr, [], arr] + outS = Ice.OutputStream(communicator: communicator) + LongSSHelper.write(to: outS, value: arrS) + data = outS.finished() + inS = Ice.InputStream(communicator: communicator, bytes: data) + let arr2S = try LongSSHelper.read(from: inS) + try test(arr2S == arrS) + } + + do { + let arr: [Float] = [1, 2, 3, 4] + outS = Ice.OutputStream(communicator: communicator) + outS.write(arr) + var data = outS.finished() + inS = Ice.InputStream(communicator: communicator, bytes: data) + let arr2: [Float] = try inS.read() + try test(arr2 == arr) + + let arrS = [arr, [], arr] + outS = Ice.OutputStream(communicator: communicator) + FloatSSHelper.write(to: outS, value: arrS) + data = outS.finished() + inS = Ice.InputStream(communicator: communicator, bytes: data) + let arr2S = try FloatSSHelper.read(from: inS) + try test(arr2S == arrS) + } + + do { + let arr: [Double] = [1, 2, 3, 4] + outS = Ice.OutputStream(communicator: communicator) + outS.write(arr) + var data = outS.finished() + inS = Ice.InputStream(communicator: communicator, bytes: data) + let arr2: [Double] = try inS.read() + try test(arr2 == arr) + + let arrS = [arr, [], arr] + outS = Ice.OutputStream(communicator: communicator) + DoubleSSHelper.write(to: outS, value: arrS) + data = outS.finished() + inS = Ice.InputStream(communicator: communicator, bytes: data) + let arr2S = try DoubleSSHelper.read(from: inS) + try test(arr2S == arrS) + } + + do { + let arr: [String] = ["string1", "string2", "string3", "string4"] + outS = Ice.OutputStream(communicator: communicator) + outS.write(arr) + var data = outS.finished() + inS = Ice.InputStream(communicator: communicator, bytes: data) + let arr2: [String] = try inS.read() + try test(arr2 == arr) + let arrS = [arr, [], arr] + outS = Ice.OutputStream(communicator: communicator) + StringSSHelper.write(to: outS, value: arrS) + data = outS.finished() + inS = Ice.InputStream(communicator: communicator, bytes: data) + let arr2S = try StringSSHelper.read(from: inS) + try test(arr2S == arrS) + } + + do { + let arr: [MyEnum] = [MyEnum.enum3, MyEnum.enum2, MyEnum.enum1, MyEnum.enum2] + outS = Ice.OutputStream(communicator: communicator) + MyEnumSHelper.write(to: outS, value: arr) + var data = outS.finished() + inS = Ice.InputStream(communicator: communicator, bytes: data) + let arr2: [MyEnum] = try MyEnumSHelper.read(from: inS) + try test(arr2 == arr) + let arrS = [arr, [], arr] + outS = Ice.OutputStream(communicator: communicator) + MyEnumSSHelper.write(to: outS, value: arrS) + data = outS.finished() + inS = Ice.InputStream(communicator: communicator, bytes: data) + let arr2S = try MyEnumSSHelper.read(from: inS) + try test(arr2S == arrS) + } + + var smallStructArray = [SmallStruct]() + for i in 0 ..< 3 { + smallStructArray.append(SmallStruct()) + smallStructArray[i].bo = true + smallStructArray[i].by = 1 + smallStructArray[i].sh = 2 + smallStructArray[i].i = 3 + smallStructArray[i].l = 4 + smallStructArray[i].f = 5.0 + smallStructArray[i].d = 6.0 + smallStructArray[i].str = "7" + smallStructArray[i].e = MyEnum.enum2 + smallStructArray[i].p = uncheckedCast(prx: try communicator.stringToProxy("test:default")!, + type: MyInterfacePrx.self) + } + + var myClassArray = [MyClass]() + for i in 0 ..< 4 { + myClassArray.append(MyClass()) + myClassArray[i].c = myClassArray[i] + myClassArray[i].o = myClassArray[i] + myClassArray[i].s = SmallStruct() + myClassArray[i].s.e = MyEnum.enum2 + myClassArray[i].seq1 = [true, false, true, false] + myClassArray[i].seq2 = ByteSeq([1, 2, 3, 4]) + myClassArray[i].seq3 = [1, 2, 3, 4] + myClassArray[i].seq4 = [1, 2, 3, 4] + myClassArray[i].seq5 = [1, 2, 3, 4] + myClassArray[i].seq6 = [1, 2, 3, 4] + myClassArray[i].seq7 = [1, 2, 3, 4] + myClassArray[i].seq8 = ["string1", "string2", "string3", "string4"] + myClassArray[i].seq9 = [MyEnum.enum3, MyEnum.enum2, MyEnum.enum1] + myClassArray[i].seq10 = [nil, nil, nil, nil] + myClassArray[i].d = ["hi": myClassArray[i]] + } + + var myInterfaceArray = [Ice.Value]() + for _ in 0 ..< 4 { + myInterfaceArray.append(Ice.InterfaceByValue(id: "::Test::MyInterface")) + } + + do { + outS = Ice.OutputStream(communicator: communicator) + MyClassSHelper.write(to: outS, value: myClassArray) + outS.writePendingValues() + var data = outS.finished() + inS = Ice.InputStream(communicator: communicator, bytes: data) + let arr2: [MyClass?] = try MyClassSHelper.read(from: inS) + try inS.readPendingValues() + try test(myClassArray.count == arr2.count) + for i in 0 ..< myClassArray.count { + try test(arr2[i] != nil) + try test(arr2[i]!.c === arr2[i]) + try test(arr2[i]!.o === arr2[i]) + try test(arr2[i]!.s.e == MyEnum.enum2) + try test(arr2[i]!.seq1 == myClassArray[i].seq1) + try test(arr2[i]!.seq2 == myClassArray[i].seq2) + try test(arr2[i]!.seq3 == myClassArray[i].seq3) + try test(arr2[i]!.seq4 == myClassArray[i].seq4) + try test(arr2[i]!.seq5 == myClassArray[i].seq5) + try test(arr2[i]!.seq6 == myClassArray[i].seq6) + try test(arr2[i]!.seq7 == myClassArray[i].seq7) + try test(arr2[i]!.seq8 == myClassArray[i].seq8) + try test(arr2[i]!.seq9 == myClassArray[i].seq9) + try test(arr2[i]!.d["hi"]! === arr2[i]) + } + + let arrS = [myClassArray, [], myClassArray] + outS = Ice.OutputStream(communicator: communicator) + MyClassSSHelper.write(to: outS, value: arrS) + outS.writePendingValues() + data = outS.finished() + inS = Ice.InputStream(communicator: communicator, bytes: data) + let arr2S = try MyClassSSHelper.read(from: inS) + try test(arr2S.count == arrS.count) + try test(arr2S[0].count == arrS[0].count) + try test(arr2S[1].count == arrS[1].count) + try test(arr2S[2].count == arrS[2].count) + } + + do { + outS = Ice.OutputStream(communicator: communicator) + MyInterfaceSHelper.write(to: outS, value: myInterfaceArray) + outS.writePendingValues() + var data = outS.finished() + inS = Ice.InputStream(communicator: communicator, bytes: data) + let arr2 = try MyInterfaceSHelper.read(from: inS) + try inS.readPendingValues() + try test(arr2.count == myInterfaceArray.count) + + let arrS = [myInterfaceArray, [], myInterfaceArray] + outS = Ice.OutputStream(communicator: communicator) + MyInterfaceSSHelper.write(to: outS, value: arrS) + data = outS.finished() + inS = Ice.InputStream(communicator: communicator, bytes: data) + let arr2S = try MyInterfaceSSHelper.read(from: inS) + try test(arr2S.count == arrS.count) + try test(arr2S[0].count == arrS[0].count) + try test(arr2S[1].count == arrS[1].count) + try test(arr2S[2].count == arrS[2].count) + } + + do { + outS = Ice.OutputStream(communicator: communicator) + let ex = MyException() + let c = MyClass() + c.c = c + c.o = c + c.s.e = MyEnum.enum2 + c.seq1 = [true, false, true, false] + c.seq2 = ByteSeq([1, 2, 3, 4]) + c.seq3 = [1, 2, 3, 4] + c.seq4 = [1, 2, 3, 4] + c.seq5 = [1, 2, 3, 4] + c.seq6 = [1, 2, 3, 4] + c.seq7 = [1, 2, 3, 4] + c.seq8 = ["string1", "string2", "string3", "string4"] + c.seq9 = [MyEnum.enum3, MyEnum.enum2, MyEnum.enum1] + c.seq10 = [nil, nil, nil, nil] + c.d = ["hi": c] + + ex.c = c + + outS.write(ex) + let data = outS.finished() + inS = Ice.InputStream(communicator: communicator, bytes: data) + do { + try inS.throwException() + } catch let ex1 as MyException { + try test(ex1.c!.s.e == c.s.e) + try test(ex1.c!.seq1 == c.seq1) + try test(ex1.c!.seq2 == c.seq2) + try test(ex1.c!.seq3 == c.seq3) + try test(ex1.c!.seq4 == c.seq4) + try test(ex1.c!.seq5 == c.seq5) + try test(ex1.c!.seq6 == c.seq6) + try test(ex1.c!.seq7 == c.seq7) + try test(ex1.c!.seq8 == c.seq8) + try test(ex1.c!.seq9 == c.seq9) + } catch is Ice.UserException { + try test(false) + } + } + + do { + outS = Ice.OutputStream(communicator: communicator) + let dict: ByteBoolD = [4: true, 1: false] + ByteBoolDHelper.write(to: outS, value: dict) + let data = outS.finished() + inS = Ice.InputStream(communicator: communicator, bytes: data) + let dict2 = try ByteBoolDHelper.read(from: inS) + try test(dict == dict2) + } + + do { + outS = Ice.OutputStream(communicator: communicator) + let dict: ShortIntD = [1: 9, 4: 8] + ShortIntDHelper.write(to: outS, value: dict) + let data = outS.finished() + inS = Ice.InputStream(communicator: communicator, bytes: data) + let dict2 = try ShortIntDHelper.read(from: inS) + try test(dict == dict2) + } + + do { + let dict: LongFloatD = [123_809_828: 0.5, 123_809_829: 0.6] + outS = Ice.OutputStream(communicator: communicator) + LongFloatDHelper.write(to: outS, value: dict) + let data = outS.finished() + inS = Ice.InputStream(communicator: communicator, bytes: data) + let dict2 = try LongFloatDHelper.read(from: inS) + try test(dict == dict2) + } + + do { + let dict: StringStringD = ["key1": "value1", "key2": "value2"] + outS = Ice.OutputStream(communicator: communicator) + StringStringDHelper.write(to: outS, value: dict) + let data = outS.finished() + inS = Ice.InputStream(communicator: communicator, bytes: data) + let dict2 = try StringStringDHelper.read(from: inS) + try test(dict2 == dict) + } + + do { + var dict = StringMyClassD() + var c = MyClass() + c.s = SmallStruct() + c.s.e = MyEnum.enum2 + dict["key1"] = c + c = MyClass() + c.s = SmallStruct() + c.s.e = MyEnum.enum3 + dict["key2"] = c + outS = Ice.OutputStream(communicator: communicator) + StringMyClassDHelper.write(to: outS, value: dict) + outS.writePendingValues() + let data = outS.finished() + inS = Ice.InputStream(communicator: communicator, bytes: data) + let dict2: StringMyClassD = try StringMyClassDHelper.read(from: inS) + try inS.readPendingValues() + try test(dict2.count == dict.count) + try test(dict2["key1"]!!.s.e == MyEnum.enum2) + try test(dict2["key2"]!!.s.e == MyEnum.enum3) + } + writer.writeLine("ok") + } +} diff --git a/swift/test/Ice/stream/Test.ice b/swift/test/Ice/stream/Test.ice new file mode 100644 index 00000000000..58ec2b59e01 --- /dev/null +++ b/swift/test/Ice/stream/Test.ice @@ -0,0 +1,175 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#pragma once + +#include <Ice/BuiltinSequences.ice> + +// +// Suppress invalid metadata warnings +// +[["suppress-warning:invalid-metadata, deprecated"]] + +[["swift:class-resolver-prefix:IceStrem"]] +module Test +{ + +enum MyEnum +{ + enum1, + enum2, + enum3 +} + +interface MyInterface; +class MyClass; + +["cpp:comparable"] struct SmallStruct +{ + bool bo; + byte by; + short sh; + int i; + long l; + float f; + double d; + string str; + MyEnum e; + MyInterface* p; +} + +["cpp:class"] struct ClassStruct +{ + int i; +} + +class OptionalClass +{ + bool bo; + byte by; + optional(1) short sh; + optional(2) int i; +} + +sequence<MyEnum> MyEnumS; +sequence<SmallStruct> SmallStructS; +sequence<MyClass> MyClassS; +sequence<MyInterface> MyInterfaceS; + +sequence<Ice::BoolSeq> BoolSS; +sequence<Ice::ByteSeq> ByteSS; +sequence<Ice::ShortSeq> ShortSS; +sequence<Ice::IntSeq> IntSS; +sequence<Ice::LongSeq> LongSS; +sequence<Ice::FloatSeq> FloatSS; +sequence<Ice::DoubleSeq> DoubleSS; +sequence<Ice::StringSeq> StringSS; +sequence<MyEnumS> MyEnumSS; +sequence<SmallStructS> SmallStructSS; +sequence<MyClassS> MyClassSS; +sequence<MyInterfaceS> MyInterfaceSS; + +dictionary<byte, bool> ByteBoolD; +dictionary<short, int> ShortIntD; +dictionary<long, float> LongFloatD; +dictionary<string, string> StringStringD; +dictionary<string, MyClass> StringMyClassD; + +class MyClass +{ + MyClass c; + Object o; + SmallStruct s; + Ice::BoolSeq seq1; + Ice::ByteSeq seq2; + Ice::ShortSeq seq3; + Ice::IntSeq seq4; + Ice::LongSeq seq5; + Ice::FloatSeq seq6; + Ice::DoubleSeq seq7; + Ice::StringSeq seq8; + MyEnumS seq9; + MyClassS seq10; + StringMyClassD d; +} + +interface MyInterface +{ +} + +exception MyException +{ + MyClass c; +} + +module Sub +{ + enum NestedEnum + { + nestedEnum1, + nestedEnum2, + nestedEnum3 + } + + ["cpp:comparable"] struct NestedStruct + { + bool bo; + byte by; + short sh; + int i; + long l; + float f; + double d; + string str; + NestedEnum e; + } + + ["cpp:class"] struct NestedClassStruct + { + int i; + } + + exception NestedException + { + string str; + } +} +} + +["swift:module:Test:Test2"] +module Test2 +{ +module Sub2 +{ + enum NestedEnum2 + { + nestedEnum4, + nestedEnum5, + nestedEnum6 + } + + ["cpp:comparable"] struct NestedStruct2 + { + bool bo; + byte by; + short sh; + int i; + long l; + float f; + double d; + string str; + NestedEnum2 e; + } + + ["cpp:class"] struct NestedClassStruct2 + { + int i; + } + + exception NestedException2 + { + string str; + } +} +} diff --git a/swift/test/Ice/timeout/AllTests.swift b/swift/test/Ice/timeout/AllTests.swift new file mode 100644 index 00000000000..6087c84a4e2 --- /dev/null +++ b/swift/test/Ice/timeout/AllTests.swift @@ -0,0 +1,369 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Foundation +import Ice +import TestCommon + +func connect(_ prx: Ice.ObjectPrx) throws -> Ice.Connection { + for _ in 0 ..< 10 { + do { + _ = try prx.ice_getConnection() + break + } catch is Ice.ConnectTimeoutException { + // Can sporadically occur with slow machines + } + } + return try prx.ice_getConnection()! +} + +public func allTests(helper: TestHelper) throws { + func test(_ value: Bool, file: String = #file, line: Int = #line) throws { + try helper.test(value, file: file, line: line) + } + + let communicator = helper.communicator() + let sref = "timeout:\(helper.getTestEndpoint(num: 0))" + let obj = try communicator.stringToProxy(sref)! + + let timeout = try checkedCast(prx: obj, type: TimeoutPrx.self)! + + let controller = try checkedCast(prx: communicator.stringToProxy("controller:\(helper.getTestEndpoint(num: 1))")!, + type: ControllerPrx.self)! + + let output = helper.getWriter() + output.write("testing connect timeout... ") + do { + // + // Expect ConnectTimeoutException. + // + let to = timeout.ice_timeout(100) + try controller.holdAdapter(-1) + do { + try to.op() + try test(false) + } catch is Ice.ConnectTimeoutException { + // Expected. + } + try controller.resumeAdapter() + try timeout.op() // Ensure adapter is active. + } + + do { + // + // Expect success. + // + let to = timeout.ice_timeout(-1) + try controller.holdAdapter(100) + do { + try to.op() + } catch is Ice.ConnectTimeoutException { + try test(false) + } + } + output.writeLine("ok") + + // The sequence needs to be large enough to fill the write/recv buffers + let seq = ByteSeq(repeating: 0, count: 2_000_000) + + output.write("testing connection timeout... ") + do { + // + // Expect TimeoutException. + // + let to = timeout.ice_timeout(250) + _ = try connect(to) + try controller.holdAdapter(-1) + do { + try to.sendData(seq) + try test(false) + } catch is Ice.TimeoutException { + // Expected. + } + try controller.resumeAdapter() + try timeout.op() // Ensure adapter is active. + } + + do { + // + // Expect success. + // + let to = timeout.ice_timeout(2000) + try controller.holdAdapter(100) + do { + try to.sendData(ByteSeq(repeating: 0, count: 1_000_000)) + } catch is Ice.TimeoutException { + try test(false) + } + } + output.writeLine("ok") + + output.write("testing invocation timeout... ") + do { + let connection = try obj.ice_getConnection() + var to = timeout.ice_invocationTimeout(100) + try test(connection === to.ice_getConnection()) + do { + try to.sleep(500) + try test(false) + } catch is Ice.InvocationTimeoutException {} + try obj.ice_ping() + to = timeout.ice_invocationTimeout(1000) + try test(connection === to.ice_getConnection()) + do { + try to.sleep(100) + } catch is Ice.InvocationTimeoutException { + try test(false) + } + try test(connection === to.ice_getConnection()) + } + + do { + // + // Expect InvocationTimeoutException. + // + let to = timeout.ice_invocationTimeout(100) + do { + try to.sleepAsync(500).wait() + try test(false) + } catch is Ice.InvocationTimeoutException {} + try timeout.ice_ping() + } + + do { + // + // Expect success. + // + let to = timeout.ice_invocationTimeout(1000) + do { + try to.sleepAsync(100).wait() + } catch { + try test(false) + } + } + + do { + // + // Backward compatible connection timeouts + // + let to = timeout.ice_invocationTimeout(-2).ice_timeout(250) + var con = try connect(to) + do { + try to.sleep(750) + try test(false) + } catch is Ice.TimeoutException { + do { + _ = try con.getInfo() + try test(false) + } catch is Ice.TimeoutException { + // Connection got closed as well. + } + } + try timeout.ice_ping() + + do { + con = try connect(to) + try to.sleepAsync(750).wait() + try test(false) + } catch is Ice.TimeoutException { + do { + _ = try con.getInfo() + try test(false) + } catch is Ice.TimeoutException { + // Connection got closed as well. + } + } + try obj.ice_ping() + } + output.writeLine("ok") + + output.write("testing close timeout... ") + do { + let to = timeout.ice_timeout(250) + let connection = try connect(to) + try controller.holdAdapter(-1) + try connection.close(.GracefullyWithWait) + do { + _ = try connection.getInfo() // getInfo() doesn't throw in the closing state. + } catch is Ice.LocalException { + try test(false) + } + + while true { + do { + _ = try connection.getInfo() + Thread.sleep(forTimeInterval: 0.01) + } catch let ex as Ice.ConnectionManuallyClosedException { + // Expected. + try test(ex.graceful) + break + } + } + try controller.resumeAdapter() + try timeout.op() // Ensure adapter is active. + } + output.writeLine("ok") + + output.write("testing timeout overrides... ") + do { + // + // Test Ice.Override.Timeout. This property overrides all + // endpoint timeouts. + // + let properties = communicator.getProperties().clone() + properties.setProperty(key: "Ice.Override.ConnectTimeout", value: "250") + properties.setProperty(key: "Ice.Override.Timeout", value: "100") + var initData = Ice.InitializationData() + initData.properties = properties + let comm = try helper.initialize(initData) + var to = try uncheckedCast(prx: comm.stringToProxy(sref)!, type: TimeoutPrx.self) + _ = try connect(to) + try controller.holdAdapter(-1) + do { + try to.sendData(seq) + try test(false) + } catch is Ice.TimeoutException { + // Expected. + } + try controller.resumeAdapter() + try timeout.op() // Ensure adapter is active. + + // + // Calling ice_timeout() should have no effect. + // + to = to.ice_timeout(1000) + _ = try connect(to) + try controller.holdAdapter(-1) + do { + try to.sendData(seq) + try test(false) + } catch is Ice.TimeoutException { + // Expected. + } + try controller.resumeAdapter() + try timeout.op() // Ensure adapter is active. + comm.destroy() + } + + do { + // + // Test Ice.Override.ConnectTimeout. + // + let properties = communicator.getProperties().clone() + properties.setProperty(key: "Ice.Override.ConnectTimeout", value: "250") + var initData = Ice.InitializationData() + initData.properties = properties + let comm = try helper.initialize(initData) + try controller.holdAdapter(-1) + var to = try uncheckedCast(prx: comm.stringToProxy(sref)!, type: TimeoutPrx.self) + do { + try to.op() + try test(false) + } catch is Ice.ConnectTimeoutException { + // Expected. + } + try controller.resumeAdapter() + try timeout.op() // Ensure adapter is active. + + // + // Calling ice_timeout() should have no effect on the connect timeout. + // + try controller.holdAdapter(-1) + to = to.ice_timeout(1000) + do { + try to.op() + try test(false) + } catch is Ice.ConnectTimeoutException { + // Expected. + } + try controller.resumeAdapter() + try timeout.op() // Ensure adapter is active. + + // + // Verify that timeout set via ice_timeout() is still used for requests. + // + to = to.ice_timeout(250) + _ = try connect(to) + try controller.holdAdapter(-1) + do { + try to.sendData(seq) + try test(false) + } catch is Ice.TimeoutException { + // Expected. + } + try controller.resumeAdapter() + try timeout.op() // Ensure adapter is active. + comm.destroy() + } + + do { + // + // Test Ice.Override.CloseTimeout. + // + let properties = communicator.getProperties().clone() + properties.setProperty(key: "Ice.Override.CloseTimeout", value: "100") + var initData = Ice.InitializationData() + initData.properties = properties + let comm = try helper.initialize(initData) + _ = try comm.stringToProxy(sref)!.ice_getConnection() + try controller.holdAdapter(-1) + let begin = DispatchTime.now() + comm.destroy() + let elapsed = DispatchTime.now().uptimeNanoseconds - begin.uptimeNanoseconds + try test((elapsed / 1_000_000) < 1000) + try controller.resumeAdapter() + } + output.writeLine("ok") + + output.write("testing invocation timeouts with collocated calls... ") + do { + communicator.getProperties().setProperty(key: "TimeoutCollocated.AdapterId", value: "timeoutAdapter") + + let adapter = try communicator.createObjectAdapter("TimeoutCollocated") + try adapter.activate() + + let proxy = try uncheckedCast(prx: adapter.addWithUUID(TimeoutDisp(TimeoutI())), + type: TimeoutPrx.self).ice_invocationTimeout(100) + do { + try proxy.sleep(500) + try test(false) + } catch is Ice.InvocationTimeoutException {} + + do { + try proxy.sleepAsync(500).wait() + try test(false) + } catch is Ice.InvocationTimeoutException {} + + do { + try proxy.ice_invocationTimeout(-2).ice_ping() + try proxy.ice_invocationTimeout(-2).ice_pingAsync().wait() + } catch is Ice.Exception { + try test(false) + } + + let batchTimeout = proxy.ice_batchOneway() + try batchTimeout.ice_ping() + try batchTimeout.ice_ping() + try batchTimeout.ice_ping() + + _ = proxy.ice_invocationTimeout(-1).sleepAsync(300) // Keep the server thread pool busy. + do { + try batchTimeout.ice_flushBatchRequests() + try test(false) + } catch is Ice.InvocationTimeoutException {} + + try batchTimeout.ice_ping() + try batchTimeout.ice_ping() + try batchTimeout.ice_ping() + + _ = proxy.ice_invocationTimeout(-1).sleepAsync(300) // Keep the server thread pool busy. + do { + try batchTimeout.ice_flushBatchRequestsAsync().wait() + try test(false) + } catch is Ice.InvocationTimeoutException {} + adapter.destroy() + } + output.writeLine("ok") + try controller.shutdown() +} diff --git a/swift/test/Ice/timeout/Client.swift b/swift/test/Ice/timeout/Client.swift new file mode 100644 index 00000000000..94a5ffc4a64 --- /dev/null +++ b/swift/test/Ice/timeout/Client.swift @@ -0,0 +1,18 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import TestCommon + +class Client: TestHelperI { + public override func run(args: [String]) throws { + do { + let communicator = try initialize(args) + defer { + communicator.destroy() + } + try allTests(helper: self) + } + } +} diff --git a/swift/test/Ice/timeout/Server.swift b/swift/test/Ice/timeout/Server.swift new file mode 100644 index 00000000000..635e38fe456 --- /dev/null +++ b/swift/test/Ice/timeout/Server.swift @@ -0,0 +1,50 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import TestCommon + +class Server: TestHelperI { + public override func run(args: [String]) throws { + let writer = getWriter() + + let properties = try Ice.createProperties(args) + + // + // This test kills connections, so we don't want warnings. + // + properties.setProperty(key: "Ice.Warn.Connections", value: "0") + + // + // The client sends large messages to cause the transport + // buffers to fill up. + // + properties.setProperty(key: "Ice.MessageSizeMax", value: "20000") + + // + // Limit the recv buffer size, this test relies on the socket + // send() blocking after sending a given amount of data. + // + properties.setProperty(key: "Ice.TCP.RcvSize", value: "50000") + + let communicator = try initialize(properties) + defer { + communicator.destroy() + } + communicator.getProperties().setProperty(key: "TestAdapter.Endpoints", value: getTestEndpoint(num: 0)) + communicator.getProperties().setProperty(key: "ControllerAdapter.Endpoints", value: getTestEndpoint(num: 1)) + communicator.getProperties().setProperty(key: "ControllerAdapter.ThreadPool.Size", value: "1") + + let adapter = try communicator.createObjectAdapter("TestAdapter") + try adapter.add(servant: TimeoutDisp(TimeoutI()), id: Ice.stringToIdentity("timeout")) + try adapter.activate() + + let controllerAdapter = try communicator.createObjectAdapter("ControllerAdapter") + try controllerAdapter.add(servant: ControllerDisp(ControllerI(adapter)), id: Ice.stringToIdentity("controller")) + try controllerAdapter.activate() + + serverReady() + communicator.waitForShutdown() + } +} diff --git a/swift/test/Ice/timeout/Test.ice b/swift/test/Ice/timeout/Test.ice new file mode 100644 index 00000000000..1e007e5ec91 --- /dev/null +++ b/swift/test/Ice/timeout/Test.ice @@ -0,0 +1,26 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#pragma once + +module Test +{ + +sequence<byte> ByteSeq; + +interface Timeout +{ + void op(); + void sendData(ByteSeq seq); + void sleep(int to); +} + +interface Controller +{ + void holdAdapter(int to); + void resumeAdapter(); + void shutdown(); +} + +} diff --git a/swift/test/Ice/timeout/TestI.swift b/swift/test/Ice/timeout/TestI.swift new file mode 100644 index 00000000000..bd98e8296ee --- /dev/null +++ b/swift/test/Ice/timeout/TestI.swift @@ -0,0 +1,48 @@ +// +import Foundation +// Copyright (c) ZeroC, Inc. All rights reserved. +// +import Ice + +class TimeoutI: Timeout { + func op(current _: Current) throws {} + + func sendData(seq _: ByteSeq, current _: Current) throws {} + + func sleep(to: Int32, current _: Current) throws { + Thread.sleep(forTimeInterval: TimeInterval(to) / 1000) + } +} + +class ControllerI: Controller { + var _adapter: Ice.ObjectAdapter + + init(_ adapter: Ice.ObjectAdapter) { + _adapter = adapter + } + + func holdAdapter(to: Int32, current: Ice.Current) throws { + _adapter.hold() + if to >= 0 { + let queue = try current.adapter!.getDispatchQueue() + queue.async { + self._adapter.waitForHold() + queue.asyncAfter(deadline: .now() + .milliseconds(Int(to))) { + do { + try self._adapter.activate() + } catch { + precondition(false) + } + } + } + } + } + + func resumeAdapter(current _: Ice.Current) throws { + try _adapter.activate() + } + + func shutdown(current: Ice.Current) { + current.adapter!.getCommunicator().shutdown() + } +} diff --git a/swift/test/Ice/udp/AllTests.swift b/swift/test/Ice/udp/AllTests.swift new file mode 100644 index 00000000000..425a44beb32 --- /dev/null +++ b/swift/test/Ice/udp/AllTests.swift @@ -0,0 +1,201 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Dispatch +import Foundation +import Ice +import TestCommon + +class PingReplyI: PingReply { + var _replies: Int32 = 0 + var _lock = os_unfair_lock() + var _semaphore = DispatchSemaphore(value: 0) + + func reset() { + withLock(&_lock) { + _replies = 0 + } + } + + func reply(current _: Current) throws { + withLock(&_lock) { + _replies += 1 + _semaphore.signal() + } + } + + func waitReply(expectedReplies: Int, timeout: Int) -> Bool { + let end = DispatchTime.now() + .milliseconds(timeout) + while _replies < expectedReplies { + let begin = DispatchTime.now() + let delay = end.uptimeNanoseconds - begin.uptimeNanoseconds + if delay > 0 { + if _semaphore.wait(timeout: end) == .timedOut { + break + } + } else { + break + } + } + return _replies == expectedReplies + } +} + +public func allTests(_ helper: TestHelper) throws { + func test(_ value: Bool, file: String = #file, line: Int = #line) throws { + try helper.test(value, file: file, line: line) + } + + let communicator = helper.communicator() + communicator.getProperties().setProperty(key: "ReplyAdapter.Endpoints", value: "udp") + let adapter = try communicator.createObjectAdapter("ReplyAdapter") + var replyI = PingReplyI() + var reply = try uncheckedCast(prx: adapter.addWithUUID(PingReplyDisp(replyI)), + type: PingReplyPrx.self).ice_datagram() + try adapter.activate() + + let output = helper.getWriter() + + output.write("testing udp... ") + var base = try communicator.stringToProxy("test:\(helper.getTestEndpoint(num: 0, prot: "udp"))")!.ice_datagram() + let obj = uncheckedCast(prx: base, type: TestIntfPrx.self) + + var ret = false + for _ in 0 ..< 5 { + replyI.reset() + try obj.ping(reply) + try obj.ping(reply) + try obj.ping(reply) + ret = replyI.waitReply(expectedReplies: 3, timeout: 2000) + if ret { + break // Success + } + + // If the 3 datagrams were not received within the 2 seconds, we try again to + // receive 3 new datagrams using a new object. We give up after 5 retries. + replyI = PingReplyI() + reply = try uncheckedCast(prx: adapter.addWithUUID(PingReplyDisp(replyI)), + type: PingReplyPrx.self).ice_datagram() + } + try test(ret) + + if communicator.getProperties().getPropertyAsInt("Ice.Override.Compress") == 0 { + // + // Only run this test if compression is disabled, the test expect fixed message size + // to be sent over the wire. + // + var seq: ByteSeq + do { + seq = ByteSeq(repeating: 0, count: 1024) + while true { + seq = ByteSeq(repeating: 0, count: seq.count * 2 + 10) + replyI.reset() + try obj.sendByteSeq(seq: seq, reply: reply) + _ = replyI.waitReply(expectedReplies: 1, timeout: 10000) + } + } catch is Ice.DatagramLimitException { + // + // The server's Ice.UDP.RcvSize property is set to 16384, which means that DatagramLimitException + // will be throw when try to send a packet bigger than that. + // + try test(seq.count > 16384) + } + try obj.ice_getConnection()!.close(.GracefullyWithWait) + communicator.getProperties().setProperty(key: "Ice.UDP.SndSize", value: "64000") + seq = ByteSeq(repeating: 0, count: 50000) + do { + replyI.reset() + try obj.sendByteSeq(seq: seq, reply: reply) + let b = replyI.waitReply(expectedReplies: 1, timeout: 500) + // + // The server's Ice.UDP.RcvSize property is set to 16384, which means this packet + // should not be delivered. + // + try test(!b) + } catch is Ice.DatagramLimitException {} + } + output.writeLine("ok") + + output.write("testing udp multicast... ") + var endpoint = "" + // + // Use loopback to prevent other machines to answer. + // + if communicator.getProperties().getProperty("Ice.IPv6") == "1" { + endpoint += "udp -h \"ff15::1:1\" --interface \"::1\"" + } else { + endpoint += "udp -h 239.255.1.1 --interface 127.0.0.1" + } + endpoint += " -p " + endpoint += "\(helper.getTestPort(num: 10))" + base = try communicator.stringToProxy("test -d:\(endpoint)")! + let objMcast = uncheckedCast(prx: base, type: TestIntfPrx.self) + + for _ in 0 ..< 5 { + replyI.reset() + try objMcast.ping(reply) + ret = replyI.waitReply(expectedReplies: 5, timeout: 5000) + if ret { + break + } + replyI = PingReplyI() + reply = try uncheckedCast(prx: adapter.addWithUUID(PingReplyDisp(replyI)).ice_datagram(), + type: PingReplyPrx.self) + } + + if ret { + output.writeLine("ok") + } else { + output.writeLine("failed(is a firewall enabled?)") + } + + output.write("testing udp bi-dir connection... ") + try obj.ice_getConnection()!.setAdapter(adapter) + try objMcast.ice_getConnection()!.setAdapter(adapter) + for _ in 0 ..< 5 { + replyI.reset() + try obj.pingBiDir(reply.ice_getIdentity()) + try obj.pingBiDir(reply.ice_getIdentity()) + try obj.pingBiDir(reply.ice_getIdentity()) + ret = replyI.waitReply(expectedReplies: 3, timeout: 2000) + if ret { + break // Success + } + replyI = PingReplyI() + reply = try uncheckedCast(prx: adapter.addWithUUID(PingReplyDisp(replyI)), + type: PingReplyPrx.self).ice_datagram() + } + try test(ret) + output.writeLine("ok") + + // + // Sending the replies back on the multicast UDP connection doesn't work for most + // platform(it works for macOS Leopard but not Snow Leopard, doesn't work on SLES, + // Windows...). For Windows, see UdpTransceiver constructor for the details. So + // we don't run this test. + // + // Console.Out.Write("testing udp bi-dir connection... "); + // nRetry = 5; + // while(nRetry-- > 0) + // { + // replyI.reset(); + // objMcast.pingBiDir(reply.ice_getIdentity()); + // ret = replyI.waitReply(5, 2000); + // if(ret) + // { + // break; // Success + // } + // replyI = new PingReplyI(); + // reply =(PingReplyPrx)PingReplyPrxHelper.uncheckedCast(adapter.addWithUUID(replyI)).ice_datagram(); + // } + + // if(!ret) + // { + // Console.Out.WriteLine("failed(is a firewall enabled?)"); + // } + // else + // { + // Console.Out.WriteLine("ok"); + // } +} diff --git a/swift/test/Ice/udp/Client.swift b/swift/test/Ice/udp/Client.swift new file mode 100644 index 00000000000..d39b3f0767c --- /dev/null +++ b/swift/test/Ice/udp/Client.swift @@ -0,0 +1,29 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import TestCommon + +class Client: TestHelperI { + public override func run(args: [String]) throws { + do { + var restArgs = args + let properties = try createTestProperties(&restArgs) + properties.setProperty(key: "Ice.Warn.Connections", value: "0") + properties.setProperty(key: "Ice.UDP.SndSize", value: "16384") + + let communicator = try initialize(properties) + defer { + communicator.destroy() + } + try allTests(self) + + let num = restArgs.count == 1 ? Int(restArgs[0]) : 1 + for i in 0 ..< (num ?? 1) { + let prx = try communicator.stringToProxy("control:\(getTestEndpoint(num: Int32(i), prot: "tcp"))")! + try uncheckedCast(prx: prx, type: TestIntfPrx.self).shutdown() + } + } + } +} diff --git a/swift/test/Ice/udp/Server.swift b/swift/test/Ice/udp/Server.swift new file mode 100644 index 00000000000..343b5c68e19 --- /dev/null +++ b/swift/test/Ice/udp/Server.swift @@ -0,0 +1,54 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import TestCommon + +class Server: TestHelperI { + public override func run(args: [String]) throws { + let writer = getWriter() + + var restArgs = args + let properties = try createTestProperties(&restArgs) + properties.setProperty(key: "Ice.Warn.Connections", value: "0") + properties.setProperty(key: "Ice.UDP.RcvSize", value: "16384") + + let communicator = try initialize(properties) + defer { + communicator.destroy() + } + let num = restArgs.count == 1 ? Int32(restArgs[0]) : 1 + print("restArgs[0]: \(restArgs[0]) num: \(num ?? 0)") + communicator.getProperties().setProperty(key: "ControlAdapter.Endpoints", + value: getTestEndpoint(num: num ?? 0, prot: "tcp")) + let adapter = try communicator.createObjectAdapter("ControlAdapter") + try adapter.add(servant: TestIntfDisp(TestIntfI()), id: Ice.stringToIdentity("control")) + try adapter.activate() + serverReady() + if num == 0 { + communicator.getProperties().setProperty(key: "TestAdapter.Endpoints", + value: getTestEndpoint(num: 0, prot: "udp")) + let adapter2 = try communicator.createObjectAdapter("TestAdapter") + try adapter2.add(servant: TestIntfDisp(TestIntfI()), id: Ice.stringToIdentity("test")) + try adapter2.activate() + } + + var endpoint: String = "" + // + // Use loopback to prevent other machines to answer. + // + if properties.getProperty("Ice.IPv6") == "1" { + endpoint += "udp -h \"ff15::1:1\" --interface \"::1\"" + } else { + endpoint += "udp -h 239.255.1.1 --interface 127.0.0.1" + } + endpoint += " -p " + endpoint += "\(getTestPort(properties: properties, num: 10))" + communicator.getProperties().setProperty(key: "McastTestAdapter.Endpoints", value: endpoint) + let mcastAdapter = try communicator.createObjectAdapter("McastTestAdapter") + try mcastAdapter.add(servant: TestIntfDisp(TestIntfI()), id: Ice.stringToIdentity("test")) + try mcastAdapter.activate() + communicator.waitForShutdown() + } +} diff --git a/swift/test/Ice/udp/Test.ice b/swift/test/Ice/udp/Test.ice new file mode 100644 index 00000000000..c93e9f40e47 --- /dev/null +++ b/swift/test/Ice/udp/Test.ice @@ -0,0 +1,27 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#pragma once + +#include <Ice/Identity.ice> + +module Test +{ + +interface PingReply +{ + void reply(); +} + +sequence<byte> ByteSeq; + +interface TestIntf +{ + void ping(PingReply* reply); + void sendByteSeq(ByteSeq seq, PingReply* reply); + void pingBiDir(Ice::Identity reply); + void shutdown(); +} + +} diff --git a/swift/test/Ice/udp/TestI.swift b/swift/test/Ice/udp/TestI.swift new file mode 100644 index 00000000000..e19020a1d35 --- /dev/null +++ b/swift/test/Ice/udp/TestI.swift @@ -0,0 +1,47 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice + +class TestIntfI: TestIntf { + func ping(reply: PingReplyPrx?, current _: Current) throws { + do { + try reply!.reply() + } catch { + precondition(false) + } + } + + func sendByteSeq(seq _: ByteSeq, reply: PingReplyPrx?, current _: Current) throws { + do { + try reply!.reply() + } catch { + precondition(false) + } + } + + func pingBiDir(reply: Identity, current: Current) throws { + do { + // + // Ensure sending too much data doesn't cause the UDP connection + // to be closed. + // + do { + let seq = Ice.ByteSeq(repeating: 0, count: 32 * 1024) + let prx = try uncheckedCast(prx: current.con!.createProxy(reply), type: TestIntfPrx.self) + try prx.sendByteSeq(seq: seq, reply: nil) + } catch is Ice.DatagramLimitException { + // Expected. + } + try uncheckedCast(prx: current.con!.createProxy(reply), + type: PingReplyPrx.self).reply() + } catch { + precondition(false) + } + } + + func shutdown(current: Current) throws { + current.adapter!.getCommunicator().shutdown() + } +} diff --git a/swift/test/IceSSL/configuration/AllTests.swift b/swift/test/IceSSL/configuration/AllTests.swift new file mode 100644 index 00000000000..118e0a66182 --- /dev/null +++ b/swift/test/IceSSL/configuration/AllTests.swift @@ -0,0 +1,1412 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Foundation +import Ice +import TestCommon + +var keychainN = 0 + +func createClientProps(_ defaultProperties: Ice.Properties) -> Ice.Properties { + let properties = Ice.createProperties() + properties.setProperty(key: "Ice.Plugin.IceSSL", + value: "1") + + properties.setProperty(key: "IceSSL.DefaultDir", + value: defaultProperties.getProperty("IceSSL.DefaultDir")) + + properties.setProperty(key: "Ice.Default.Host", + value: defaultProperties.getProperty("Ice.Default.Host")) + + if defaultProperties.getProperty("Ice.IPv6") != "" { + properties.setProperty(key: "Ice.IPv6", + value: defaultProperties.getProperty("Ice.IPv6")) + } + properties.setProperty(key: "Ice.RetryIntervals", value: "-1") + // properties.setProperty("IceSSL.Trace.Security", "1") + + keychainN += 1 + properties.setProperty(key: "IceSSL.Keychain", value: "client\(keychainN).keychain") + properties.setProperty(key: "IceSSL.KeychainPassword", value: "password") + + return properties +} + +func createServerProps(_ defaultProperties: Ice.Properties) -> [String: String] { + var result = ["Ice.Plugin.IceSSL": "1", + "IceSSL.DefaultDir": defaultProperties.getProperty("IceSSL.DefaultDir"), + "Ice.Default.Host": defaultProperties.getProperty("Ice.Default.Host")] + + if defaultProperties.getProperty("Ice.IPv6") != "" { + result["Ice.IPv6"] = defaultProperties.getProperty("Ice.IPv6") + } + // result["IceSSL.Trace.Security"] = "1"; + + keychainN += 1 + result["IceSSL.Keychain"] = "client\(keychainN).keychain" + result["IceSSL.KeychainPassword"] = "password" + return result +} + +func createServerProps(defaultProperties: Ice.Properties, cert: String, ca: String) -> [String: String] { + var d = createServerProps(defaultProperties) + if cert != "" { + d["IceSSL.CertFile"] = "\(cert).p12" + } + + if ca != "" { + d["IceSSL.CAs"] = ca + ".pem" + } + d["IceSSL.Password"] = "password" + return d +} + +func createClientProps(defaultProperties: Ice.Properties, cert: String, ca: String) -> Ice.Properties { + let properties = createClientProps(defaultProperties) + if cert != "" { + properties.setProperty(key: "IceSSL.CertFile", value: "\(cert).p12") + } + if ca != "" { + properties.setProperty(key: "IceSSL.CAs", value: "\(ca).pem") + } + properties.setProperty(key: "IceSSL.Password", value: "password") + return properties +} + +public func allTests(_ helper: TestHelper, _ defaultDir: String) throws -> SSLServerFactoryPrx { + func test(_ value: Bool, file: String = #file, line: Int = #line) throws { + try helper.test(value, file: file, line: line) + } + + let communicator = helper.communicator() + let output = helper.getWriter() + let factoryRef = "factory:\(helper.getTestEndpoint(num: 0, prot: "tcp"))" + let b = try communicator.stringToProxy(factoryRef)! + let factory = try checkedCast(prx: b, type: SSLServerFactoryPrx.self)! + + let defaultHost = communicator.getProperties().getProperty("Ice.Default.Host") + let defaultProperties = communicator.getProperties() + defaultProperties.setProperty(key: "IceSSL.DefaultDir", value: defaultDir) + defaultProperties.setProperty(key: "Ice.Default.Host", value: defaultHost) + + output.write("testing manual initialization... ") + do { + let properties = createClientProps(defaultProperties) + properties.setProperty(key: "Ice.InitPlugins", value: "0") + let comm = try helper.initialize(properties) + let p = try comm.stringToProxy("dummy:ssl -p 9999")! + do { + try p.ice_ping() + try test(false) + } catch is PluginInitializationException { + // Expected. + } + comm.destroy() + } + output.writeLine("ok") + + output.write("testing certificate verification... ") + do { + // + // Test IceSSL.VerifyPeer=0. Client does not have a certificate, + // and doesn't trust the server certificate. + // + let properties = createClientProps(defaultProperties: defaultProperties, cert: "", ca: "") + properties.setProperty(key: "IceSSL.VerifyPeer", value: "0") + let comm = try helper.initialize(properties) + let fact = try checkedCast(prx: comm.stringToProxy(factoryRef)!, type: SSLServerFactoryPrx.self)! + + var d = createServerProps(defaultProperties: defaultProperties, cert: "s_rsa_ca1", ca: "") + d["IceSSL.VerifyPeer"] = "0" + let server = try fact.createServer(d)! + + try server.noCert() + try test(!(server.ice_getConnection()!.getInfo() as! SSLConnectionInfo).verified) + try fact.destroyServer(server) + comm.destroy() + } + + do { + // + // Test IceSSL.VerifyPeer=0. Client does not have a certificate, + // but it still verifies the server's. + // + var properties = createClientProps(defaultProperties: defaultProperties, cert: "", ca: "cacert1") + var comm = try helper.initialize(properties) + var fact = try checkedCast(prx: comm.stringToProxy(factoryRef)!, type: SSLServerFactoryPrx.self)! + + var d = createServerProps(defaultProperties: defaultProperties, cert: "s_rsa_ca1", ca: "") + d["IceSSL.VerifyPeer"] = "0" + var server = try fact.createServer(d)! + do { + try server.noCert() + try test((server.ice_getConnection()!.getInfo() as! SSLConnectionInfo).verified) + } + try fact.destroyServer(server) + // + // Test IceSSL.VerifyPeer=1. Client does not have a certificate. + // + d = createServerProps(defaultProperties: defaultProperties, cert: "s_rsa_ca1", ca: "") + d["IceSSL.VerifyPeer"] = "1" + server = try fact.createServer(d)! + try server.noCert() + try fact.destroyServer(server) + + // + // Test IceSSL.VerifyPeer=2. This should fail because the client + // does not supply a certificate. + // + d = createServerProps(defaultProperties: defaultProperties, cert: "s_rsa_ca1", ca: "") + d["IceSSL.VerifyPeer"] = "2" + server = try fact.createServer(d)! + do { + try server.ice_ping() + try test(false) + } catch is ProtocolException { + // Expected, if reported as an SSL alert by the server. + } catch is ConnectionLostException { + // Expected. + } + try fact.destroyServer(server) + + comm.destroy() + + // + // Test IceSSL.VerifyPeer=1. This should fail because the client doesn't + // trust the server's CA. + // + properties = createClientProps(defaultProperties: defaultProperties, cert: "", ca: "") + properties.setProperty(key: "IceSSL.VerifyPeer", value: "1") + comm = try helper.initialize(properties) + fact = try checkedCast(prx: comm.stringToProxy(factoryRef)!, type: SSLServerFactoryPrx.self)! + d = createServerProps(defaultProperties: defaultProperties, cert: "s_rsa_ca1", ca: "cacert1") + d["IceSSL.VerifyPeer"] = "0" + server = try fact.createServer(d)! + do { + try server.ice_ping() + try test(false) + } catch is SecurityException { + // Expected. + } + try fact.destroyServer(server) + comm.destroy() + + // + // Test IceSSL.VerifyPeer=1. This should fail because the server doesn't + // trust the client's CA. + // + properties = createClientProps(defaultProperties: defaultProperties, cert: "c_rsa_ca2", ca: "") + properties.setProperty(key: "IceSSL.VerifyPeer", value: "0") + comm = try helper.initialize(properties) + fact = try checkedCast(prx: comm.stringToProxy(factoryRef)!, type: SSLServerFactoryPrx.self)! + d = createServerProps(defaultProperties: defaultProperties, cert: "s_rsa_ca1", ca: "") + d["IceSSL.VerifyPeer"] = "1" + server = try fact.createServer(d)! + do { + try server.ice_ping() + try test(false) + } catch is ConnectionLostException { + // Expected. + } + try fact.destroyServer(server) + comm.destroy() + + // + // This should succeed because the self signed certificate used by the server is + // trusted. + // + properties = createClientProps(defaultProperties: defaultProperties, cert: "", ca: "cacert2") + comm = try helper.initialize(properties) + fact = try checkedCast(prx: comm.stringToProxy(factoryRef)!, type: SSLServerFactoryPrx.self)! + d = createServerProps(defaultProperties: defaultProperties, cert: "cacert2", ca: "") + d["IceSSL.VerifyPeer"] = "0" + server = try fact.createServer(d)! + try server.ice_ping() + try fact.destroyServer(server) + comm.destroy() + + // + // This should fail because the self signed certificate used by the server is not + // trusted. + // + properties = createClientProps(defaultProperties: defaultProperties, cert: "", ca: "") + comm = try helper.initialize(properties) + fact = try checkedCast(prx: comm.stringToProxy(factoryRef)!, type: SSLServerFactoryPrx.self)! + d = createServerProps(defaultProperties: defaultProperties, cert: "cacert2", ca: "") + d["IceSSL.VerifyPeer"] = "0" + server = try fact.createServer(d)! + do { + try server.ice_ping() + try test(false) + } catch is SecurityException { + // Expected. + } + try fact.destroyServer(server) + comm.destroy() + + // + // Verify that IceSSL.CheckCertName has no effect in a server. + // + properties = createClientProps(defaultProperties: defaultProperties, cert: "c_rsa_ca1", ca: "cacert1") + comm = try helper.initialize(properties) + fact = try checkedCast(prx: comm.stringToProxy(factoryRef)!, type: SSLServerFactoryPrx.self)! + d = createServerProps(defaultProperties: defaultProperties, cert: "s_rsa_ca1", ca: "cacert1") + d["IceSSL.CheckCertName"] = "1" + server = try fact.createServer(d)! + try server.ice_ping() + try fact.destroyServer(server) + comm.destroy() + + // + // Test Hostname verification only when Ice.DefaultHost is 127.0.0.1 + // as that is the IP address used in the test certificates. + // + if defaultHost == "127.0.0.1" { + // + // Test using localhost as target host + // + let props = defaultProperties.clone() + props.setProperty(key: "Ice.Default.Host", value: "localhost") + + // + // Target host matches the certificate DNS altName + // + properties = createClientProps(defaultProperties: defaultProperties, cert: "c_rsa_ca1", ca: "cacert1") + properties.setProperty(key: "IceSSL.CheckCertName", value: "1") + comm = try helper.initialize(properties) + + fact = try checkedCast(prx: comm.stringToProxy(factoryRef)!, type: SSLServerFactoryPrx.self)! + d = createServerProps(defaultProperties: props, cert: "s_rsa_ca1_cn1", ca: "cacert1") + server = try fact.createServer(d)! + try server.ice_ping() + try fact.destroyServer(server) + comm.destroy() + + // + // Target host does not match the certificate DNS altName + // + properties = createClientProps(defaultProperties: defaultProperties, cert: "c_rsa_ca1", ca: "cacert1") + properties.setProperty(key: "IceSSL.CheckCertName", value: "1") + comm = try helper.initialize(properties) + + fact = try checkedCast(prx: comm.stringToProxy(factoryRef)!, type: SSLServerFactoryPrx.self)! + d = createServerProps(defaultProperties: props, cert: "s_rsa_ca1_cn2", ca: "cacert1") + d["IceSSL.CheckCertName"] = "1" + server = try fact.createServer(d)! + do { + try server.ice_ping() + try test(false) + } catch is Ice.SecurityException { + // Expected + } + try fact.destroyServer(server) + comm.destroy() + + // + // Target host matches the certificate Common Name and the certificate does not + // include a DNS altName + // + properties = createClientProps(defaultProperties: defaultProperties, cert: "c_rsa_ca1", ca: "cacert1") + properties.setProperty(key: "IceSSL.CheckCertName", value: "1") + comm = try helper.initialize(properties) + + fact = try checkedCast(prx: comm.stringToProxy(factoryRef)!, type: SSLServerFactoryPrx.self)! + d = createServerProps(defaultProperties: props, cert: "s_rsa_ca1_cn3", ca: "cacert1") + d["IceSSL.CheckCertName"] = "1" + server = try fact.createServer(d)! + try server.ice_ping() + try fact.destroyServer(server) + comm.destroy() + + // + // Target host does not match the certificate Common Name and the certificate does not + // include a DNS altName + // + properties = createClientProps(defaultProperties: defaultProperties, cert: "c_rsa_ca1", ca: "cacert1") + properties.setProperty(key: "IceSSL.CheckCertName", value: "1") + comm = try helper.initialize(properties) + + fact = try checkedCast(prx: comm.stringToProxy(factoryRef)!, type: SSLServerFactoryPrx.self)! + d = createServerProps(defaultProperties: props, cert: "s_rsa_ca1_cn4", ca: "cacert1") + d["IceSSL.CheckCertName"] = "1" + server = try fact.createServer(d)! + do { + try server.ice_ping() + try test(false) + } catch is Ice.SecurityException { + // Expected + } + try fact.destroyServer(server) + comm.destroy() + + // + // Target host matches the certificate Common Name and the certificate has + // a DNS altName that does not matches the target host + // + properties = createClientProps(defaultProperties: defaultProperties, cert: "c_rsa_ca1", ca: "cacert1") + properties.setProperty(key: "IceSSL.CheckCertName", value: "1") + comm = try helper.initialize(properties) + + fact = try checkedCast(prx: comm.stringToProxy(factoryRef)!, type: SSLServerFactoryPrx.self)! + + d = createServerProps(defaultProperties: props, cert: "s_rsa_ca1_cn5", ca: "cacert1") + d["IceSSL.CheckCertName"] = "1" + server = try fact.createServer(d)! + do { + try server.ice_ping() + try test(false) + } catch is Ice.SecurityException { + // Expected + } + try fact.destroyServer(server) + comm.destroy() + + // + // Test using 127.0.0.1 as target host + // + + // + // Disabled for compatibility with older Windows + // versions. + // + // + // Target host matches the certificate IP altName + // + properties = createClientProps(defaultProperties: defaultProperties, cert: "c_rsa_ca1", ca: "cacert1") + properties.setProperty(key: "IceSSL.CheckCertName", value: "1") + comm = try helper.initialize(properties) + fact = try checkedCast(prx: comm.stringToProxy(factoryRef)!, type: SSLServerFactoryPrx.self)! + d = createServerProps(defaultProperties: defaultProperties, cert: "s_rsa_ca1_cn6", ca: "cacert1") + d["IceSSL.CheckCertName"] = "1" + server = try fact.createServer(d)! + try server.ice_ping() + try fact.destroyServer(server) + comm.destroy() + + // + // Target host does not match the certificate IP altName + // + properties = createClientProps(defaultProperties: defaultProperties, cert: "c_rsa_ca1", ca: "cacert1") + properties.setProperty(key: "IceSSL.CheckCertName", value: "1") + comm = try helper.initialize(properties) + fact = try checkedCast(prx: comm.stringToProxy(factoryRef)!, type: SSLServerFactoryPrx.self)! + d = createServerProps(defaultProperties: defaultProperties, cert: "s_rsa_ca1_cn7", ca: "cacert1") + d["IceSSL.CheckCertName"] = "1" + server = try fact.createServer(d)! + do { + try server.ice_ping() + try test(false) + } catch is Ice.SecurityException { + // Expected + } + try fact.destroyServer(server) + comm.destroy() + } + } + output.writeLine("ok") + + output.write("testing certificate chains... ") + var properties = createClientProps(defaultProperties: defaultProperties, cert: "", ca: "") + properties.setProperty(key: "IceSSL.VerifyPeer", value: "0") + var comm = try helper.initialize(properties) + var fact = try checkedCast(prx: comm.stringToProxy(factoryRef)!, type: SSLServerFactoryPrx.self)! + // + // The client can't verify the server certificate but it should + // still provide it. "s_rsa_ca1" doesn't include the root so the + // cert size should be 1. + // + var d = createServerProps(defaultProperties: defaultProperties, cert: "s_rsa_ca1", ca: "") + d["IceSSL.VerifyPeer"] = "0" + var server = try fact.createServer(d)! + var info = try server.ice_getConnection()!.getInfo() as! SSLConnectionInfo + try test(info.certs.count == 1) + try test(!info.verified) + try fact.destroyServer(server) + + // + // Setting the CA for the server shouldn't change anything, it + // shouldn't modify the cert chain sent to the client. + // + d = createServerProps(defaultProperties: defaultProperties, cert: "s_rsa_ca1", ca: "cacert1") + d["IceSSL.VerifyPeer"] = "0" + server = try fact.createServer(d)! + info = try server.ice_getConnection()!.getInfo() as! SSLConnectionInfo + try test(info.certs.count == 1) + try test(!info.verified) + try fact.destroyServer(server) + + // + // The client can't verify the server certificate but should + // still provide it. "s_rsa_wroot_ca1" includes the root so + // the cert size should be 2. + // + d = createServerProps(defaultProperties: defaultProperties, cert: "s_rsa_wroot_ca1", ca: "") + d["IceSSL.VerifyPeer"] = "0" + server = try fact.createServer(d)! + info = try server.ice_getConnection()!.getInfo() as! SSLConnectionInfo + try test(info.certs.count == 2) + try test(!info.verified) + try fact.destroyServer(server) + + comm.destroy() + + // + // Now the client verifies the server certificate + // + properties = createClientProps(defaultProperties: defaultProperties, cert: "", ca: "cacert1") + properties.setProperty(key: "IceSSL.VerifyPeer", value: "1") + comm = try helper.initialize(properties) + + fact = try checkedCast(prx: comm.stringToProxy(factoryRef)!, type: SSLServerFactoryPrx.self)! + d = createServerProps(defaultProperties: defaultProperties, cert: "s_rsa_ca1", ca: "") + d["IceSSL.VerifyPeer"] = "0" + server = try fact.createServer(d)! + info = try server.ice_getConnection()!.getInfo() as! SSLConnectionInfo + try test(info.certs.count == 2) + try test(info.verified) + try fact.destroyServer(server) + comm.destroy() + + // + // Try certificate with one intermediate and VerifyDepthMax=2 + // + properties = createClientProps(defaultProperties: defaultProperties, cert: "", ca: "cacert1") + properties.setProperty(key: "IceSSL.VerifyPeer", value: "1") + properties.setProperty(key: "IceSSL.VerifyDepthMax", value: "2") + comm = try helper.initialize(properties) + + fact = try checkedCast(prx: comm.stringToProxy(factoryRef)!, type: SSLServerFactoryPrx.self)! + d = createServerProps(defaultProperties: defaultProperties, cert: "s_rsa_cai1", ca: "") + d["IceSSL.VerifyPeer"] = "0" + server = try fact.createServer(d)! + do { + _ = try server.ice_getConnection()!.getInfo() + try test(false) + } catch is Ice.SecurityException { + // Chain length too long + } + try fact.destroyServer(server) + comm.destroy() + + // + // Try with VerifyDepthMax set to 3 (the default) + // + properties = createClientProps(defaultProperties: defaultProperties, cert: "", ca: "cacert1") + properties.setProperty(key: "IceSSL.VerifyPeer", value: "1") + // initData.properties->setProperty("IceSSL.VerifyDepthMax", "3"); + comm = try helper.initialize(properties) + + fact = try checkedCast(prx: comm.stringToProxy(factoryRef)!, type: SSLServerFactoryPrx.self)! + d = createServerProps(defaultProperties: defaultProperties, cert: "s_rsa_cai1", ca: "") + d["IceSSL.VerifyPeer"] = "0" + server = try fact.createServer(d)! + info = try server.ice_getConnection()!.getInfo() as! SSLConnectionInfo + try test(info.certs.count == 3) + try test(info.verified) + try fact.destroyServer(server) + + d = createServerProps(defaultProperties: defaultProperties, cert: "s_rsa_cai2", ca: "") + d["IceSSL.VerifyPeer"] = "0" + server = try fact.createServer(d)! + do { + _ = try server.ice_getConnection()!.getInfo() + try test(false) + } catch is Ice.SecurityException { + // Chain length too long + } + try fact.destroyServer(server) + comm.destroy() + + // + // Increase VerifyDepthMax to 4 + // + properties = createClientProps(defaultProperties: defaultProperties, cert: "", ca: "cacert1") + properties.setProperty(key: "IceSSL.VerifyPeer", value: "1") + properties.setProperty(key: "IceSSL.VerifyDepthMax", value: "4") + comm = try helper.initialize(properties) + + fact = try checkedCast(prx: comm.stringToProxy(factoryRef)!, type: SSLServerFactoryPrx.self)! + d = createServerProps(defaultProperties: defaultProperties, cert: "s_rsa_cai2", ca: "") + d["IceSSL.VerifyPeer"] = "0" + server = try fact.createServer(d)! + info = try server.ice_getConnection()!.getInfo() as! SSLConnectionInfo + try test(info.certs.count == 4) + try test(info.verified) + try fact.destroyServer(server) + + comm.destroy() + + // + // Increase VerifyDepthMax to 4 + // + properties = createClientProps(defaultProperties: defaultProperties, cert: "c_rsa_cai2", ca: "cacert1") + properties.setProperty(key: "IceSSL.VerifyPeer", value: "1") + properties.setProperty(key: "IceSSL.VerifyDepthMax", value: "4") + comm = try helper.initialize(properties) + + fact = try checkedCast(prx: comm.stringToProxy(factoryRef)!, type: SSLServerFactoryPrx.self)! + d = createServerProps(defaultProperties: defaultProperties, cert: "s_rsa_cai2", ca: "cacert1") + d["IceSSL.VerifyPeer"] = "2" + server = try fact.createServer(d)! + do { + _ = try server.ice_getConnection() + } catch is Ice.ProtocolException { + // Expected + } catch is Ice.ConnectionLostException { + // Expected + } + try fact.destroyServer(server) + + d = createServerProps(defaultProperties: defaultProperties, cert: "s_rsa_cai2", ca: "cacert1") + d["IceSSL.VerifyPeer"] = "2" + d["IceSSL.VerifyDepthMax"] = "4" + server = try fact.createServer(d)! + _ = try server.ice_getConnection() + try fact.destroyServer(server) + + comm.destroy() + + output.writeLine("ok") + + output.write("testing custom certificate verifier... ") + + // + // ADH is allowed but will not have a certificate. + // + properties = createClientProps(defaultProperties) + properties.setProperty(key: "IceSSL.Ciphers", value: "(DH_anon*)") + properties.setProperty(key: "IceSSL.VerifyPeer", value: "0") + comm = try helper.initialize(properties) + + var invoked = false + var certs: [SecCertificate] = [] + + comm.setSslCertificateVerifier { info in + certs = info.certs + invoked = true + return true + } + fact = try checkedCast(prx: comm.stringToProxy(factoryRef)!, type: SSLServerFactoryPrx.self)! + d = createServerProps(defaultProperties) + + var cipherSub = "DH_anon" + d["IceSSL.Ciphers"] = "(DH_anon*)" + d["IceSSL.VerifyPeer"] = "0" + + server = try fact.createServer(d)! + try server.checkCipher(cipherSub) + info = try server.ice_getConnection()!.getInfo() as! SSLConnectionInfo + try test(info.cipher.starts(with: cipherSub)) + try test(invoked) + try test(certs.isEmpty) + + // + // Have the verifier return false. Close the connection explicitly + // to force a new connection to be established. + // + invoked = false + certs = [] + comm.setSslCertificateVerifier { info in + certs = info.certs + invoked = true + return false + } + try server.ice_getConnection()!.close(.GracefullyWithWait) + do { + try server.ice_ping() + try test(false) + } catch is SecurityException { + // Expected. + } + try test(invoked) + try test(certs.isEmpty) + + try fact.destroyServer(server) + comm.destroy() + + // + // Verify that a server certificate is present. + // + properties = createClientProps(defaultProperties: defaultProperties, cert: "c_rsa_ca1", ca: "cacert1") + properties.setProperty(key: "IceSSL.VerifyPeer", value: "0") + comm = try helper.initialize(properties) + + invoked = false + certs = [] + comm.setSslCertificateVerifier { info in + certs = info.certs + invoked = true + return true + } + + fact = try checkedCast(prx: comm.stringToProxy(factoryRef)!, type: SSLServerFactoryPrx.self)! + d = createServerProps(defaultProperties: defaultProperties, cert: "s_rsa_ca1", ca: "cacert1") + d["IceSSL.VerifyPeer"] = "2" + server = try fact.createServer(d)! + try server.ice_ping() + + try test(invoked) + try test(certs.count > 0) + try fact.destroyServer(server) + comm.destroy() + output.writeLine("ok") + + output.write("testing protocols... ") + // + // In macOS we don't support IceSSL.Protocols as secure transport doesn't allow to set the enabled protocols + // instead we use IceSSL.ProtocolVersionMax IceSSL.ProtocolVersionMin to set the maximun and minimum + // enabled protocol versions. See the test bellow. + // + + // + // This should fail because the client and server have no protocol + // in common. + // + properties = createClientProps(defaultProperties) + properties.setProperty(key: "IceSSL.Ciphers", value: "(DH_anon*)") + properties.setProperty(key: "IceSSL.VerifyPeer", value: "0") + properties.setProperty(key: "IceSSL.ProtocolVersionMax", value: "tls1") + properties.setProperty(key: "IceSSL.ProtocolVersionMin", value: "tls1") + + comm = try helper.initialize(properties) + fact = try checkedCast(prx: comm.stringToProxy(factoryRef)!, type: SSLServerFactoryPrx.self)! + d = createServerProps(defaultProperties) + d["IceSSL.Ciphers"] = "(DH_anon*)" + d["IceSSL.VerifyPeer"] = "0" + d["IceSSL.ProtocolVersionMax"] = "tls1_2" + d["IceSSL.ProtocolVersionMin"] = "tls1_2" + server = try fact.createServer(d)! + do { + try server.ice_ping() + try test(false) + } catch is ProtocolException { + // Expected on some platforms. + } catch is ConnectionLostException { + // Expected on some platforms. + } + try fact.destroyServer(server) + comm.destroy() + + // + // This should succeed. + // + comm = try helper.initialize(properties) + fact = try checkedCast(prx: comm.stringToProxy(factoryRef)!, type: SSLServerFactoryPrx.self)! + d = createServerProps(defaultProperties) + d["IceSSL.Ciphers"] = "(DH_anon*)" + d["IceSSL.VerifyPeer"] = "0" + d["IceSSL.ProtocolVersionMax"] = "tls1" + d["IceSSL.ProtocolVersionMin"] = "ssl3" + server = try fact.createServer(d)! + try server.ice_ping() + try fact.destroyServer(server) + comm.destroy() + + // + // This should fail because the client only accept SSLv3 and the server + // use the default protocol set that disables SSLv3 + // + properties = createClientProps(defaultProperties: defaultProperties, cert: "c_rsa_ca1", ca: "cacert1") + properties.setProperty(key: "IceSSL.VerifyPeer", value: "0") + properties.setProperty(key: "IceSSL.ProtocolVersionMin", value: "ssl3") + properties.setProperty(key: "IceSSL.ProtocolVersionMax", value: "ssl3") + + comm = try helper.initialize(properties) + + fact = try checkedCast(prx: comm.stringToProxy(factoryRef)!, type: SSLServerFactoryPrx.self)! + d = createServerProps(defaultProperties: defaultProperties, cert: "s_rsa_ca1", ca: "cacert1") + d["IceSSL.VerifyPeer"] = "0" + server = try fact.createServer(d)! + do { + try server.ice_ping() + try test(false) + } catch is ProtocolException { + // Expected on some platforms. + } catch is ConnectionLostException { + // Expected on some platforms. + } + try fact.destroyServer(server) + comm.destroy() + + // + // This should succeed because both have SSLv3 enabled + // + properties = createClientProps(defaultProperties: defaultProperties, cert: "c_rsa_ca1", ca: "cacert1") + properties.setProperty(key: "IceSSL.VerifyPeer", value: "0") + properties.setProperty(key: "IceSSL.ProtocolVersionMin", value: "ssl3") + properties.setProperty(key: "IceSSL.ProtocolVersionMax", value: "ssl3") + comm = try helper.initialize(properties) + + fact = try checkedCast(prx: comm.stringToProxy(factoryRef)!, type: SSLServerFactoryPrx.self)! + d = createServerProps(defaultProperties: defaultProperties, cert: "s_rsa_ca1", ca: "cacert1") + d["IceSSL.VerifyPeer"] = "0" + d["IceSSL.ProtocolVersionMin"] = "ssl3" + server = try fact.createServer(d)! + try server.ice_ping() + try fact.destroyServer(server) + comm.destroy() + output.writeLine("ok") + + output.write("testing expired certificates... ") + properties = createClientProps(defaultProperties: defaultProperties, cert: "c_rsa_ca1", ca: "cacert1") + comm = try helper.initialize(properties) + fact = try checkedCast(prx: comm.stringToProxy(factoryRef)!, type: SSLServerFactoryPrx.self)! + d = createServerProps(defaultProperties: defaultProperties, cert: "s_rsa_ca1_exp", ca: "cacert1") + server = try fact.createServer(d)! + do { + try server.ice_ping() + try test(false) + } catch is SecurityException { + // Expected. + } + try fact.destroyServer(server) + comm.destroy() + + properties = createClientProps(defaultProperties: defaultProperties, cert: "c_rsa_ca1_exp", ca: "cacert1") + comm = try helper.initialize(properties) + fact = try checkedCast(prx: comm.stringToProxy(factoryRef)!, type: SSLServerFactoryPrx.self)! + d = createServerProps(defaultProperties: defaultProperties, cert: "s_rsa_ca1", ca: "cacert1") + server = try fact.createServer(d)! + do { + try server.ice_ping() + try test(false) + } catch is ConnectionLostException { + // Expected. + } + try fact.destroyServer(server) + comm.destroy() + + output.writeLine("ok") + + output.write("testing multiple CA certificates... ") + properties = createClientProps(defaultProperties: defaultProperties, cert: "c_rsa_ca1", ca: "cacerts") + comm = try helper.initialize(properties) + fact = try checkedCast(prx: comm.stringToProxy(factoryRef)!, type: SSLServerFactoryPrx.self)! + d = createServerProps(defaultProperties: defaultProperties, cert: "s_rsa_ca2", ca: "cacerts") + d["IceSSL.VerifyPeer"] = "2" + server = try fact.createServer(d)! + _ = try server.ice_ping() + try fact.destroyServer(server) + comm.destroy() + output.writeLine("ok") + + output.write("testing DER CA certificate... ") + properties = createClientProps(defaultProperties: defaultProperties, cert: "c_rsa_ca1", ca: "") + properties.setProperty(key: "IceSSL.CAs", value: "cacert1.der") + comm = try helper.initialize(properties) + fact = try checkedCast(prx: comm.stringToProxy(factoryRef)!, type: SSLServerFactoryPrx.self)! + d = createServerProps(defaultProperties: defaultProperties, cert: "s_rsa_ca1", ca: "") + d["IceSSL.VerifyPeer"] = "2" + d["IceSSL.CAs"] = "cacert1.der" + server = try fact.createServer(d)! + try server.ice_ping() + try fact.destroyServer(server) + comm.destroy() + output.writeLine("ok") + + output.write("testing password prompt... ") + // + // Use the correct password. + // + properties = createClientProps(defaultProperties: defaultProperties, cert: "c_rsa_pass_ca1", ca: "cacert1") + properties.setProperty(key: "IceSSL.Password", value: "") // Clear the password + properties.setProperty(key: "Ice.InitPlugins", value: "0") + comm = try helper.initialize(properties) + var count = 0 + comm.setSslPasswordPrompt { + count += 1 + return "client" + } + try comm.initializePlugins() + try test(count == 1) + + fact = try checkedCast(prx: comm.stringToProxy(factoryRef)!, type: SSLServerFactoryPrx.self)! + d = createServerProps(defaultProperties: defaultProperties, cert: "s_rsa_ca1", ca: "cacert1") + server = try fact.createServer(d)! + try server.ice_ping() + try fact.destroyServer(server) + comm.destroy() + + // + // Use an incorrect password and check that retries are attempted. + // + properties = createClientProps(defaultProperties: defaultProperties, cert: "c_rsa_pass_ca1", ca: "cacert1") + properties.setProperty(key: "IceSSL.Password", value: "") // Clear password + properties.setProperty(key: "IceSSL.PasswordRetryMax", value: "4") + properties.setProperty(key: "Ice.InitPlugins", value: "0") + comm = try helper.initialize(properties) + count = 0 + comm.setSslPasswordPrompt { + count += 1 + return "invalid" + } + do { + try comm.initializePlugins() + } catch is PluginInitializationException { + // Expected. + } + try test(count == 4) + comm.destroy() + output.writeLine("ok") + + output.write("testing ciphers... ") + + properties = createClientProps(defaultProperties: defaultProperties, cert: "c_rsa_ca1", ca: "cacert1") + properties.setProperty(key: "IceSSL.Ciphers", value: "UNKNOWN") + do { + _ = try helper.initialize(properties) + try test(false) + } catch is Ice.PluginInitializationException { + // Expected + } + + // + // The server has a certificate but the client doesn't. They should + // negotiate to use ADH since we explicitly enable it. + // + properties = createClientProps(defaultProperties) + properties.setProperty(key: "IceSSL.Ciphers", value: "(DH_anon*)") + comm = try helper.initialize(properties) + fact = try checkedCast(prx: comm.stringToProxy(factoryRef)!, type: SSLServerFactoryPrx.self)! + d = createServerProps(defaultProperties: defaultProperties, cert: "s_rsa_ca1", ca: "cacert1") + cipherSub = "DH_anon" + d["IceSSL.Ciphers"] = "(RSA_*) (DH_anon*)" + d["IceSSL.VerifyPeer"] = "1" + server = try fact.createServer(d)! + + do { + try server.checkCipher(cipherSub) + info = try server.ice_getConnection()!.getInfo() as! SSLConnectionInfo + try test(info.cipher.starts(with: cipherSub)) + } catch is LocalException { + // + // macOS 10.10 bug the handshake fails attempting client auth + // with anon cipher. + // + } + try fact.destroyServer(server) + comm.destroy() + + // + // This should fail because the client disabled all ciphers. + // + properties = createClientProps(defaultProperties: defaultProperties, cert: "c_rsa_ca1", ca: "cacert1") + properties.setProperty(key: "IceSSL.Ciphers", value: "NONE") + do { + comm = try helper.initialize(properties) + try test(false) + } catch is Ice.PluginInitializationException { + // Expected when disabled all cipher suites. + } + + // + // Test IceSSL.DHParams + // + properties = createClientProps(defaultProperties) + properties.setProperty(key: "IceSSL.Ciphers", value: "(DH_anon*)") + comm = try helper.initialize(properties) + fact = try checkedCast(prx: comm.stringToProxy(factoryRef)!, type: SSLServerFactoryPrx.self)! + d = createServerProps(defaultProperties) + d["IceSSL.Ciphers"] = "(DH_anon*)" + d["IceSSL.DHParams"] = "dh_params1024.der" + d["IceSSL.VerifyPeer"] = "0" + server = try fact.createServer(d)! + try server.checkCipher("DH_anon") + try fact.destroyServer(server) + comm.destroy() + output.writeLine("ok") + + output.write("testing IceSSL.TrustOnly... ") + // + // iOS support only provides access to the CN of the certificate so we + // can't check for other attributes + // + properties = createClientProps(defaultProperties: defaultProperties, cert: "c_rsa_ca1", ca: "cacert1") + properties.setProperty(key: "IceSSL.TrustOnly", + value: "C=US, ST=Florida, O=ZeroC\\, Inc., OU=Ice, emailAddress=info@zeroc.com, CN=Server") + comm = try helper.initialize(properties) + + fact = try checkedCast(prx: comm.stringToProxy(factoryRef)!, type: SSLServerFactoryPrx.self)! + d = createServerProps(defaultProperties: defaultProperties, cert: "s_rsa_ca1", ca: "cacert1") + server = try fact.createServer(d)! + try server.ice_ping() + try fact.destroyServer(server) + comm.destroy() + + properties = createClientProps(defaultProperties: defaultProperties, cert: "c_rsa_ca1", ca: "cacert1") + properties.setProperty(key: "IceSSL.TrustOnly", + value: "!C=US, ST=Florida, O=ZeroC\\, Inc., OU=Ice, emailAddress=info@zeroc.com, CN=Server") + comm = try helper.initialize(properties) + + fact = try checkedCast(prx: comm.stringToProxy(factoryRef)!, type: SSLServerFactoryPrx.self)! + d = createServerProps(defaultProperties: defaultProperties, cert: "s_rsa_ca1", ca: "cacert1") + server = try fact.createServer(d)! + do { + try server.ice_ping() + try test(false) + } catch is LocalException {} + try fact.destroyServer(server) + comm.destroy() + + properties = createClientProps(defaultProperties: defaultProperties, cert: "c_rsa_ca1", ca: "cacert1") + properties.setProperty(key: "IceSSL.TrustOnly", + value: "C=US, ST=Florida, O=\"ZeroC, Inc.\", OU=Ice, emailAddress=info@zeroc.com, CN=Server") + comm = try helper.initialize(properties) + + fact = try checkedCast(prx: comm.stringToProxy(factoryRef)!, type: SSLServerFactoryPrx.self)! + d = createServerProps(defaultProperties: defaultProperties, cert: "s_rsa_ca1", ca: "cacert1") + server = try fact.createServer(d)! + try server.ice_ping() + try fact.destroyServer(server) + comm.destroy() + + properties = createClientProps(defaultProperties: defaultProperties, cert: "c_rsa_ca1", ca: "cacert1") + comm = try helper.initialize(properties) + + fact = try checkedCast(prx: comm.stringToProxy(factoryRef)!, type: SSLServerFactoryPrx.self)! + d = createServerProps(defaultProperties: defaultProperties, cert: "s_rsa_ca1", ca: "cacert1") + d["IceSSL.TrustOnly"] = "C=US, ST=Florida, O=ZeroC\\, Inc., OU=Ice, emailAddress=info@zeroc.com,CN=Client" + + server = try fact.createServer(d)! + try server.ice_ping() + try fact.destroyServer(server) + comm.destroy() + + properties = createClientProps(defaultProperties: defaultProperties, cert: "c_rsa_ca1", ca: "cacert1") + comm = try helper.initialize(properties) + + fact = try checkedCast(prx: comm.stringToProxy(factoryRef)!, type: SSLServerFactoryPrx.self)! + d = createServerProps(defaultProperties: defaultProperties, cert: "s_rsa_ca1", ca: "cacert1") + d["IceSSL.TrustOnly"] = "!C=US, ST=Florida, O=ZeroC\\, Inc., OU=Ice, emailAddress=info@zeroc.com, CN=Client" + + server = try fact.createServer(d)! + do { + try server.ice_ping() + try test(false) + } catch is LocalException {} + try fact.destroyServer(server) + comm.destroy() + + properties = createClientProps(defaultProperties: defaultProperties, cert: "c_rsa_ca1", ca: "cacert1") + properties.setProperty(key: "IceSSL.TrustOnly", value: "CN=Server") + comm = try helper.initialize(properties) + + fact = try checkedCast(prx: comm.stringToProxy(factoryRef)!, type: SSLServerFactoryPrx.self)! + d = createServerProps(defaultProperties: defaultProperties, cert: "s_rsa_ca1", ca: "cacert1") + server = try fact.createServer(d)! + try server.ice_ping() + try fact.destroyServer(server) + comm.destroy() + + properties = createClientProps(defaultProperties: defaultProperties, cert: "c_rsa_ca1", ca: "cacert1") + properties.setProperty(key: "IceSSL.TrustOnly", value: "!CN=Server") + comm = try helper.initialize(properties) + + fact = try checkedCast(prx: comm.stringToProxy(factoryRef)!, type: SSLServerFactoryPrx.self)! + d = createServerProps(defaultProperties: defaultProperties, cert: "s_rsa_ca1", ca: "cacert1") + server = try fact.createServer(d)! + do { + try server.ice_ping() + try test(false) + } catch is LocalException {} + try fact.destroyServer(server) + comm.destroy() + + properties = createClientProps(defaultProperties: defaultProperties, cert: "c_rsa_ca1", ca: "cacert1") + comm = try helper.initialize(properties) + + fact = try checkedCast(prx: comm.stringToProxy(factoryRef)!, type: SSLServerFactoryPrx.self)! + d = createServerProps(defaultProperties: defaultProperties, cert: "s_rsa_ca1", ca: "cacert1") + d["IceSSL.TrustOnly"] = "CN=Client" + server = try fact.createServer(d)! + try server.ice_ping() + try fact.destroyServer(server) + comm.destroy() + + properties = createClientProps(defaultProperties: defaultProperties, cert: "c_rsa_ca1", ca: "cacert1") + comm = try helper.initialize(properties) + + fact = try checkedCast(prx: comm.stringToProxy(factoryRef)!, type: SSLServerFactoryPrx.self)! + d = createServerProps(defaultProperties: defaultProperties, cert: "s_rsa_ca1", ca: "cacert1") + d["IceSSL.TrustOnly"] = "!CN=Client" + server = try fact.createServer(d)! + do { + try server.ice_ping() + try test(false) + } catch is LocalException {} + try fact.destroyServer(server) + comm.destroy() + + properties = createClientProps(defaultProperties: defaultProperties, cert: "c_rsa_ca1", ca: "cacert1") + properties.setProperty(key: "IceSSL.TrustOnly", value: "CN=Client") + comm = try helper.initialize(properties) + + fact = try checkedCast(prx: comm.stringToProxy(factoryRef)!, type: SSLServerFactoryPrx.self)! + d = createServerProps(defaultProperties: defaultProperties, cert: "s_rsa_ca1", ca: "cacert1") + server = try fact.createServer(d)! + do { + try server.ice_ping() + try test(false) + } catch is LocalException {} + try fact.destroyServer(server) + comm.destroy() + + properties = createClientProps(defaultProperties: defaultProperties, cert: "c_rsa_ca1", ca: "cacert1") + comm = try helper.initialize(properties) + fact = try checkedCast(prx: comm.stringToProxy(factoryRef)!, type: SSLServerFactoryPrx.self)! + d = createServerProps(defaultProperties: defaultProperties, cert: "s_rsa_ca1", ca: "cacert1") + d["IceSSL.TrustOnly"] = "CN=Server" + server = try fact.createServer(d)! + do { + try server.ice_ping() + try test(false) + } catch is LocalException {} + + try fact.destroyServer(server) + comm.destroy() + + properties = createClientProps(defaultProperties: defaultProperties, cert: "c_rsa_ca1", ca: "cacert1") + properties.setProperty(key: "IceSSL.TrustOnly", value: "C=Canada,CN=Server") + comm = try helper.initialize(properties) + + fact = try checkedCast(prx: comm.stringToProxy(factoryRef)!, type: SSLServerFactoryPrx.self)! + d = createServerProps(defaultProperties: defaultProperties, cert: "s_rsa_ca1", ca: "cacert1") + server = try fact.createServer(d)! + do { + try server.ice_ping() + try test(false) + } catch is LocalException {} + try fact.destroyServer(server) + comm.destroy() + + properties = createClientProps(defaultProperties: defaultProperties, cert: "c_rsa_ca1", ca: "cacert1") + properties.setProperty(key: "IceSSL.TrustOnly", value: "!C=Canada,CN=Server") + comm = try helper.initialize(properties) + + fact = try checkedCast(prx: comm.stringToProxy(factoryRef)!, type: SSLServerFactoryPrx.self)! + d = createServerProps(defaultProperties: defaultProperties, cert: "s_rsa_ca1", ca: "cacert1") + server = try fact.createServer(d)! + try server.ice_ping() + try fact.destroyServer(server) + comm.destroy() + + properties = createClientProps(defaultProperties: defaultProperties, cert: "c_rsa_ca1", ca: "cacert1") + properties.setProperty(key: "IceSSL.TrustOnly", value: "C=Canada;CN=Server") + comm = try helper.initialize(properties) + + fact = try checkedCast(prx: comm.stringToProxy(factoryRef)!, type: SSLServerFactoryPrx.self)! + d = createServerProps(defaultProperties: defaultProperties, cert: "s_rsa_ca1", ca: "cacert1") + server = try fact.createServer(d)! + try server.ice_ping() + try fact.destroyServer(server) + comm.destroy() + + properties = createClientProps(defaultProperties: defaultProperties, cert: "c_rsa_ca1", ca: "cacert1") + properties.setProperty(key: "IceSSL.TrustOnly", value: "!C=Canada;!CN=Server") + comm = try helper.initialize(properties) + + fact = try checkedCast(prx: comm.stringToProxy(factoryRef)!, type: SSLServerFactoryPrx.self)! + d = createServerProps(defaultProperties: defaultProperties, cert: "s_rsa_ca1", ca: "cacert1") + server = try fact.createServer(d)! + do { + try server.ice_ping() + try test(false) + } catch is LocalException {} + try fact.destroyServer(server) + comm.destroy() + + properties = createClientProps(defaultProperties: defaultProperties, cert: "c_rsa_ca1", ca: "cacert1") + properties.setProperty(key: "IceSSL.TrustOnly", value: "!CN=Server1") // Should not match "Server" + comm = try helper.initialize(properties) + + fact = try checkedCast(prx: comm.stringToProxy(factoryRef)!, type: SSLServerFactoryPrx.self)! + d = createServerProps(defaultProperties: defaultProperties, cert: "s_rsa_ca1", ca: "cacert1") + server = try fact.createServer(d)! + try server.ice_ping() + try fact.destroyServer(server) + comm.destroy() + + properties = createClientProps(defaultProperties: defaultProperties, cert: "c_rsa_ca1", ca: "cacert1") + comm = try helper.initialize(properties) + + fact = try checkedCast(prx: comm.stringToProxy(factoryRef)!, type: SSLServerFactoryPrx.self)! + d = createServerProps(defaultProperties: defaultProperties, cert: "s_rsa_ca1", ca: "cacert1") + d["IceSSL.TrustOnly"] = "!CN=Client1" // Should not match "Client" + server = try fact.createServer(d)! + try server.ice_ping() + try fact.destroyServer(server) + comm.destroy() + + properties = createClientProps(defaultProperties: defaultProperties, cert: "", ca: "") + properties.setProperty(key: "IceSSL.VerifyPeer", value: "0") + comm = try helper.initialize(properties) + + fact = try checkedCast(prx: comm.stringToProxy(factoryRef)!, type: SSLServerFactoryPrx.self)! + d = createServerProps(defaultProperties: defaultProperties, cert: "s_rsa_ca1", ca: "cacert1") + d["IceSSL.VerifyPeer"] = "0" + d["IceSSL.TrustOnly"] = "CN=Client" + server = try fact.createServer(d)! + do { + try server.ice_ping() + try test(false) + } catch is LocalException {} + + try fact.destroyServer(server) + comm.destroy() + + // + // Test rejection when client does not supply a certificate. + // + properties = createClientProps(defaultProperties: defaultProperties, cert: "", ca: "") + properties.setProperty(key: "IceSSL.VerifyPeer", value: "0") + comm = try helper.initialize(properties) + + fact = try checkedCast(prx: comm.stringToProxy(factoryRef)!, type: SSLServerFactoryPrx.self)! + d = createServerProps(defaultProperties: defaultProperties, cert: "s_rsa_ca1", ca: "cacert1") + d["IceSSL.TrustOnly"] = "!CN=Client" + d["IceSSL.VerifyPeer"] = "0" + server = try fact.createServer(d)! + do { + try server.ice_ping() + try test(false) + } catch is LocalException {} + try fact.destroyServer(server) + comm.destroy() + + // + // Rejection takes precedence (client). + // + properties = createClientProps(defaultProperties: defaultProperties, cert: "c_rsa_ca1", ca: "cacert1") + properties.setProperty(key: "IceSSL.TrustOnly", value: "ST=Florida;!CN=Server;C=US") + comm = try helper.initialize(properties) + fact = try checkedCast(prx: comm.stringToProxy(factoryRef)!, type: SSLServerFactoryPrx.self)! + d = createServerProps(defaultProperties: defaultProperties, cert: "s_rsa_ca1", ca: "cacert1") + server = try fact.createServer(d)! + do { + try server.ice_ping() + try test(false) + } catch is LocalException {} + try fact.destroyServer(server) + comm.destroy() + + // + // Rejection takes precedence (server). + // + properties = createClientProps(defaultProperties: defaultProperties, cert: "c_rsa_ca1", ca: "cacert1") + comm = try helper.initialize(properties) + + fact = try checkedCast(prx: comm.stringToProxy(factoryRef)!, type: SSLServerFactoryPrx.self)! + d = createServerProps(defaultProperties: defaultProperties, cert: "s_rsa_ca1", ca: "cacert1") + d["IceSSL.TrustOnly"] = "C=US;!CN=Client;ST=Florida" + + server = try fact.createServer(d)! + do { + try server.ice_ping() + try test(false) + } catch is LocalException {} + try fact.destroyServer(server) + comm.destroy() + output.writeLine("ok") + + output.write("testing IceSSL.TrustOnly.Client... ") + properties = createClientProps(defaultProperties: defaultProperties, cert: "c_rsa_ca1", ca: "cacert1") + properties.setProperty(key: "IceSSL.TrustOnly.Client", + value: "C=US, ST=Florida, O=ZeroC\\, Inc., OU=Ice, emailAddress=info@zeroc.com, CN=Server") + comm = try helper.initialize(properties) + + fact = try checkedCast(prx: comm.stringToProxy(factoryRef)!, type: SSLServerFactoryPrx.self)! + d = createServerProps(defaultProperties: defaultProperties, cert: "s_rsa_ca1", ca: "cacert1") + // Should have no effect. + d["IceSSL.TrustOnly.Client"] = + "C=US, ST=Florida, O=ZeroC\\, Inc., OU=Ice, emailAddress=info@zeroc.com, CN=Server" + server = try fact.createServer(d)! + try server.ice_ping() + try fact.destroyServer(server) + comm.destroy() + + properties = createClientProps(defaultProperties: defaultProperties, cert: "c_rsa_ca1", ca: "cacert1") + properties.setProperty(key: "IceSSL.TrustOnly.Client", + value: "!C=US, ST=Florida, O=ZeroC\\, Inc., OU=Ice, emailAddress=info@zeroc.com, CN=Server") + comm = try helper.initialize(properties) + + fact = try checkedCast(prx: comm.stringToProxy(factoryRef)!, type: SSLServerFactoryPrx.self)! + d = createServerProps(defaultProperties: defaultProperties, cert: "s_rsa_ca1", ca: "cacert1") + server = try fact.createServer(d)! + do { + try server.ice_ping() + try test(false) + } catch is LocalException {} + try fact.destroyServer(server) + comm.destroy() + + properties = createClientProps(defaultProperties: defaultProperties, cert: "c_rsa_ca1", ca: "cacert1") + comm = try helper.initialize(properties) + + fact = try checkedCast(prx: comm.stringToProxy(factoryRef)!, type: SSLServerFactoryPrx.self)! + d = createServerProps(defaultProperties: defaultProperties, cert: "s_rsa_ca1", ca: "cacert1") + // Should have no effect. + d["IceSSL.TrustOnly.Client"] = "!CN=Client" + server = try fact.createServer(d)! + try server.ice_ping() + try fact.destroyServer(server) + comm.destroy() + + properties = createClientProps(defaultProperties: defaultProperties, cert: "c_rsa_ca1", ca: "cacert1") + properties.setProperty(key: "IceSSL.TrustOnly.Client", value: "CN=Client") + comm = try helper.initialize(properties) + + fact = try checkedCast(prx: comm.stringToProxy(factoryRef)!, type: SSLServerFactoryPrx.self)! + d = createServerProps(defaultProperties: defaultProperties, cert: "s_rsa_ca1", ca: "cacert1") + server = try fact.createServer(d)! + do { + try server.ice_ping() + try test(false) + } catch is LocalException {} + try fact.destroyServer(server) + comm.destroy() + + properties = createClientProps(defaultProperties: defaultProperties, cert: "c_rsa_ca1", ca: "cacert1") + properties.setProperty(key: "IceSSL.TrustOnly.Client", value: "!CN=Client") + comm = try helper.initialize(properties) + + fact = try checkedCast(prx: comm.stringToProxy(factoryRef)!, type: SSLServerFactoryPrx.self)! + d = createServerProps(defaultProperties: defaultProperties, cert: "s_rsa_ca1", ca: "cacert1") + server = try fact.createServer(d)! + try server.ice_ping() + try fact.destroyServer(server) + comm.destroy() + + output.writeLine("ok") + + output.write("testing IceSSL.TrustOnly.Server... ") + properties = createClientProps(defaultProperties: defaultProperties, cert: "c_rsa_ca1", ca: "cacert1") + // Should have no effect. + properties.setProperty(key: "IceSSL.TrustOnly.Server", + value: "C=US, ST=Florida, O=ZeroC\\, Inc., OU=Ice, emailAddress=info@zeroc.com,CN=Client") + comm = try helper.initialize(properties) + + fact = try checkedCast(prx: comm.stringToProxy(factoryRef)!, type: SSLServerFactoryPrx.self)! + d = createServerProps(defaultProperties: defaultProperties, cert: "s_rsa_ca1", ca: "cacert1") + d["IceSSL.TrustOnly.Server"] = + "C=US, ST=Florida, O=ZeroC\\, Inc., OU=Ice, emailAddress=info@zeroc.com, CN=Client" + + server = try fact.createServer(d)! + try server.ice_ping() + try fact.destroyServer(server) + comm.destroy() + + properties = createClientProps(defaultProperties: defaultProperties, cert: "c_rsa_ca1", ca: "cacert1") + comm = try helper.initialize(properties) + + fact = try checkedCast(prx: comm.stringToProxy(factoryRef)!, type: SSLServerFactoryPrx.self)! + d = createServerProps(defaultProperties: defaultProperties, cert: "s_rsa_ca1", ca: "cacert1") + d["IceSSL.TrustOnly.Server"] = + "!C=US, ST=Florida, O=ZeroC\\, Inc., OU=Ice, emailAddress=info@zeroc.com, CN=Client" + server = try fact.createServer(d)! + do { + try server.ice_ping() + try test(false) + } catch is LocalException {} + try fact.destroyServer(server) + comm.destroy() + + properties = createClientProps(defaultProperties: defaultProperties, cert: "c_rsa_ca1", ca: "cacert1") + // Should have no effect. + properties.setProperty(key: "IceSSL.TrustOnly.Server", value: "!CN=Server") + comm = try helper.initialize(properties) + + fact = try checkedCast(prx: comm.stringToProxy(factoryRef)!, type: SSLServerFactoryPrx.self)! + d = createServerProps(defaultProperties: defaultProperties, cert: "s_rsa_ca1", ca: "cacert1") + server = try fact.createServer(d)! + try server.ice_ping() + try fact.destroyServer(server) + comm.destroy() + + properties = createClientProps(defaultProperties: defaultProperties, cert: "c_rsa_ca1", ca: "cacert1") + comm = try helper.initialize(properties) + + fact = try checkedCast(prx: comm.stringToProxy(factoryRef)!, type: SSLServerFactoryPrx.self)! + d = createServerProps(defaultProperties: defaultProperties, cert: "s_rsa_ca1", ca: "cacert1") + d["IceSSL.TrustOnly.Server"] = "CN=Server" + server = try fact.createServer(d)! + do { + try server.ice_ping() + try test(false) + } catch is LocalException {} + try fact.destroyServer(server) + comm.destroy() + + properties = createClientProps(defaultProperties: defaultProperties, cert: "c_rsa_ca1", ca: "cacert1") + comm = try helper.initialize(properties) + + fact = try checkedCast(prx: comm.stringToProxy(factoryRef)!, type: SSLServerFactoryPrx.self)! + d = createServerProps(defaultProperties: defaultProperties, cert: "s_rsa_ca1", ca: "cacert1") + d["IceSSL.TrustOnly.Server"] = "!CN=Client" + server = try fact.createServer(d)! + do { + try server.ice_ping() + try test(false) + } catch is LocalException {} + try fact.destroyServer(server) + comm.destroy() + + output.writeLine("ok") + + output.write("testing IceSSL.TrustOnly.Server.<AdapterName>... ") + properties = createClientProps(defaultProperties: defaultProperties, cert: "c_rsa_ca1", ca: "cacert1") + comm = try helper.initialize(properties) + + fact = try checkedCast(prx: comm.stringToProxy(factoryRef)!, type: SSLServerFactoryPrx.self)! + d = createServerProps(defaultProperties: defaultProperties, cert: "s_rsa_ca1", ca: "cacert1") + d["IceSSL.TrustOnly.Server.ServerAdapter"] = + "C=US, ST=Florida, O=ZeroC\\, Inc., OU=Ice, emailAddress=info@zeroc.com,CN=Client" + d["IceSSL.TrustOnly.Server"] = "CN=bogus" + server = try fact.createServer(d)! + try server.ice_ping() + try fact.destroyServer(server) + comm.destroy() + + properties = createClientProps(defaultProperties: defaultProperties, cert: "c_rsa_ca1", ca: "cacert1") + comm = try helper.initialize(properties) + + fact = try checkedCast(prx: comm.stringToProxy(factoryRef)!, type: SSLServerFactoryPrx.self)! + d = createServerProps(defaultProperties: defaultProperties, cert: "s_rsa_ca1", ca: "cacert1") + d["IceSSL.TrustOnly.Server.ServerAdapter"] = + "!C=US, ST=Florida, O=ZeroC\\, Inc., OU=Ice, emailAddress=info@zeroc.com, CN=Client" + server = try fact.createServer(d)! + do { + try server.ice_ping() + try test(false) + } catch is LocalException {} + try fact.destroyServer(server) + comm.destroy() + + properties = createClientProps(defaultProperties: defaultProperties, cert: "c_rsa_ca1", ca: "cacert1") + comm = try helper.initialize(properties) + + fact = try checkedCast(prx: comm.stringToProxy(factoryRef)!, type: SSLServerFactoryPrx.self)! + d = createServerProps(defaultProperties: defaultProperties, cert: "s_rsa_ca1", ca: "cacert1") + d["IceSSL.TrustOnly.Server.ServerAdapter"] = "CN=bogus" + server = try fact.createServer(d)! + do { + try server.ice_ping() + try test(false) + } catch is LocalException {} + try fact.destroyServer(server) + comm.destroy() + + properties = createClientProps(defaultProperties: defaultProperties, cert: "c_rsa_ca1", ca: "cacert1") + comm = try helper.initialize(properties) + + fact = try checkedCast(prx: comm.stringToProxy(factoryRef)!, type: SSLServerFactoryPrx.self)! + d = createServerProps(defaultProperties: defaultProperties, cert: "s_rsa_ca1", ca: "cacert1") + d["IceSSL.TrustOnly.Server.ServerAdapter"] = "!CN=bogus" + server = try fact.createServer(d)! + try server.ice_ping() + try fact.destroyServer(server) + comm.destroy() + output.writeLine("ok") + + return factory +} diff --git a/swift/test/IceSSL/configuration/Client.swift b/swift/test/IceSSL/configuration/Client.swift new file mode 100644 index 00000000000..7616dd195bb --- /dev/null +++ b/swift/test/IceSSL/configuration/Client.swift @@ -0,0 +1,27 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Foundation +import Ice +import TestCommon + +class Client: TestHelperI { + public override func run(args: [String]) throws { + do { + let communicator = try initialize(args) + defer { + communicator.destroy() + } + var path = Bundle.main.bundlePath + #if os(iOS) || os(watchOS) || os(tvOS) + path += "/Frameworks/IceSSLConfiguration.bundle/certs" + #else + path += "/Contents/Frameworks/IceSSLConfiguration.bundle/Contents/Resources/certs" + #endif + + let factory = try allTests(self, path) + try factory.shutdown() + } + } +} diff --git a/swift/test/IceSSL/configuration/Server.swift b/swift/test/IceSSL/configuration/Server.swift new file mode 100644 index 00000000000..cbfdf870b4b --- /dev/null +++ b/swift/test/IceSSL/configuration/Server.swift @@ -0,0 +1,32 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Foundation +import Ice +import TestCommon + +class Server: TestHelperI { + public override func run(args: [String]) throws { + var restArgs = args + let communicator = try initialize(args) + defer { + communicator.destroy() + } + + var path = Bundle.main.bundlePath + #if os(iOS) || os(watchOS) || os(tvOS) + path += "/Frameworks/IceSSLConfiguration.bundle/certs" + #else + path += "/Contents/Frameworks/IceSSLConfiguration.bundle/Contents/Resources/certs" + #endif + communicator.getProperties().setProperty(key: "TestAdapter.Endpoints", + value: getTestEndpoint(num: 0, prot: "tcp")) + let adapter = try communicator.createObjectAdapter("TestAdapter") + try adapter.add(servant: SSLServerFactoryDisp(ServerFactoryI(defaultDir: path, helper: self)), + id: Ice.stringToIdentity("factory")) + try adapter.activate() + serverReady() + communicator.waitForShutdown() + } +} diff --git a/swift/test/IceSSL/configuration/Test.ice b/swift/test/IceSSL/configuration/Test.ice new file mode 100644 index 00000000000..ee33a5d8f8d --- /dev/null +++ b/swift/test/IceSSL/configuration/Test.ice @@ -0,0 +1,28 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +#pragma once + +["swift:module:Test:SSL"] + +module Test +{ + +interface Server +{ + void noCert(); + void checkCert(string subjectDN, string issuerDN); + void checkCipher(string cipher); +} + +dictionary<string, string> Properties; + +interface ServerFactory +{ + Server* createServer(Properties props); + void destroyServer(Server* srv); + void shutdown(); +} + +} diff --git a/swift/test/IceSSL/configuration/TestI.swift b/swift/test/IceSSL/configuration/TestI.swift new file mode 100644 index 00000000000..37f9bbd58ce --- /dev/null +++ b/swift/test/IceSSL/configuration/TestI.swift @@ -0,0 +1,90 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import TestCommon + +class ServerI: SSLServer { + var _communicator: Ice.Communicator + var _helper: TestHelper + + init(communicator: Ice.Communicator, helper: TestHelper) { + _communicator = communicator + _helper = helper + } + + func noCert(current: Ice.Current) throws { + do { + let info = try current.con!.getInfo() as! SSLConnectionInfo + try _helper.test(info.certs.count == 0) + } catch is Ice.LocalException { + try _helper.test(false) + } + } + + func checkCert(subjectDN _: String, issuerDN _: String, current: Ice.Current) throws { + do { + let info = try current.con!.getInfo() as! SSLConnectionInfo + try _helper.test(info.verified) + try _helper.test(info.certs.count == 2) + } catch is Ice.LocalException { + try _helper.test(false) + } + } + + func checkCipher(cipher: String, current: Ice.Current) throws { + do { + let info = try current.con!.getInfo() as! SSLConnectionInfo + try _helper.test(info.cipher.contains(cipher)) + } catch is Ice.LocalException { + try _helper.test(false) + } + } + + func destroy() throws { + _communicator.destroy() + } +} + +class ServerFactoryI: SSLServerFactory { + var _defaultDir: String + var _helper: TestHelper + var _servers: [Identity: ServerI] + + public init(defaultDir: String, helper: TestHelper) { + _defaultDir = defaultDir + _helper = helper + _servers = [:] + } + + func createServer(props: [String: String], current _: Ice.Current) throws -> SSLServerPrx? { + let properties = Ice.createProperties() + for (key, value) in props { + properties.setProperty(key: key, value: value) + } + properties.setProperty(key: "IceSSL.DefaultDir", value: _defaultDir) + var initData = Ice.InitializationData() + initData.properties = properties + let communicator = try Ice.initialize(initData) + let adapter = try communicator.createObjectAdapterWithEndpoints(name: "ServerAdapter", endpoints: "ssl") + let server = ServerI(communicator: communicator, helper: _helper) + let obj = try adapter.addWithUUID(SSLServerDisp(server)) + _servers[obj.ice_getIdentity()] = server + try adapter.activate() + return uncheckedCast(prx: obj, type: SSLServerPrx.self) + } + + func destroyServer(srv: SSLServerPrx?, current _: Ice.Current) throws { + if let srv = srv { + if let server = _servers.removeValue(forKey: srv.ice_getIdentity()) { + try server.destroy() + } + } + } + + func shutdown(current: Ice.Current) throws { + try _helper.test(_servers.count == 0) + current.adapter!.getCommunicator().shutdown() + } +} diff --git a/swift/test/Slice/escape/Clash.ice b/swift/test/Slice/escape/Clash.ice new file mode 100644 index 00000000000..7b55fe7d90b --- /dev/null +++ b/swift/test/Slice/escape/Clash.ice @@ -0,0 +1,63 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +[["underscore"]] + +module Clash +{ + +interface Intf +{ + void context(); + void current(); + void response(); + void upCast(); + void typeId(); + void del(); + void cookie(); + void sync(); + void inS(); + void istr(); + + void op(string context, string current, string response, string ex, string sent, string cookie, + string sync, string result, string istr, string ostr, optional(1) string proxy); + void opOut(out string context, out string current, out string response, out string ex, + out string sent, out string cookie, out string sync, out string result, out string istr, + out string ostr, out optional(1) string proxy); +} + +class Cls +{ + Intf* s; + string context; + int current; + short response; + string upCast; + int typeId; + short del; + optional(1) short cookie; + string ex; + int result; + string istr; + string ostr; + string inS; + string in; + string proxy; +} + +struct St +{ + string v; + short istr; + int ostr; + int rhs; +} + +exception Ex +{ + short istr; + int ostr; +} + +} diff --git a/swift/test/Slice/escape/Client.swift b/swift/test/Slice/escape/Client.swift new file mode 100644 index 00000000000..32cc6cae0ec --- /dev/null +++ b/swift/test/Slice/escape/Client.swift @@ -0,0 +1,83 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Ice +import PromiseKit +import TestCommon + +class breakI: `break` { + func caseAsync(catch _: Int32, current _: Current) -> Promise<Int32> { + return Promise.value(0) + } +} + +class funcI: `func` { + func `public`(current _: Current) throws {} +} + +class doI: `do` { + func `public`(current _: Current) throws {} + + func caseAsync(catch _: Int32, current _: Current) -> Promise<Int32> { + return Promise.value(0) + } +} + +public class Client: TestHelperI { + public override func run(args: [String]) throws { + let communicator = try initialize(args) + defer { + communicator.destroy() + } + communicator.getProperties().setProperty(key: "TestAdapter.Endpoints", value: getTestEndpoint(num: 0)) + let adapter = try communicator.createObjectAdapter("TestAdapter") + try adapter.add(servant: breakDisp(breakI()), id: Ice.stringToIdentity("test")) + try adapter.add(servant: funcDisp(funcI()), id: Ice.stringToIdentity("test1")) + try adapter.add(servant: doDisp(doI()), id: Ice.stringToIdentity("test2")) + try adapter.activate() + + let out = getWriter() + out.write("testing operation name... ") + let p = try checkedCast(prx: adapter.createProxy(Ice.stringToIdentity("test")), type: breakPrx.self)! + _ = try p.case(0) + out.writeLine("ok") + + out.write("testing types... ") + let e: `continue` = .let + + var g: `guard` = `guard`() + g.default = 0 + + var d: `defer` = `defer`() + d.else = "else" + + let c: `switch` = `switch`() + c.if = 0 + c.export = nil + c.volatile = 0 + try test(c.if == 0) + + let ss: `fileprivate` = `fileprivate`(repeating: g, count: 1) + let dd: `for` = ["g": g] + try test(dd.count == ss.count) + + do { + if e == .let { + throw `return`(Int32: 0) + } + } catch { + // Expected + } + + try test(`is` == 0) + //try test(`self` == 0) + try test(`throw` == 0) + try test(`typealias` == 0) + try test(`internal` == 0) + try test(`while` == 0) + try test(`import` == 0) + + out.writeLine("ok") + } +} diff --git a/swift/test/Slice/escape/Key.ice b/swift/test/Slice/escape/Key.ice new file mode 100644 index 00000000000..d3981e317b6 --- /dev/null +++ b/swift/test/Slice/escape/Key.ice @@ -0,0 +1,77 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +[["underscore"]] +[["suppress-warning:deprecated"]] + +module and +{ + +enum continue +{ + let, + var +} + +struct guard +{ + int default; +} + +["cpp:class"] struct defer +{ + string else; +} + +interface break +{ + ["amd"] void case(int catch, out int try); +} + +interface func +{ + void public(); +} + +class switch +{ + int if; + func* export; + int volatile; +} + +interface do extends func, break +{ +} + +sequence<guard> fileprivate; + +dictionary<string,guard> for; + +exception return +{ + int Int32; +} + +exception as extends return +{ + int static; int switch; +} + +local interface friend +{ + guard goto(continue if, guard d, defer inline, switch private, do mutable, break* namespace, + func* new, switch* not, do* operator, int or, int protected, int public, int register) + throws return, as; +} + +const int is = 0; +const int self = 0; +const int throw = 0; +const int typealias = 0; +const int internal = 0; +const int while = 0; +const int import = 0; + +} diff --git a/swift/test/TestCommon/Info.plist b/swift/test/TestCommon/Info.plist new file mode 100644 index 00000000000..9668b463f36 --- /dev/null +++ b/swift/test/TestCommon/Info.plist @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>CFBundleDevelopmentRegion</key> + <string>$(DEVELOPMENT_LANGUAGE)</string> + <key>CFBundleExecutable</key> + <string>$(EXECUTABLE_NAME)</string> + <key>CFBundleIdentifier</key> + <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string> + <key>CFBundleInfoDictionaryVersion</key> + <string>6.0</string> + <key>CFBundleName</key> + <string>$(PRODUCT_NAME)</string> + <key>CFBundlePackageType</key> + <string>FMWK</string> + <key>CFBundleShortVersionString</key> + <string>$(CURRENT_PROJECT_VERSION)</string> + <key>CFBundleVersion</key> + <string>$(CURRENT_PROJECT_VERSION)</string> + <key>NSHumanReadableCopyright</key> + <string>Copyright © ZeroC, Inc. All rights reserved.</string> +</dict> +</plist> diff --git a/swift/test/TestCommon/TestCommon.swift b/swift/test/TestCommon/TestCommon.swift new file mode 100644 index 00000000000..2f8b6f01a8a --- /dev/null +++ b/swift/test/TestCommon/TestCommon.swift @@ -0,0 +1,193 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Foundation +import Ice + +public func withLock<T>(_ lock: os_unfair_lock_t, block: () throws -> T) rethrows -> T { + os_unfair_lock_lock(lock) + defer { + os_unfair_lock_unlock(lock) + } + return try block() +} + +public protocol TextWriter { + func write(_ data: String) + func writeLine(_ data: String) +} + +public protocol ControllerHelper { + func loggerPrefix() -> String + func serverReady() + func communicatorInitialized(communicator: Ice.Communicator) +} + +class StdoutWriter: TextWriter { + public func write(_ data: String) { + fputs(data, stdout) + fflush(stdout) + } + + public func writeLine(_ data: String) { + print(data) + fflush(stdout) + } +} + +public enum TestFailed: Error { + case testFailed +} + +public protocol TestHelper { + init() + func run(args: [String]) throws + func getTestEndpoint(num: Int32, prot: String) -> String + func getTestEndpoint(properties: Ice.Properties, num: Int32, prot: String) -> String + func getTestHost() -> String + func getTestHost(properties: Ice.Properties) -> String + func getTestProtocol() -> String + func getTestProtocol(properties: Ice.Properties) -> String + func getTestPort(num: Int32) -> Int32 + func getTestPort(properties: Ice.Properties, num: Int32) -> Int32 + func createTestProperties(_ args: [String]) throws -> Ice.Properties + func createTestProperties(_ args: inout [String]) throws -> Ice.Properties + func initialize(_ args: [String]) throws -> Ice.Communicator + func initialize(_ properties: Ice.Properties) throws -> Ice.Communicator + func initialize(_ initData: Ice.InitializationData) throws -> Ice.Communicator + + func test(_ value: Bool, file: String, line: Int) throws + + func getWriter() -> TextWriter + func setWriter(writer: TextWriter) + + func communicator() -> Ice.Communicator + func setControllerHelper(controllerHelper: ControllerHelper) +} + +public extension TestHelper { + func getTestEndpoint(num: Int32 = 0, prot: String = "") -> String { + return getTestEndpoint(properties: communicator().getProperties(), + num: num, + prot: prot) + } + + func test(_ value: Bool, file: String = #file, line: Int = #line) throws { + if !value { + let writer = getWriter() + writer.writeLine("Test failed File: \(file): Line: \(line)") + throw TestFailed.testFailed + } + } +} + +open class TestHelperI: TestHelper { + private var _controllerHelper: ControllerHelper! + private var _communicator: Ice.Communicator! + private var _writer: TextWriter! + + public required init() {} + + open func run(args _: [String]) throws { + print("Subclass has not implemented abstract method `run`!") + abort() + } + + public func getTestEndpoint(properties: Ice.Properties, num: Int32 = 0, prot: String = "") -> String { + var s = "" + s += (prot == "") ? properties.getPropertyWithDefault(key: "Ice.Default.Protocol", value: "default") : prot + s += " -p " + let port = properties.getPropertyAsIntWithDefault(key: "Test.BasePort", value: 12010) + num + s += String(port) + return s + } + + public func getTestHost() -> String { + return getTestHost(properties: _communicator!.getProperties()) + } + + public func getTestHost(properties: Ice.Properties) -> String { + return properties.getPropertyWithDefault(key: "Ice.Default.Host", value: "127.0.0.1") + } + + public func getTestProtocol() -> String { + return getTestProtocol(properties: _communicator!.getProperties()) + } + + public func getTestProtocol(properties: Ice.Properties) -> String { + return properties.getPropertyWithDefault(key: "Ice.Default.Protocol", value: "tcp") + } + + public func getTestPort(num: Int32) -> Int32 { + return getTestPort(properties: _communicator.getProperties(), num: num) + } + + public func getTestPort(properties: Ice.Properties, num: Int32) -> Int32 { + return properties.getPropertyAsIntWithDefault(key: "Test.BasePort", value: 12010) + num + } + + public func createTestProperties(_ args: [String]) throws -> Ice.Properties { + var remainingArgs = args + let properties = try Ice.createProperties(&remainingArgs) + remainingArgs = try properties.parseCommandLineOptions(prefix: "Test", options: remainingArgs) + return properties + } + + public func createTestProperties(_ args: inout [String]) throws -> Ice.Properties { + let properties = try Ice.createProperties(&args) + args = try properties.parseCommandLineOptions(prefix: "Test", options: args) + return properties + } + + public func initialize(_ args: [String]) throws -> Ice.Communicator { + var initData = Ice.InitializationData() + let props = try createTestProperties(args) + initData.properties = props + let communicator = try initialize(initData) + return communicator + } + + public func initialize(_ properties: Ice.Properties) throws -> Ice.Communicator { + var initData = Ice.InitializationData() + initData.properties = properties + return try initialize(initData) + } + + public func initialize(_ initData: Ice.InitializationData) throws -> Ice.Communicator { + let communicator = try Ice.initialize(initData) + if _communicator == nil { + _communicator = communicator + } + if _controllerHelper != nil { + _controllerHelper.communicatorInitialized(communicator: _communicator) + } + return communicator + } + + public func getWriter() -> TextWriter { + if _writer == nil { + _writer = StdoutWriter() + } + return _writer + } + + public func setWriter(writer: TextWriter) { + _writer = writer + } + + public func communicator() -> Communicator { + return _communicator + } + + public func serverReady() { + if _controllerHelper != nil { + _controllerHelper.serverReady() + } + } + + public func setControllerHelper(controllerHelper: ControllerHelper) { + precondition(_controllerHelper == nil) + _controllerHelper = controllerHelper + } +} diff --git a/swift/test/TestDriver/iOS/AppDelegate.swift b/swift/test/TestDriver/iOS/AppDelegate.swift new file mode 100644 index 00000000000..175cda70307 --- /dev/null +++ b/swift/test/TestDriver/iOS/AppDelegate.swift @@ -0,0 +1,26 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import UIKit + +@UIApplicationMain +class AppDelegate: UIResponder, UIApplicationDelegate { + var window: UIWindow? + + func application(_: UIApplication, + didFinishLaunchingWithOptions _: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { + // Override point for customization after application launch. + return true + } + + func applicationWillResignActive(_: UIApplication) {} + + func applicationDidEnterBackground(_: UIApplication) {} + + func applicationWillEnterForeground(_: UIApplication) {} + + func applicationDidBecomeActive(_: UIApplication) {} + + func applicationWillTerminate(_: UIApplication) {} +} diff --git a/swift/test/TestDriver/iOS/Assets.xcassets/AppIcon.appiconset/Contents.json b/swift/test/TestDriver/iOS/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 00000000000..d8db8d65fd7 --- /dev/null +++ b/swift/test/TestDriver/iOS/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,98 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "3x" + }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "76x76", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "76x76", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "83.5x83.5", + "scale" : "2x" + }, + { + "idiom" : "ios-marketing", + "size" : "1024x1024", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +}
\ No newline at end of file diff --git a/swift/test/TestDriver/iOS/Assets.xcassets/Contents.json b/swift/test/TestDriver/iOS/Assets.xcassets/Contents.json new file mode 100644 index 00000000000..da4a164c918 --- /dev/null +++ b/swift/test/TestDriver/iOS/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +}
\ No newline at end of file diff --git a/swift/test/TestDriver/iOS/Base.lproj/LaunchScreen.storyboard b/swift/test/TestDriver/iOS/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 00000000000..bfa36129419 --- /dev/null +++ b/swift/test/TestDriver/iOS/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="13122.16" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM"> + <dependencies> + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13104.12"/> + <capability name="Safe area layout guides" minToolsVersion="9.0"/> + <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> + </dependencies> + <scenes> + <!--View Controller--> + <scene sceneID="EHf-IW-A2E"> + <objects> + <viewController id="01J-lp-oVM" sceneMemberID="viewController"> + <view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3"> + <rect key="frame" x="0.0" y="0.0" width="375" height="667"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> + <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> + <viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/> + </view> + </viewController> + <placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/> + </objects> + <point key="canvasLocation" x="53" y="375"/> + </scene> + </scenes> +</document> diff --git a/swift/test/TestDriver/iOS/Base.lproj/Main.storyboard b/swift/test/TestDriver/iOS/Base.lproj/Main.storyboard new file mode 100644 index 00000000000..be1b0ffdbfa --- /dev/null +++ b/swift/test/TestDriver/iOS/Base.lproj/Main.storyboard @@ -0,0 +1,77 @@ +<?xml version="1.0" encoding="UTF-8"?> +<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14490.70" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="BYZ-38-t0r"> + <device id="retina6_1" orientation="portrait"> + <adaptation id="fullscreen"/> + </device> + <dependencies> + <deployment identifier="iOS"/> + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14490.49"/> + <capability name="Safe area layout guides" minToolsVersion="9.0"/> + <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> + </dependencies> + <scenes> + <!--View Controller--> + <scene sceneID="tne-QT-ifu"> + <objects> + <viewController id="BYZ-38-t0r" customClass="ViewController" customModule="TestDriver" sceneMemberID="viewController"> + <layoutGuides> + <viewControllerLayoutGuide type="top" id="y3c-jy-aDJ"/> + <viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/> + </layoutGuides> + <view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC"> + <rect key="frame" x="0.0" y="0.0" width="414" height="896"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> + <subviews> + <pickerView contentMode="scaleToFill" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="xR3-DO-y6j" userLabel="InterfaceIPv4"> + <rect key="frame" x="40" y="49" width="335" height="75"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/> + <connections> + <outlet property="dataSource" destination="BYZ-38-t0r" id="qqe-Ub-kJJ"/> + <outlet property="delegate" destination="BYZ-38-t0r" id="F6m-Y2-o1H"/> + </connections> + </pickerView> + <textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" fixedFrame="YES" editable="NO" textAlignment="natural" translatesAutoresizingMaskIntoConstraints="NO" id="nZ9-dY-qBC" userLabel="Output"> + <rect key="frame" x="40" y="258" width="335" height="618"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> + <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/> + <fontDescription key="fontDescription" type="system" pointSize="14"/> + <textInputTraits key="textInputTraits" autocapitalizationType="sentences"/> + </textView> + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="IPv4" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="StB-MO-pSa" userLabel="LabelInterfaceIPv4"> + <rect key="frame" x="40" y="28" width="34" height="21"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> + <fontDescription key="fontDescription" type="system" pointSize="17"/> + <nil key="textColor"/> + <nil key="highlightedColor"/> + </label> + <pickerView contentMode="scaleToFill" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="BKi-XY-5kF" userLabel="InterfaceIPv6"> + <rect key="frame" x="40" y="161" width="335" height="75"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/> + <connections> + <outlet property="dataSource" destination="BYZ-38-t0r" id="Ksd-8b-gVb"/> + <outlet property="delegate" destination="BYZ-38-t0r" id="NT1-QV-RAh"/> + </connections> + </pickerView> + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="IPv6" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="PhT-kW-Fyr" userLabel="LabelInterfaceIPv6"> + <rect key="frame" x="40" y="140" width="34" height="21"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> + <fontDescription key="fontDescription" type="system" pointSize="17"/> + <nil key="textColor"/> + <nil key="highlightedColor"/> + </label> + </subviews> + <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> + <viewLayoutGuide key="safeArea" id="mil-wj-jXA"/> + </view> + <connections> + <outlet property="interfaceIPv4" destination="xR3-DO-y6j" id="xY9-aa-eAa"/> + <outlet property="interfaceIPv6" destination="BKi-XY-5kF" id="NbN-G3-g0H"/> + <outlet property="output" destination="nZ9-dY-qBC" id="CJT-G1-c1h"/> + </connections> + </viewController> + <placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/> + </objects> + <point key="canvasLocation" x="133.59999999999999" y="136.28185907046478"/> + </scene> + </scenes> +</document> diff --git a/swift/test/TestDriver/iOS/ControllerI.swift b/swift/test/TestDriver/iOS/ControllerI.swift new file mode 100644 index 00000000000..b61107ec48b --- /dev/null +++ b/swift/test/TestDriver/iOS/ControllerI.swift @@ -0,0 +1,284 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Foundation +import Ice +import TestCommon + +class ProcessI: CommonProcess { + var _helper: ControllerHelperI + + init(helper: ControllerHelperI) { + _helper = helper + } + + func waitReady(timeout: Int32, current _: Ice.Current) throws { + try _helper.waitReady(timeout: timeout) + } + + func waitSuccess(timeout: Int32, current _: Ice.Current) throws -> Int32 { + return try _helper.waitSuccess(timeout: timeout) + } + + func terminate(current: Ice.Current) throws -> String { + _helper.shutdown() + guard let adapter = current.adapter else { + fatalError() + } + try adapter.remove(current.id) + return _helper.getOutput() + } +} + +class ProcessControllerI: CommonProcessController { + var _view: ViewController + var _ipv4: String + var _ipv6: String + + var _bundleName: String = "" + + // + // Run each process in its own queue + // + var _serverDispatchQueue: DispatchQueue + var _clientDispatchQueue: DispatchQueue + + init(view: ViewController, ipv4: String, ipv6: String) { + _view = view + _ipv4 = ipv4 + _ipv6 = ipv6 + + _serverDispatchQueue = DispatchQueue(label: "Server", qos: .userInitiated) + _clientDispatchQueue = DispatchQueue(label: "Client", qos: .userInitiated) + } + + func start(testsuite: String, + exe: String, + args: CommonStringSeq, + current: Ice.Current) throws -> CommonProcessPrx? { + guard let adapter = current.adapter else { + throw Ice.RuntimeError("Error") + } + _view.println("starting \(testsuite) \(exe)... ") + + // + // For a Client test reuse the Server or ServerAMD bundle + // if it has been loaded. + // + _bundleName = testsuite.split(separator: "/").map { + if let c = $0.first { + return c.uppercased() + $0.dropFirst() + } else { + return String($0) + } + }.joined(separator: "") + + if exe == "ServerAMD" { + _bundleName += "AMD" + } + + let helper = ControllerHelperI(view: _view, + bundleName: _bundleName, + args: args, + exe: exe, + queue: (exe == "Server" || + exe == "ServerAMD") ? _serverDispatchQueue : _clientDispatchQueue) + helper.run() + return try uncheckedCast(prx: adapter.addWithUUID( + CommonProcessDisp(ProcessI(helper: helper))), type: CommonProcessPrx.self) + } + + func getHost(protocol _: String, + ipv6: Bool, + current _: Ice.Current) throws -> String { + return ipv6 ? _ipv6 : _ipv4 + } +} + +class ControllerI { + var _communicator: Ice.Communicator! + static var _controller: ControllerI! + + init(view: ViewController, ipv4: String, ipv6: String) throws { + let properties = Ice.createProperties() + properties.setProperty(key: "Ice.Plugin.IceDiscovery", value: "1") + properties.setProperty(key: "Ice.ThreadPool.Server.SizeMax", value: "10") + properties.setProperty(key: "IceDiscovery.DomainId", value: "TestController") + properties.setProperty(key: "ControllerAdapter.Endpoints", value: "tcp") + properties.setProperty(key: "ControllerAdapter.AdapterId", value: UUID().uuidString) + // properties.setProperty(key: "Ice.Trace.Protocol", value: "2") + // properties.setProperty(key: "Ice.Trace.Network", value: "3") + + var initData = Ice.InitializationData() + initData.properties = properties + _communicator = try Ice.initialize(initData) + + let adapter = try _communicator.createObjectAdapter("ControllerAdapter") + var ident = Ice.Identity() + #if targetEnvironment(simulator) + ident.category = "iPhoneSimulator" + #else + ident.category = "iPhoneOS" + #endif + ident.name = "com.zeroc.Swift-Test-Controller" + + try adapter.add(servant: CommonProcessControllerDisp( + ProcessControllerI(view: view, ipv4: ipv4, ipv6: ipv6)), id: ident) + try adapter.activate() + } + + public func destroy() { + precondition(_communicator != nil) + _communicator.destroy() + } + + public class func stopController() { + if _controller != nil { + _controller.destroy() + _controller = nil + } + } + + public class func startController(view: ViewController, ipv4: String, ipv6: String) throws { + _controller = try ControllerI(view: view, ipv4: ipv4, ipv6: ipv6) + } +} + +class ControllerHelperI: ControllerHelper, TextWriter { + var _view: ViewController + var _args: [String] + var _ready: Bool + var _completed: Bool + var _status: Int32 + var _out: String + var _communicator: Ice.Communicator! + var _semaphore: DispatchSemaphore + var _exe: String + var _queue: DispatchQueue + var _bundleName: String + + public init(view: ViewController, bundleName: String, args: [String], exe: String, queue: DispatchQueue) { + _view = view + _bundleName = bundleName + _args = args + _ready = false + _completed = false + _status = 1 + _out = "" + _communicator = nil + _exe = exe + _semaphore = DispatchSemaphore(value: 0) + _queue = queue + } + + public func serverReady() { + _ready = true + _semaphore.signal() + } + + public func communicatorInitialized(communicator: Ice.Communicator) { + _communicator = communicator + } + + public func loggerPrefix() -> String { + return _bundleName + } + + public func write(_ msg: String) { + _out += msg + } + + public func writeLine(_ msg: String) { + write("\(msg)\n") + } + + public func completed(status: Int32) { + _completed = true + _status = status + _semaphore.signal() + } + + public func run() { + let path = "\(Bundle.main.bundlePath)/Frameworks/\(_bundleName).bundle" + + guard let bundle = Bundle(url: URL(fileURLWithPath: path)) else { + writeLine("Bundle: `\(path)' not found") + completed(status: 1) + return + } + + let className = "\(_bundleName).\(_exe)" + guard let helperClass = bundle.classNamed(className) as? TestHelperI.Type else { + writeLine("test: `\(className)' not found") + completed(status: 1) + return + } + + _queue.async { + do { + let testHelper = helperClass.init() + testHelper.setControllerHelper(controllerHelper: self) + testHelper.setWriter(writer: self) + try testHelper.run(args: self._args) + self.completed(status: 0) + } catch { + self.writeLine("Error: \(error)") + self.completed(status: 1) + } + } + } + + public func shutdown() { + guard let communicator = _communicator else { + return + } + communicator.shutdown() + } + + public func waitReady(timeout: Int32) throws { + var ex: Error? + do { + while !_ready, !_completed { + if _semaphore.wait(timeout: .now() + Double(timeout)) == .timedOut { + throw CommonProcessFailedException(reason: "Timeout waiting for the process to be ready") + } + } + + if _completed, _status != 0 { + throw CommonProcessFailedException(reason: _out) + } + } catch { + ex = error + } + if let ex = ex { + throw ex + } + } + + public func waitSuccess(timeout: Int32) throws -> Int32 { + var ex: Error? + do { + while !_completed { + if _semaphore.wait(timeout: .now() + Double(timeout)) == .timedOut { + throw CommonProcessFailedException(reason: "Timeout waiting for the process to succeed") + } + } + + if _completed, _status != 0 { + throw CommonProcessFailedException(reason: _out) + } + } catch { + ex = error + } + + if let ex = ex { + throw ex + } + return _status + } + + public func getOutput() -> String { + return _out + } +} diff --git a/swift/test/TestDriver/iOS/Info.plist b/swift/test/TestDriver/iOS/Info.plist new file mode 100644 index 00000000000..903c698c2fa --- /dev/null +++ b/swift/test/TestDriver/iOS/Info.plist @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>CFBundleDevelopmentRegion</key> + <string>$(DEVELOPMENT_LANGUAGE)</string> + <key>CFBundleExecutable</key> + <string>$(EXECUTABLE_NAME)</string> + <key>CFBundleIdentifier</key> + <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string> + <key>CFBundleInfoDictionaryVersion</key> + <string>6.0</string> + <key>CFBundleName</key> + <string>$(PRODUCT_NAME)</string> + <key>CFBundlePackageType</key> + <string>APPL</string> + <key>CFBundleShortVersionString</key> + <string>$(CURRENT_PROJECT_VERSION)</string> + <key>CFBundleVersion</key> + <string>$(CURRENT_PROJECT_VERSION)</string> + <key>LSRequiresIPhoneOS</key> + <true/> + <key>UILaunchStoryboardName</key> + <string>LaunchScreen</string> + <key>UIMainStoryboardFile</key> + <string>Main</string> + <key>UIRequiredDeviceCapabilities</key> + <array> + <string>armv7</string> + </array> + <key>UISupportedInterfaceOrientations</key> + <array> + <string>UIInterfaceOrientationPortrait</string> + <string>UIInterfaceOrientationLandscapeLeft</string> + <string>UIInterfaceOrientationLandscapeRight</string> + </array> + <key>UISupportedInterfaceOrientations~ipad</key> + <array> + <string>UIInterfaceOrientationPortrait</string> + <string>UIInterfaceOrientationPortraitUpsideDown</string> + <string>UIInterfaceOrientationLandscapeLeft</string> + <string>UIInterfaceOrientationLandscapeRight</string> + </array> +</dict> +</plist> diff --git a/swift/test/TestDriver/iOS/ViewController.swift b/swift/test/TestDriver/iOS/ViewController.swift new file mode 100644 index 00000000000..3493bb98beb --- /dev/null +++ b/swift/test/TestDriver/iOS/ViewController.swift @@ -0,0 +1,106 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Darwin +import UIKit + +class ViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate { + @IBOutlet var interfaceIPv4: UIPickerView! + @IBOutlet var interfaceIPv6: UIPickerView! + @IBOutlet var output: UITextView! + + var interfacesIPv4: [String]! + var interfacesIPv6: [String]! + + override func viewDidLoad() { + super.viewDidLoad() + + interfacesIPv4 = [String]() + interfacesIPv4.append("127.0.0.1") + + interfacesIPv6 = [String]() + interfacesIPv6.append("::1") + + var ifap: UnsafeMutablePointer<ifaddrs>? + + if getifaddrs(&ifap) == 0 { + for curr in sequence(first: ifap!, next: { $0.pointee.ifa_next }) { + if (curr.pointee.ifa_flags & UInt32(IFF_UP)) != 0, + (curr.pointee.ifa_flags & UInt32(IFF_LOOPBACK)) == 0 { + if curr.pointee.ifa_addr!.pointee.sa_family == UInt32(AF_INET) { + var buf = [Int8](repeating: 0, count: Int(INET_ADDRSTRLEN)) + curr.pointee.ifa_addr!.withMemoryRebound(to: sockaddr_in.self, capacity: 1) { addr in + let s = inet_ntop(AF_INET, &addr.pointee.sin_addr, &buf, socklen_t(INET_ADDRSTRLEN)) + interfacesIPv4.append("\(String(cString: s!))") + } + } else if curr.pointee.ifa_addr!.pointee.sa_family == UInt32(AF_INET6) { + var buf = [Int8](repeating: 0, count: Int(INET6_ADDRSTRLEN)) + curr.pointee.ifa_addr!.withMemoryRebound(to: sockaddr_in6.self, capacity: 1) { addr6 in + let s = inet_ntop(AF_INET6, &addr6.pointee.sin6_addr, &buf, socklen_t(INET6_ADDRSTRLEN)) + interfacesIPv6.append("\(String(cString: s!))") + } + } + } + } + freeifaddrs(ifap) + } + + // By default, use the loopback + interfaceIPv4.selectedRow(inComponent: 0) + interfaceIPv6.selectedRow(inComponent: 0) + + do { + try ControllerI.startController(view: self, ipv4: interfacesIPv4[0], ipv6: interfacesIPv6[0]) + } catch { + println("Error: \(error)") + } + } + + public func write(_ msg: String) { + output.insertText(msg) + output.layoutIfNeeded() + output.scrollRangeToVisible(NSRange(location: output.text.count - 1, length: 1)) + } + + public func print(_ msg: String) { + DispatchQueue.main.async { + self.write(msg) + } + } + + public func println(_ msg: String) { + print("\(msg)\n") + } + + func numberOfComponents(in _: UIPickerView) -> Int { + return 1 + } + + func pickerView(_ view: UIPickerView, numberOfRowsInComponent _: Int) -> Int { + if view === interfaceIPv4 { + return interfacesIPv4.count + } else { + return interfacesIPv6.count + } + } + + func pickerView(_ view: UIPickerView, titleForRow row: Int, forComponent _: Int) -> String? { + if view === interfaceIPv4 { + return interfacesIPv4[row] + } else { + return interfacesIPv6[row] + } + } + + func pickerView(_: UIPickerView, didSelectRow _: Int, inComponent _: Int) { + do { + ControllerI.stopController() + try ControllerI.startController(view: self, + ipv4: interfacesIPv4[interfaceIPv4.selectedRow(inComponent: 0)], + ipv6: interfacesIPv6[interfaceIPv6.selectedRow(inComponent: 0)]) + } catch { + print("Error: \(error)") + } + } +} diff --git a/swift/test/TestDriver/macOS/Info.plist b/swift/test/TestDriver/macOS/Info.plist new file mode 100644 index 00000000000..9668b463f36 --- /dev/null +++ b/swift/test/TestDriver/macOS/Info.plist @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>CFBundleDevelopmentRegion</key> + <string>$(DEVELOPMENT_LANGUAGE)</string> + <key>CFBundleExecutable</key> + <string>$(EXECUTABLE_NAME)</string> + <key>CFBundleIdentifier</key> + <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string> + <key>CFBundleInfoDictionaryVersion</key> + <string>6.0</string> + <key>CFBundleName</key> + <string>$(PRODUCT_NAME)</string> + <key>CFBundlePackageType</key> + <string>FMWK</string> + <key>CFBundleShortVersionString</key> + <string>$(CURRENT_PROJECT_VERSION)</string> + <key>CFBundleVersion</key> + <string>$(CURRENT_PROJECT_VERSION)</string> + <key>NSHumanReadableCopyright</key> + <string>Copyright © ZeroC, Inc. All rights reserved.</string> +</dict> +</plist> diff --git a/swift/test/TestDriver/macOS/main.swift b/swift/test/TestDriver/macOS/main.swift new file mode 100644 index 00000000000..067669642c0 --- /dev/null +++ b/swift/test/TestDriver/macOS/main.swift @@ -0,0 +1,56 @@ +// +// Copyright (c) ZeroC, Inc. All rights reserved. +// + +import Foundation +import PromiseKit +import TestCommon + +PromiseKit.conf.Q.map = .global() +PromiseKit.conf.Q.return = .global() +PromiseKit.conf.logHandler = { _ in } + +var args = CommandLine.arguments +if args.count < 3 { + print("Usage: \(CommandLine.arguments[0]) <test> <args>") + exit(1) +} + +do { + var bundleName = args[1].split(separator: ".").map { + if let c = $0.first { + return c.uppercased() + $0.dropFirst() + } else { + return String($0) + } + }.joined(separator: "") + + let exe = args[2] + if exe == "ServerAMD" { + bundleName += "AMD" + } + + let path = "\(Bundle.main.bundlePath)/../\(bundleName).bundle" + + guard let bundle = Bundle(url: URL(fileURLWithPath: path)) else { + print("Bundle: `\(path)' not found") + exit(1) + } + + let className = "\(bundleName).\(exe)" + guard let helperClass = bundle.classNamed(className) as? TestHelperI.Type else { + print("test: `\(className)' not found") + exit(1) + } + + let testHelper = helperClass.init() + args.removeFirst(3) + try testHelper.run(args: args) + +} catch { + for s in Thread.callStackSymbols { + print(s) + } + print("Error \(error)") + exit(1) +} |