summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore2
-rw-r--r--Cartfile1
-rw-r--r--Cartfile.resolved1
-rw-r--r--config/Make.rules4
-rw-r--r--config/PropertyNames.xml1
-rw-r--r--config/iphoneos-SDKSettings.plist2
-rw-r--r--config/iphonesimulator-SDKSettings.plist2
-rw-r--r--config/macosx-SDKSettings.plist2
-rwxr-xr-xconfig/makeprops.py3
-rw-r--r--cpp/config/templates.xml4
-rw-r--r--cpp/include/Ice/Config.h4
-rw-r--r--cpp/include/Ice/Proxy.h12
-rw-r--r--cpp/include/IceUtil/Config.h6
-rw-r--r--cpp/include/IceUtil/OutputUtil.h9
-rw-r--r--cpp/include/IceUtil/ResourceConfig.h6
-rw-r--r--cpp/include/IceUtil/StringConverter.h2
-rw-r--r--cpp/src/Ice/Base64.cpp1
-rw-r--r--cpp/src/Ice/CommunicatorI.cpp19
-rw-r--r--cpp/src/Ice/CommunicatorI.h5
-rw-r--r--cpp/src/Ice/Exception.cpp10
-rw-r--r--cpp/src/Ice/Instance.cpp21
-rw-r--r--cpp/src/Ice/OSLogLoggerI.cpp57
-rw-r--r--cpp/src/Ice/OSLogLoggerI.h40
-rw-r--r--cpp/src/Ice/ObjectAdapterI.cpp14
-rw-r--r--cpp/src/Ice/ObjectAdapterI.h4
-rw-r--r--cpp/src/Ice/PropertyNames.cpp3
-rw-r--r--cpp/src/Ice/PropertyNames.h2
-rw-r--r--cpp/src/Ice/Proxy.cpp6
-rw-r--r--cpp/src/Ice/RegisterPluginsInit.cpp5
-rw-r--r--cpp/src/Ice/SHA1.cpp4
-rw-r--r--cpp/src/Ice/Selector.cpp12
-rw-r--r--cpp/src/Ice/ThreadPool.cpp47
-rw-r--r--cpp/src/Ice/ThreadPool.h12
-rw-r--r--cpp/src/Ice/ios/StreamEndpointI.cpp13
-rw-r--r--cpp/src/Ice/ios/StreamEndpointI.h2
-rw-r--r--cpp/src/Ice/ios/StreamTransceiver.cpp6
-rw-r--r--cpp/src/IceIAP/Transceiver.mm4
-rw-r--r--cpp/src/IceSSL/SecureTransportCertificateI.cpp28
-rw-r--r--cpp/src/IceSSL/SecureTransportTransceiverI.cpp5
-rw-r--r--cpp/src/IceSSL/SecureTransportUtil.cpp20
-rwxr-xr-xcpp/src/IceSSL/Util.cpp2
-rw-r--r--cpp/src/IceUtil/OutputUtil.cpp50
-rw-r--r--cpp/src/IceUtil/Time.cpp4
-rw-r--r--cpp/src/Slice/CPlusPlusUtil.cpp4
-rw-r--r--cpp/src/Slice/Parser.cpp61
-rw-r--r--cpp/src/Slice/Parser.h27
-rw-r--r--cpp/src/Slice/StringLiteralUtil.cpp17
-rw-r--r--cpp/src/slice2cpp/Gen.cpp7
-rw-r--r--cpp/src/slice2swift/Gen.cpp2044
-rw-r--r--cpp/src/slice2swift/Gen.h167
-rw-r--r--cpp/src/slice2swift/Main.cpp355
-rw-r--r--cpp/src/slice2swift/SwiftUtil.cpp2815
-rw-r--r--cpp/src/slice2swift/SwiftUtil.h184
-rw-r--r--cpp/test/IceUtil/stacktrace/StackTrace.debug.macOS8
-rw-r--r--cpp/test/IceUtil/stacktrace/StackTrace.release-xcode10.macOS2
-rw-r--r--cpp/test/IceUtil/stacktrace/StackTrace.release-xcode9.macOS2
-rw-r--r--cpp/test/ios/controller/C++ Test Controller.xcodeproj/project.pbxproj3
-rw-r--r--cpp/test/ios/controller/Classes/Base.lproj/Main.storyboard6
-rw-r--r--csharp/src/Ice/PropertyNames.cs3
-rw-r--r--csharp/src/Ice/Proxy.cs2
-rw-r--r--csharp/src/Ice/Util.cs2
-rw-r--r--csharp/src/Ice/Value.cs2
-rw-r--r--java-compat/src/Ice/src/main/java/IceInternal/PropertyNames.java3
-rw-r--r--java/src/Ice/src/main/java/com/zeroc/IceInternal/PropertyNames.java3
-rw-r--r--js/src/Ice/PropertyNames.js3
-rw-r--r--objective-c/test/ios/controller/Objective-C Test Controller.xcodeproj/project.pbxproj20
-rw-r--r--scripts/Component.py6
-rw-r--r--scripts/Util.py59
-rw-r--r--slice/Glacier2/Metrics.ice2
-rw-r--r--slice/Ice/Communicator.ice83
-rw-r--r--slice/Ice/Connection.ice28
-rw-r--r--slice/Ice/Endpoint.ice12
-rw-r--r--slice/Ice/EndpointF.ice2
-rw-r--r--slice/Ice/FacetMap.ice2
-rw-r--r--slice/Ice/ImplicitContext.ice12
-rw-r--r--slice/Ice/Logger.ice12
-rw-r--r--slice/Ice/Metrics.ice2
-rw-r--r--slice/Ice/ObjectAdapter.ice74
-rw-r--r--slice/Ice/ObjectFactory.ice2
-rw-r--r--slice/Ice/Plugin.ice4
-rw-r--r--slice/Ice/Properties.ice20
-rw-r--r--slice/Ice/ServantLocator.ice6
-rw-r--r--slice/Ice/ValueFactory.ice6
-rw-r--r--slice/IceBT/EndpointInfo.ice2
-rw-r--r--slice/IceGrid/PluginFacade.ice8
-rw-r--r--slice/IceIAP/ConnectionInfo.ice2
-rw-r--r--slice/IceIAP/EndpointInfo.ice2
-rw-r--r--slice/IceSSL/ConnectionInfo.ice5
-rw-r--r--slice/IceSSL/ConnectionInfoF.ice2
-rw-r--r--slice/IceSSL/EndpointInfo.ice2
-rw-r--r--slice/IceStorm/Metrics.ice2
-rw-r--r--swift/.gitignore1
-rw-r--r--swift/.jazzy.yaml17
-rw-r--r--swift/.swift-version1
-rw-r--r--swift/.swiftformat1
-rw-r--r--swift/.swiftlint.yml10
-rw-r--r--swift/README.md88
-rw-r--r--swift/Rakefile653
-rwxr-xr-xswift/allTests.py11
-rw-r--r--swift/ice.xcodeproj/project.pbxproj18536
-rw-r--r--swift/ice.xcodeproj/project.xcworkspace/contents.xcworkspacedata7
-rw-r--r--swift/ice.xcodeproj/xcshareddata/xcschemes/Ice iOS.xcscheme102
-rw-r--r--swift/ice.xcodeproj/xcshareddata/xcschemes/Ice macOS.xcscheme113
-rw-r--r--swift/src/Glacier2/Glacier2Swift.h9
-rw-r--r--swift/src/Glacier2/Info.plist24
-rw-r--r--swift/src/Ice/AdminFacetFactory.swift108
-rw-r--r--swift/src/Ice/Blobject.swift40
-rw-r--r--swift/src/Ice/BlobjectAsync.swift46
-rw-r--r--swift/src/Ice/ClassResolver.swift68
-rw-r--r--swift/src/Ice/CommunicatorI.swift316
-rw-r--r--swift/src/Ice/ConnectionI.swift161
-rw-r--r--swift/src/Ice/ConnectionInfoFactory.swift255
-rw-r--r--swift/src/Ice/EndpointI.swift185
-rw-r--r--swift/src/Ice/EndpointInfoFactory.swift106
-rw-r--r--swift/src/Ice/Exception.swift100
-rw-r--r--swift/src/Ice/FormatType.swift10
-rw-r--r--swift/src/Ice/IceSwift.h9
-rw-r--r--swift/src/Ice/ImplicitContextI.swift31
-rw-r--r--swift/src/Ice/Incoming.swift239
-rw-r--r--swift/src/Ice/Info.plist24
-rw-r--r--swift/src/Ice/InitializationData.swift16
-rw-r--r--swift/src/Ice/Initialize.swift280
-rw-r--r--swift/src/Ice/InputStream.swift1839
-rw-r--r--swift/src/Ice/LocalExceptionDescription.swift762
-rw-r--r--swift/src/Ice/LocalExceptionFactory.swift304
-rw-r--r--swift/src/Ice/LocalObject.swift52
-rw-r--r--swift/src/Ice/LoggerWrapper.swift66
-rw-r--r--swift/src/Ice/Mutex.swift27
-rw-r--r--swift/src/Ice/NativePropertiesAdmin.swift23
-rw-r--r--swift/src/Ice/Object.swift153
-rw-r--r--swift/src/Ice/ObjectAdapterI.swift241
-rw-r--r--swift/src/Ice/OptionalFormat.swift30
-rw-r--r--swift/src/Ice/OutputStream.swift1076
-rw-r--r--swift/src/Ice/ProcessI.swift15
-rw-r--r--swift/src/Ice/PropertiesAdminI.swift38
-rw-r--r--swift/src/Ice/PropertiesI.swift72
-rw-r--r--swift/src/Ice/Proxy.swift1419
-rw-r--r--swift/src/Ice/ServantManager.swift180
-rw-r--r--swift/src/Ice/SliceFlags.swift17
-rw-r--r--swift/src/Ice/SliceInfo.swift26
-rw-r--r--swift/src/Ice/SlicedData.swift13
-rw-r--r--swift/src/Ice/UnknownSlicedValue.swift46
-rw-r--r--swift/src/Ice/Util.swift76
-rw-r--r--swift/src/Ice/Value.swift83
-rw-r--r--swift/src/Ice/ValueFactoryManagerI.swift23
-rw-r--r--swift/src/IceGrid/IceGridSwift.h9
-rw-r--r--swift/src/IceGrid/Info.plist24
-rw-r--r--swift/src/IceObjc/AdminFacetFactory.h21
-rw-r--r--swift/src/IceObjc/BlobjectFacade.h66
-rw-r--r--swift/src/IceObjc/BlobjectFacade.mm46
-rw-r--r--swift/src/IceObjc/Communicator.h68
-rw-r--r--swift/src/IceObjc/Communicator.mm455
-rw-r--r--swift/src/IceObjc/Config.h18
-rw-r--r--swift/src/IceObjc/Connection.h117
-rw-r--r--swift/src/IceObjc/Connection.mm373
-rw-r--r--swift/src/IceObjc/Convert.h124
-rw-r--r--swift/src/IceObjc/Convert.mm392
-rw-r--r--swift/src/IceObjc/Endpoint.h87
-rw-r--r--swift/src/IceObjc/Endpoint.mm147
-rw-r--r--swift/src/IceObjc/Exception.h129
-rw-r--r--swift/src/IceObjc/Exception.mm36
-rw-r--r--swift/src/IceObjc/IceUtil.h67
-rw-r--r--swift/src/IceObjc/IceUtil.mm220
-rw-r--r--swift/src/IceObjc/ImplicitContext.h26
-rw-r--r--swift/src/IceObjc/ImplicitContext.mm47
-rw-r--r--swift/src/IceObjc/LocalObject.h27
-rw-r--r--swift/src/IceObjc/LocalObject.mm64
-rw-r--r--swift/src/IceObjc/Logger.h35
-rw-r--r--swift/src/IceObjc/Logger.mm43
-rw-r--r--swift/src/IceObjc/LoggerWrapperI.h64
-rw-r--r--swift/src/IceObjc/ObjectAdapter.h48
-rw-r--r--swift/src/IceObjc/ObjectAdapter.mm226
-rw-r--r--swift/src/IceObjc/ObjectPrx.h138
-rw-r--r--swift/src/IceObjc/ObjectPrx.mm757
-rw-r--r--swift/src/IceObjc/OutputStream.h13
-rw-r--r--swift/src/IceObjc/Process.h22
-rw-r--r--swift/src/IceObjc/Process.mm27
-rw-r--r--swift/src/IceObjc/Properties.h33
-rw-r--r--swift/src/IceObjc/Properties.mm122
-rw-r--r--swift/src/IceObjc/PropertiesAdmin.h24
-rw-r--r--swift/src/IceObjc/PropertiesAdmin.mm77
-rw-r--r--swift/src/IceObjc/TraceUtil.h16
-rw-r--r--swift/src/IceObjc/TraceUtil.mm22
-rw-r--r--swift/src/IceObjc/UnsupportedAdminFacet.h12
-rw-r--r--swift/src/IceObjc/UnsupportedAdminFacet.mm8
-rw-r--r--swift/src/IceObjc/module.map22
-rw-r--r--swift/src/IceStorm/IceStormSwift.h9
-rw-r--r--swift/src/IceStorm/Info.plist24
-rw-r--r--swift/test/Ice/acm/AllTests.swift587
-rw-r--r--swift/test/Ice/acm/Client.swift20
-rw-r--r--swift/test/Ice/acm/Server.swift29
-rw-r--r--swift/test/Ice/acm/Test.ice33
-rw-r--r--swift/test/Ice/acm/TestI.swift129
-rw-r--r--swift/test/Ice/adapterDeactivation/AllTests.swift165
-rw-r--r--swift/test/Ice/adapterDeactivation/Client.swift16
-rw-r--r--swift/test/Ice/adapterDeactivation/Collocated.swift26
-rw-r--r--swift/test/Ice/adapterDeactivation/Server.swift22
-rw-r--r--swift/test/Ice/adapterDeactivation/Test.ice22
-rw-r--r--swift/test/Ice/adapterDeactivation/TestI.swift104
-rw-r--r--swift/test/Ice/admin/AllTests.swift597
-rw-r--r--swift/test/Ice/admin/Client.swift16
-rw-r--r--swift/test/Ice/admin/Server.swift24
-rw-r--r--swift/test/Ice/admin/Test.ice48
-rw-r--r--swift/test/Ice/admin/TestI.swift134
-rw-r--r--swift/test/Ice/ami/AllTests.swift525
-rw-r--r--swift/test/Ice/ami/Client.swift16
-rw-r--r--swift/test/Ice/ami/Collocated.swift54
-rw-r--r--swift/test/Ice/ami/Server.swift55
-rw-r--r--swift/test/Ice/ami/Test.ice77
-rw-r--r--swift/test/Ice/ami/TestI.swift163
-rw-r--r--swift/test/Ice/binding/AllTests.swift844
-rw-r--r--swift/test/Ice/binding/Client.swift16
-rw-r--r--swift/test/Ice/binding/Server.swift28
-rw-r--r--swift/test/Ice/binding/Test.ice31
-rw-r--r--swift/test/Ice/binding/TestI.swift78
-rw-r--r--swift/test/Ice/defaultServant/AllTests.swift136
-rw-r--r--swift/test/Ice/defaultServant/Client.swift16
-rw-r--r--swift/test/Ice/defaultServant/Test.ice15
-rw-r--r--swift/test/Ice/defaultValue/AllTests.swift183
-rw-r--r--swift/test/Ice/defaultValue/Client.swift12
-rw-r--r--swift/test/Ice/defaultValue/Test.ice180
-rw-r--r--swift/test/Ice/enums/AllTests.swift164
-rw-r--r--swift/test/Ice/enums/Client.swift17
-rw-r--r--swift/test/Ice/enums/Server.swift23
-rw-r--r--swift/test/Ice/enums/Test.ice92
-rw-r--r--swift/test/Ice/enums/TestI.swift43
-rw-r--r--swift/test/Ice/exceptions/AllTests.swift825
-rw-r--r--swift/test/Ice/exceptions/Client.swift25
-rw-r--r--swift/test/Ice/exceptions/Collocated.swift39
-rw-r--r--swift/test/Ice/exceptions/Server.swift60
-rw-r--r--swift/test/Ice/exceptions/ServerAMD.swift60
-rw-r--r--swift/test/Ice/exceptions/Test.ice105
-rw-r--r--swift/test/Ice/exceptions/TestAMD.ice110
-rw-r--r--swift/test/Ice/exceptions/TestAMDI.swift163
-rw-r--r--swift/test/Ice/exceptions/TestI.swift104
-rw-r--r--swift/test/Ice/facets/AllTests.swift160
-rw-r--r--swift/test/Ice/facets/Client.swift24
-rw-r--r--swift/test/Ice/facets/Collocated.swift33
-rw-r--r--swift/test/Ice/facets/Server.swift34
-rw-r--r--swift/test/Ice/facets/Test.ice55
-rw-r--r--swift/test/Ice/facets/TestI.swift101
-rw-r--r--swift/test/Ice/hold/AllTests.swift186
-rw-r--r--swift/test/Ice/hold/Client.swift17
-rw-r--r--swift/test/Ice/hold/Server.swift37
-rw-r--r--swift/test/Ice/hold/Test.ice19
-rw-r--r--swift/test/Ice/hold/TestI.swift74
-rw-r--r--swift/test/Ice/info/AllTests.swift236
-rw-r--r--swift/test/Ice/info/Client.swift17
-rw-r--r--swift/test/Ice/info/Server.swift26
-rw-r--r--swift/test/Ice/info/Test.ice21
-rw-r--r--swift/test/Ice/info/TestI.swift73
-rw-r--r--swift/test/Ice/inheritance/AllTests.swift205
-rw-r--r--swift/test/Ice/inheritance/Client.swift18
-rw-r--r--swift/test/Ice/inheritance/Collocated.swift25
-rw-r--r--swift/test/Ice/inheritance/Server.swift26
-rw-r--r--swift/test/Ice/inheritance/Test.ice231
-rw-r--r--swift/test/Ice/inheritance/TestI.swift168
-rw-r--r--swift/test/Ice/invoke/AllTests.swift115
-rw-r--r--swift/test/Ice/invoke/Client.swift23
-rw-r--r--swift/test/Ice/invoke/Server.swift52
-rw-r--r--swift/test/Ice/invoke/Test.ice27
-rw-r--r--swift/test/Ice/invoke/TestI.swift94
-rw-r--r--swift/test/Ice/location/AllTests.swift507
-rw-r--r--swift/test/Ice/location/Client.swift23
-rw-r--r--swift/test/Ice/location/Server.swift49
-rw-r--r--swift/test/Ice/location/Test.ice50
-rw-r--r--swift/test/Ice/location/TestI.swift270
-rw-r--r--swift/test/Ice/objects/AllTests.swift248
-rw-r--r--swift/test/Ice/objects/Client.swift31
-rw-r--r--swift/test/Ice/objects/Collocated.swift41
-rw-r--r--swift/test/Ice/objects/Derived.ice17
-rw-r--r--swift/test/Ice/objects/DerivedEx.ice16
-rw-r--r--swift/test/Ice/objects/II.swift10
-rw-r--r--swift/test/Ice/objects/Server.swift33
-rw-r--r--swift/test/Ice/objects/Test.ice307
-rw-r--r--swift/test/Ice/objects/TestI.swift242
-rw-r--r--swift/test/Ice/operations/AllTests.swift56
-rw-r--r--swift/test/Ice/operations/BatchOneways.swift109
-rw-r--r--swift/test/Ice/operations/BatchOnewaysAMI.swift63
-rw-r--r--swift/test/Ice/operations/Client.swift24
-rw-r--r--swift/test/Ice/operations/Collocated.swift43
-rw-r--r--swift/test/Ice/operations/Oneways.swift20
-rw-r--r--swift/test/Ice/operations/OnewaysAMI.swift71
-rw-r--r--swift/test/Ice/operations/Server.swift38
-rw-r--r--swift/test/Ice/operations/ServerAMD.swift38
-rw-r--r--swift/test/Ice/operations/Test.ice455
-rw-r--r--swift/test/Ice/operations/TestAMD.ice367
-rw-r--r--swift/test/Ice/operations/TestAMDI.swift446
-rw-r--r--swift/test/Ice/operations/TestI.swift413
-rw-r--r--swift/test/Ice/operations/Twoways.swift1225
-rw-r--r--swift/test/Ice/operations/TwowaysAMI.swift754
-rw-r--r--swift/test/Ice/optional/AllTests.swift3316
-rw-r--r--swift/test/Ice/optional/Client.swift21
-rw-r--r--swift/test/Ice/optional/Server.swift27
-rw-r--r--swift/test/Ice/optional/ServerAMD.swift27
-rw-r--r--swift/test/Ice/optional/Test.ice336
-rw-r--r--swift/test/Ice/optional/TestAMD.ice315
-rw-r--r--swift/test/Ice/optional/TestAMDI.swift260
-rw-r--r--swift/test/Ice/optional/TestI.swift261
-rw-r--r--swift/test/Ice/properties/Client.swift99
-rw-r--r--swift/test/Ice/properties/config/.gitignore1
-rw-r--r--swift/test/Ice/properties/config/config.11
-rw-r--r--swift/test/Ice/properties/config/config.21
-rw-r--r--swift/test/Ice/properties/config/config.31
-rw-r--r--swift/test/Ice/properties/config/configPath1
-rwxr-xr-xswift/test/Ice/properties/config/escapes.cfg30
-rw-r--r--swift/test/Ice/proxy/AllTests.swift917
-rw-r--r--swift/test/Ice/proxy/Client.swift19
-rw-r--r--swift/test/Ice/proxy/Collocated.swift29
-rw-r--r--swift/test/Ice/proxy/Server.swift31
-rw-r--r--swift/test/Ice/proxy/ServerAMD.swift31
-rw-r--r--swift/test/Ice/proxy/Test.ice26
-rw-r--r--swift/test/Ice/proxy/TestAMD.ice24
-rw-r--r--swift/test/Ice/proxy/TestAMDI.swift48
-rw-r--r--swift/test/Ice/proxy/TestI.swift46
-rw-r--r--swift/test/Ice/retry/AllTests.swift126
-rw-r--r--swift/test/Ice/retry/Client.swift26
-rw-r--r--swift/test/Ice/retry/Collocated.swift26
-rw-r--r--swift/test/Ice/retry/Server.swift26
-rw-r--r--swift/test/Ice/retry/Test.ice21
-rw-r--r--swift/test/Ice/retry/TestI.swift45
-rw-r--r--swift/test/Ice/scope/AllTests.swift302
-rw-r--r--swift/test/Ice/scope/Client.swift19
-rw-r--r--swift/test/Ice/scope/Server.swift28
-rw-r--r--swift/test/Ice/scope/Test.ice137
-rw-r--r--swift/test/Ice/scope/TestI.swift127
-rw-r--r--swift/test/Ice/servantLocator/AllTests.swift208
-rw-r--r--swift/test/Ice/servantLocator/Client.swift22
-rw-r--r--swift/test/Ice/servantLocator/Collocated.swift30
-rw-r--r--swift/test/Ice/servantLocator/ServantLocatorI.swift118
-rw-r--r--swift/test/Ice/servantLocator/Server.swift31
-rw-r--r--swift/test/Ice/servantLocator/ServerAMD.swift31
-rw-r--r--swift/test/Ice/servantLocator/Test.ice52
-rw-r--r--swift/test/Ice/servantLocator/TestAMD.ice51
-rw-r--r--swift/test/Ice/servantLocator/TestAMDI.swift111
-rw-r--r--swift/test/Ice/servantLocator/TestI.swift89
-rw-r--r--swift/test/Ice/slicing/exceptions/AllTests.swift597
-rw-r--r--swift/test/Ice/slicing/exceptions/Client.swift21
-rw-r--r--swift/test/Ice/slicing/exceptions/ClientPrivate.ice29
-rw-r--r--swift/test/Ice/slicing/exceptions/Server.swift27
-rw-r--r--swift/test/Ice/slicing/exceptions/ServerAMD.swift27
-rw-r--r--swift/test/Ice/slicing/exceptions/ServerPrivate.ice49
-rw-r--r--swift/test/Ice/slicing/exceptions/ServerPrivateAMD.ice49
-rw-r--r--swift/test/Ice/slicing/exceptions/Test.ice94
-rw-r--r--swift/test/Ice/slicing/exceptions/TestAMD.ice94
-rw-r--r--swift/test/Ice/slicing/exceptions/TestAMDI.swift192
-rw-r--r--swift/test/Ice/slicing/exceptions/TestI.swift144
-rw-r--r--swift/test/Ice/slicing/objects/AllTests.swift1847
-rw-r--r--swift/test/Ice/slicing/objects/Client.swift39
-rw-r--r--swift/test/Ice/slicing/objects/ClientPrivate.ice46
-rw-r--r--swift/test/Ice/slicing/objects/Server.swift27
-rw-r--r--swift/test/Ice/slicing/objects/ServerAMD.swift27
-rw-r--r--swift/test/Ice/slicing/objects/ServerPrivate.ice65
-rw-r--r--swift/test/Ice/slicing/objects/ServerPrivateAMD.ice65
-rw-r--r--swift/test/Ice/slicing/objects/Test.ice170
-rw-r--r--swift/test/Ice/slicing/objects/TestAMD.ice165
-rw-r--r--swift/test/Ice/slicing/objects/TestAMDI.swift481
-rw-r--r--swift/test/Ice/slicing/objects/TestI.swift385
-rw-r--r--swift/test/Ice/stream/Client.swift589
-rw-r--r--swift/test/Ice/stream/Test.ice175
-rw-r--r--swift/test/Ice/timeout/AllTests.swift369
-rw-r--r--swift/test/Ice/timeout/Client.swift18
-rw-r--r--swift/test/Ice/timeout/Server.swift50
-rw-r--r--swift/test/Ice/timeout/Test.ice26
-rw-r--r--swift/test/Ice/timeout/TestI.swift48
-rw-r--r--swift/test/Ice/udp/AllTests.swift201
-rw-r--r--swift/test/Ice/udp/Client.swift29
-rw-r--r--swift/test/Ice/udp/Server.swift54
-rw-r--r--swift/test/Ice/udp/Test.ice27
-rw-r--r--swift/test/Ice/udp/TestI.swift47
-rw-r--r--swift/test/IceSSL/configuration/AllTests.swift1412
-rw-r--r--swift/test/IceSSL/configuration/Client.swift27
-rw-r--r--swift/test/IceSSL/configuration/Server.swift32
-rw-r--r--swift/test/IceSSL/configuration/Test.ice28
-rw-r--r--swift/test/IceSSL/configuration/TestI.swift90
-rw-r--r--swift/test/Slice/escape/Clash.ice63
-rw-r--r--swift/test/Slice/escape/Client.swift83
-rw-r--r--swift/test/Slice/escape/Key.ice77
-rw-r--r--swift/test/TestCommon/Info.plist24
-rw-r--r--swift/test/TestCommon/TestCommon.swift193
-rw-r--r--swift/test/TestDriver/iOS/AppDelegate.swift26
-rw-r--r--swift/test/TestDriver/iOS/Assets.xcassets/AppIcon.appiconset/Contents.json98
-rw-r--r--swift/test/TestDriver/iOS/Assets.xcassets/Contents.json6
-rw-r--r--swift/test/TestDriver/iOS/Base.lproj/LaunchScreen.storyboard25
-rw-r--r--swift/test/TestDriver/iOS/Base.lproj/Main.storyboard77
-rw-r--r--swift/test/TestDriver/iOS/ControllerI.swift284
-rw-r--r--swift/test/TestDriver/iOS/Info.plist45
-rw-r--r--swift/test/TestDriver/iOS/ViewController.swift106
-rw-r--r--swift/test/TestDriver/macOS/Info.plist24
-rw-r--r--swift/test/TestDriver/macOS/main.swift56
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)
+}